第三章
3.1.1 uC/OS-ll的中断过程
定义:系统接收到中断请求后,如果这时CPU处于中断允许状态,系统就会终止正在运行的当前任务,而按照中断向量的指向转而去运行中断服务子程序;当中断服务子程序的运行结束后,系统将会根据情况返回被终止的任务继续运行,或者转向运行另一个具有更高优先级别的就绪任务。
注:对于可剥夺型内核来说,中断服务子程序运行结束之后,系统将会根据情况进行一次任务调度去运行优先级别最高的就绪任务,而不一定要持续运行被中断的任务。
两个重要函数:OSIntEnter()和OSIntExit()
OSIntEnter():把全局变量OSIntNexting加1,记录中断嵌套的层数。常常发生在中断服务程序保护了被中断任务的断点数据之后,运行用户中断服务代码之前,称为进入中断服务函数。
OSIntExit():中断嵌套层数计数器为0、调度器未被锁定且从任务就绪表中查找到的最高级就绪任务又不是被中断的任务时进行任务切换,否则返回被中断的服务子程序。
通知μC/OS-Ⅱ,中断服务子程序开始了.
void OSIntEnter (void)
{
OS_ENTER_CRITICAL();
OSIntNesting++;
OS_EXIT_CRITICAL();
}
通知μC/OS-Ⅱ,脱离了中断