UCOSII里面为什么调用OS_ENTER_CRITICAL()或OS_EXIT_CRITICAL()会出错,出错信息为:undeclared identifier `cpu_sr‘

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

 可以观察到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();},效果相当于你自己在这个地方写了一句代码,代码内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值