前言
本文对ucosiii中的临界区代码进行分析
正文
ucos源码中经常出现如下代码:
CPU_SR_ALLOC();
OS_CRITICAL_ENTER();
OS_CRITICAL_EXIT_NO_SCHED();
这是为了开启临界区,临界区内将不会出现任务切换。
假设没有临界区,如果有甲乙两个任务,甲要执行一段代码把abc三个值设置成123,如果甲把ab设置完12后出现任务切换,切换到任务乙,乙要把a设置成3,那么切换回来后,甲继续把c设置成3,这时甲认为abc的值为123,实际上却是323。
在OS_CRITICAL_ENTER()和OS_CRITICAL_EXIT_NO_SCHED()之间的代码称为临界区,临界区内将不会产生任务切换。
CPU_SR_ALLOC()的源码如下:
#define CPU_SR_ALLOC() CPU_SR cpu_sr = (CPU_SR)0
只是声明了一个变量cpu_sr
OS_CRITICAL_ENTER()的源码如下:

最低0.47元/天 解锁文章
704

被折叠的 条评论
为什么被折叠?



