
可以观察到OSTickISR_Init()函数内部调用了OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),并且:
1、该OSTickISR_Init()函数所在的.C文件包含了includes.h文件
#include "includes.h"
2、OS_CPU.H 有如下宏定义
#define OS_CRITICAL_METHOD 3
但是编译系统报错,错误信息为:undeclared identifier `cpu_sr'。
原因
uCOSII有3种临界区方案,系统默认选择第3种临界区方案(参见OS_CPU.H)。这个方案是把CPU的中断状态保存到一个局部变量,在退出临界区的时候再从这个变量里读取出来,恢复到状态寄存器。
但这个局部变量ucos并没有定义出来,目的可能是为了兼容第1和2种方案的临界区(这个我没仔细研究)。
本体是这个: #define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();},效果相当于你自己在这个地方写了一句代码,代码内

博客讲述了在使用uCOSII操作系统时遇到的编译错误,原因是未定义临界区变量'cpu_sr'。文章详细分析了uCOSII的临界区方案,并提供了问题的解决方法,即在OSTickISR_Init()函数内部根据OS_CRITICAL_METHOD定义一个局部变量'cpu_sr'。作者给出了修改后的代码并确认经过修改后,程序能够正常运行。
513

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



