FreeRTOS是如何工作的--实时调度
实时调度
下面的图 演示 前面定义的那些任务是如何被时实操作系统调度的。RTOS自己已经建立了一个任务----idle task---它只在没有其他任务执行的时候才被执行。RTOS idle task 总是处于可以执行的状态(注:也就是它不可能会因为等待什么外设资源而被阻塞,而是处于一种随时待命的状态).

上图中:
1. 在最开始,我们的两个任务都不能被执行-vControlTask等待合适(correct)的时间开始新的控制循环,vKeyHandlerTask等待键盘按下。处理器时间分配给 RTOS的idle task.
2. 在t1时刻,一个键盘按下(事件)出现. VKeyHandlerTask任务现在可以执行,它比RTOS的idle task有更高的优先级,所以处理器时间给它。
3. 在t2时刻,vKeyHandlerTask已经完成了对按键的处理,并更新了LCD。它不能继续,直到另一个键被按下,所以必须挂起它自己。RTOS idle task又被恢复执行。
4. 在t3时刻,一个定时器事件预示(indicates),可以执行下一个控制循环了。VControlTask现在可以执行,作为最高优先级的任务被立刻分配(scheduled)到处理器时间
5. 在t3和t4之间,当vControlTask任务还在执行的时候,一个键按下。VKeyHandlerTask不能被执行,因为它没有vControlTask的优先级高。不能分配(scheduled)到任何处理器时间。
6. 在t4时刻,vControlTask完成了控制循环的处理,不能够重新开始,直到下一个时间事件出现,所以它自己挂起自己。而vKeyHandlerTask现在是最高优先级的任务,可以运行了,所以,为了处理先前的键盘事件,分配(scheduled)到了处理器时间.
7. 在t5时刻,键盘已经被处理。VkeyHandlerTask为了等待下一个键盘事件,自己挂起自己。现在,我们的两个任务再度不能执行了。RTOS idle task分配到处理器时间。
8. 在t5和t6之间,一个定时器事件被处理,但是没有更多的键盘事件出现。
9. 下一个键盘按下出现在t6时刻,但在vKeyHandlerTask完成处理键之前,一个定时器事件出现了。现在两个任务都能被执行,而vControlTask比vKeyHandlerTask 有更多的优先级,所以vKeyHandlerTask在它完成处理键盘之前就被挂起了。VControlTask分配到处理器时间。
10. 在t8时刻,vControlTask完成处理控制循环,挂起自己以等待下一个事件。VKeyHandlerTask再次成为最高优先级的任务,能够运行,所以分配到处理器时间,从而键盘按下事件 处理能够完成。
===下一节: 实现细节 RTOS tick===
作者:Gavin Lee 更新日期:2006-04-13
来源:upsdn.net
浏览次数:
相关文章
相关评论 发表评论
- No Comments