uC0S-II 临界代码开关中断操作的详解
-
执行临界代码段前后进行中断的开发,是为了保护临界代码段的连续执行,防止中断触发导致临界代码段执行过程中被打断,
或CPU调度任务进行切换任务。导致代码执行发生异常。
两个函数:
OS_ENTER_CRITICAL()//关中断函数
OS_EXIT_CRITICAL() //就是开中断函数
代码中应用示例代码如下:
这两个函数是uC/OS操作系统进入/退出“临界区”的功能代码,一般格式为:
OS_CPU_SR cpu_sr=0; //(1)这里定义了局部变量cpu_sr,如何就进行保存中断状态的???
OS_ENTER_CRITICAL(); //(2) //如何让ucos系统CPU无法执行任务调度的???
..............
.(3)
.............
OS_EXIT_CRITICAL(); //(4)
其中OS_ENTER_CRITICAL()就是关中断函数,而OS_EXIT_CRITICAL()就是开中断函数。
这几条命令代码的含义分别为:
(1)OS_ENTER_CRITICAL()和OS_EXIT_CRITIC()实现的方式是第三种:在关中断前,使用局部变量保存中断状态,所以需要先声明一个局部变量。
(2)作用是让ucos无法再执行任务调度,也就是执行(2)后,ucos处于关闭状态。
(3)区域用于处理比较连续的事情,不希望被ucos打断。
(4)用于恢复ucos的任务调度功能,重新开启ucos。
注意:用户的应用代码可以使用这两个宏来开中断和关中断。很明显,关中断会影响中断延迟,所以要特别小心。用户还可以用信号量来保护临界代码。
注:上文部分引用了其他博主的博客:https://blog.csdn.net/u012351051/article/details/50300645