目的
学习和理解实时操作系统
声明
习题答案是笔者基于相关书籍和网上内容自己理解的,有不对或疑问的地方大家一起沟通
硬件平台
Arm-CortexM3内核
一.简述uC/OS-II的中断响应过程
系统中断是打开的。系统会终止当前正在运行的任务,保存任务堆栈。然后系统会根据中断类型,找到该中断对应的中断服务函数执行,处理完事情后,系统会根据情况选择对应的任务运行(不一定去执行被中断的任务)。
(1) 任务堆栈保存
在中断服务函数中首先将当前任务堆栈的相关信息保存到该任务对应的栈中,内核不同保存的方法不同。下面以Arm Cortex-M3内核为例,在跳转到中断服务函数前,硬件会自动将XPSR,PC,LR,R12,R0~R3等寄存器压到任务栈中,具体详见下图。
(2)任务处理
一方面是该中断具体事务的处理;一方面是系统逻辑流程控制(主要目的是记录中断嵌套,在中断返回前作为触发任务切换的条件之一)
(3)任务恢复
中断已经执行完(不存在嵌套),如果当前系统中就绪的最高优先级任务和被中断的任务优先级一样,就直接恢复被中断的任务继续执行。反之,就会触发一次任务切换,选择最高优先级任务运行。
二.全局变量OSIntNesting的作用是什么?
uC/OS-II允许在中断服务函数执行的过程中发生中断,故用此记录中断的嵌套数。
三.uC/OS-II的中断服务程序何时返回被中断的任务?何时不返回被中断的任务?
如果当前系统中就绪的最高优先级任务和被中断的任务优先级一样,就返回被中断的任务;反之就不返回被中断的任务。