UCOSII_进入临界段方式:OS_CRITICAL_METHOD

#进入临界段方式:OS_CRITICAL_METHOD==?

//OS_CRITICAL_METHOD = 1 :
//OS_CRITICAL_METHOD = 2 :
//OS_CRITICAL_METHOD = 3 :
#define  OS_CRITICAL_METHOD   3	 	

#if OS_CRITICAL_METHOD == 3
#define  OS_ENTER_CRITICAL()  {cpu_sr = OS_CPU_SR_Save();}
#define  OS_EXIT_CRITICAL()   {OS_CPU_SR_Restore(cpu_sr);}
#endif

##方式1:
直接用处理器开关中断指令开关中断,这种没有现场保护的方式造成无法进行临界区嵌套,如果有两层临界区,那么里层退出保护时候直接开了中断,而外层的临界区还没有结束。(关几次中断都是关中断,开一次中断就全开了)
##方式2:
这种方式先把中断状态压入堆栈保存起来,然后关中断。恢复中断时,直接恢复栈中的中断状态。但是很少使用,看了下面这篇博文的理解是编译器很可能无法很好的处理在临界段内使用堆栈造成的冲突。

http://www.cnblogs.com/shafei/p/3524919.html?utm_source=tuicool&utm_medium=referral
但是又产生了新的疑惑,中断嵌套等完好的堆栈操作对于编译器是怎么优化处理的。待解决</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值