调度的定义:
调度器,决定了任务的运行顺序。uC/OS-III 是一个可抢占的,基于优先级的内核。根据其重要性每个任务都被分配了一个优先级。uC/OS-III 支持多个任务拥有相同的优先级。
“可抢占的”意味当事件发生时,如果事件让高优先级任务被就绪,uC/OS-III 马上将CPU 的控制权交给高优先级任务。因此,当一个任务提交信号量、发送消息给一个高优先级的任务(若该任务被就绪了),当前的任务就会被停止,更高优先级的任务获得CPU 的控制权。类似的,当ISR 提交信号量或发送消息给一更高优先级的任务(若该任务被就绪了),那么中断返回的时候不会返回到原任务,而是高优先级任务。
一 抢占式调度
uC/OS-III 通过两种方法处理中断提交的事件:直接提交或延迟提交。
其实上图就是一个基本的中断控制系统的操作。进程如下
(1)一个低优先级任务正在执行,这时中断发生了。
(2)如果中断使能,指令指针IP 会跳转到中断服务程序。
(3)中断服务程序处理相关的程序,发送信号量或消息给一个高优先级任务。高优先级任务被就绪。
(4)中断服务程序完成操作后,它将CPU 的控制权还给uC/OS-III。
(5)uC/OS-III 执行相应的操作。
(6)因为就绪队列中有一个更重要的任务,uC/OS-III 将不会返回中断前那个低优先级的任务。而是执行高优先级任务。
(7)开始执行高优先级任务
(8)高优先级任务处理完成后,将CPU 的控制权交给uC/OS-III。
(2)如果中断使能,指令指针IP 会跳转到中断服务程序。
(3)中断服务程序处理相关的程序,发送信号量或消息给一个高优先级任务。高优先级任务被就绪。
(4)中断服务程序完成操作后,它将CPU 的控制权还给uC/OS-III。
(5)uC/OS-III 执行相应的操作。
(6)因为就绪队列中有一个更重要的任务,uC/OS-III 将不会返回中断前那个低优先级的任务。而是执行高优先级任务。
(7)开始执行高优先级任务
(8)高优先级任务处理完成后,将CPU 的控制权交给uC/OS-III。
(9)uC/OS-III 执行相应的操作。
(10)uC/OS-III 转向执行原先那个低优先级任务。
(11)低优先级任务从被中断处继续执行。
(10)uC/OS-III 转向执行原先那个低优先级任务。
(11)低优先级任务从被中断处继续执行。
图7-2 显示了当选择延迟提交中断产生的事件的方式时的一些额外步骤。最后的结果是一样的:高优先级任务抢占了低优先级任务。
(1ÿ