OS_CRITICAL_METHOD == 3

2019-07-20 22:03发布

这句话怎么理解?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
正点原子
1楼-- · 2019-07-21 00:06
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-07-21 00:22


1)当OS_CRITICAL_METHOD= = 1时,简单实现如下: 

#define   OS_ENTER_CRITICAL()   disable_int() 

#define   OS_EXIT_CRITICAL()      enable_int() 

但这样有一个问题,如果禁止中断的情况下调用uC/OS-II功能函数,那么从功能函数返回时,中断可能变成允许的了,而实际上还是希望是禁止的。 



2)当OS_CRITICAL_METHOD= = 2时,实现如下: 

#define OS_ENTER_CRITICAL() asm(“PUSH PSW”); asm(“DI”); 

#define OS_EXIT_CRITICAL() asm(“POP PSW”); 

执行OS_ENTER_CRITICAL()时,先将中断状态保存到堆栈,然后关中断;执行OS_EXIT_CRITICAL()时,再从堆栈中恢复原来的中断开/关状态。这种方法不会改变中断状态,避免前面的问题。 



3)当OS_CRITICAL_METHOD= = 3时,实现如下: 

#define OS_ENTER_CRITICAL() cpu_sr = get_processor_psw(); disable_interrupts(); 

#define OS_EXIT_CRITICAL() set_ processor_psw(cpu_sr); 

将处理器状态字保存在局部变量中。
颜渊
3楼-- · 2019-07-21 05:40
回复【2楼】正点原子:
---------------------------------
那方法3是什么情况?
颜渊
4楼-- · 2019-07-21 07:59
 精彩回答 2  元偷偷看……
aaaaalaode
5楼-- · 2019-07-21 12:33
为什么例程里定义的是 4  啊。

一周热门 更多>