1:相关概念
共享资源:被两个以上的并发程序单元(任务或ISR)访问的资源。共享资源一定是全局变量。
若共享资源具有只读特性,则不需要采取资源同步措施。各个任务可以任意交叉嵌套地对资源进行读取。
2:资源同步可以划分为两种情况
访问共享资源的并发程序中含有ISR。
访问共享资源的并发程序中只有任务。
2.1含有ISR 此类必须采用关中断的办法来访问共享资源。
情况1:若共享资源为全局变量,处理起来比较简单。直接调用 0S_ENTER_CRITICAL和0S_EXIT_CRITICAL函数。
情况2:若任务处理共享资源需要时间,所有共享资源都用关中断保护会极大影响实时性。则在任务中可以将共享资源拷贝到局部变量中。拷贝过程中关中断。
注意:关中断好处是简单,缺点是影响系统实时性。因此访问共享资源的临界代码必须尽量简单,常用于全局变量和小规模全局数据结构的访问。
2.2共享资源使用者只有任务
可采用关中断,关调度,使用互斥信号等办法。常用互斥信号,因为它具有处理优先级反转的功能。
注意:互斥信号的初始值为0xff(表示资源有效)。用完后调用OSMutexPost函数解除对共享资源的占有。
思考