金牌会员
 
- 积分
- 1957
- 金钱
- 1957
- 注册时间
- 2014-8-8
- 在线时间
- 307 小时
|
发表于 2015-12-31 11:21:55
|
显示全部楼层
我想想可能是以前使用的有点问题的,您看这么理解还对:
用OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL()我是限制的中断嵌套,因为发生该中断的时候其他中断也停止了,这是ucos系统核心其实也是停止的,所以不会发送什么无法恢复导致程序跑飞的BUG;
使用OSIntEnter() 和 OSIntExit(),是允许在ucos下中断嵌套,必须所有中断执行完成才能恢复中断之前的任务或则切换为最高优先级任务;
但是我看OSIntEnter() 说明是在调用OSIntEnter() 函数的时候往往已经调用了OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL(),这个应该是在函数里加的:
[mw_shl_code=c,true]MyISR()
{
OS_ENTER_CRITICAL() ;
OSIntEnter();
OS_EXIT_CRITICAL();
OSIntExt();//这个里面也是调用了OS_ENTER_CRITICAL() 和OS_EXIT_CRITICAL()的,我想都是为了防止在中断执行错误。
}[/mw_shl_code] |
|