论坛元老
 
- 积分
- 3071
- 金钱
- 3071
- 注册时间
- 2018-2-7
- 在线时间
- 285 小时
|
发表于 2018-6-27 14:00:00
|
显示全部楼层
进入临界区时,要在代码前面加上这句 CPU_SR_ALLOC(); 这句代码的宏定义是
#define CPU_SR_ALLOC() CPU_SR cpu_sr = (CPU_SR)0
而OS_CRITICAL_ENTER()函数内部又调用了 CPU_CRITICAL_ENTER();
这个函数 #define CPU_CRITICAL_ENTER() do { CPU_INT_DIS(); } while (0) 又调用了 CPU_INT_DIS();
而 #define CPU_INT_DIS() do { cpu_sr = CPU_SR_Save(); } while (0) 又调用了cpu_sr = CPU_SR_Save();
可以看出最终的调用是把寄存器的值保存在 cpu_sr 中。你进入临界区时没有CPU_SR_ALLOC(); 这个函数,也就是没有定义cpu_sr。所以进入临界区后代码 执行到 cpu_sr = CPU_SR_Save(); 这一句报错。因为cpu_sr没有定义,就直接使用了。
|
|