弱弱的问一个:uCOS-ii的一个基础问题

2019-03-24 16:29发布

uCOS-ii中好多下面这个代码:
#if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
    OS_CPU_SR  cpu_sr;
#endif
这个:OS_CPU_SR  cpu_sr;  怎么都不觉得它有用,而且还会引发编译警告!  为什么需要这一句? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
sblpp
1楼-- · 2019-03-25 01:17
< 这个啊
看看邵贝贝的那本书吧
上面写过的
“OS_ENTER_CRITICAL( )和OS_EXIT_CRITICAL( )是用来设置临界段代码的函数。OS_ENTER_CRITICAL( )使系统进入临界段,这时要求系统内核先关闭中断,再处置临界段代码,保护临界段代码不受多任务或中断服务子程序破坏。推出临界段时调用OS_EXIT_CRITICAL( ),系统重新开中断,进行正常任务调度。通常以上两个函数可以用3种方法实现,OS_CPU_H中定义了一个OS_CRITICAL_METHOD常数,用来选择函数实现的方法。常数值为1时,采用最简单的方法,OS_ENTER_CRITICAL( )中直接调用处理器指令关闭中断,OS_EXIT_CRITICAL( )调用相应处理器指令开中断(详细的代码在os_cpu_a.s文件中定义)。这样做存在一个问题:如果调用函数时系统禁止中断,那当临界段代码执行完毕后系统中断会变成允许了。常数值为2时,执行OS_ENTER_CRITICAL( )时会先将中断状态保存到堆栈中,然后关中断,执行OS_ENTER_CRITICAL( )时从堆栈中恢复原来的中断状态。这样做解决了方法1中存在的问题。常数值为3时需要多定义一个cpu_sr的局部变量,用于某些能直接得到当前处理器状态字的编译器中,保存状态字,用来恢复PSW。由于应用简单,方法1,2已经足够,所以本文中没有实现方法3的具体代码,而使方法3和方法2实现的代码一致。这里可以以后再扩充。

一周热门 更多>

相关问题

    相关文章