关中断(临界区)的目的:防止高优先级中断或高优先级任务进入,或者 防止资源被占用
当我某个地方 需要关中断时,是不是一定要加上这句 “ OSIntNesting++;”,中断嵌套,告知OS有个ISR?
OS_ENTER_CRITICAL(); /// Tell uC/OS-II that we are starting an ISR
OSIntNesting++;
OS_EXIT_CRITICAL();
但是我看别人写的,有的地方没加。
主要想问:1.我能区分什么时候为了防止资源被占用而关中断,但搞不清什么时候需要防止高优先级中断进入,
2.关中断后高优先级中断和任务进不来,那中断嵌套(OSIntNesting++就表明中断嵌套吧)有什么用??
迷茫啊....
------解决方案--------------------
1.我能区分什么时候为了防止资源被占用而关中断,但搞不清什么时候需要防止高优先级中断进入,
比如说在某情况下,你必须精确的每隔50ms向外发送一帧数据,这一帧数据必须连续发出去不能中断(很多外设在通信过程中都有超时处理的)
这个时候可以在定时器中发送,但在定时器中断里面如果有高优先级中断发生那么你的通信就会中断会出问题
2.关中断后高优先级中断和任务进不来,那中断嵌套(OSIntNesting++就表明中断嵌套吧)有什么用??
OSIntNesting++这句我也不知道是做什么的,但中断嵌套本身是很有用的