RTOS之临界区与调度锁(CM3)

临界区:

寄存器:

PRIMASK:这是个只有1个位的寄存器。置1时, 会关掉所有可屏蔽的异常,只剩下 NMI和硬fault可以响应。其缺省值是0,表示没有关中断

由于内核很多代码和数据可以直接被任意任务共享,为了避免读写冲突,所以可以借助临界区保护的方法加以隔离。

例:如任务1中对变量cnt进行操作,若此时遇到任务转换或者进入中断,其中也会对变量cnt进行操作,可能导致任务1中的修改值被破环,故引入临界区保护。

可通过关闭所有可屏蔽中断来防止资源冲突,若在临界区中遇到任务切换,任务不会立即切换,会设置PendSVC挂起,若当前中断关闭,会在中断开启时立即进行切换。

临界区中代码应该尽可能短小,否则会影响系统实时性。

调度锁:

调度锁即调度器开关函数,如果某个任务调用了调度锁开关函数,那么处在调度锁开和调度锁关之间的代码不会在执行期间被高优先级的任务抢占,但是调度锁跟临界区不同,调度锁仅仅禁用任务调度,没有关闭任何中断,故中断可以正常执行。

猜你喜欢

转载自blog.csdn.net/LGM_1874/article/details/82463102