参考 FreeRTOs,orq怎样工作小节获取多任务的基本概念任务和联合程序文档提供了怎样判断何时适合以及何时不适合使用联合程序的方法,下面是简单的总结。注意一个系统可以只使用任务、或者只使用联合程序、或混合使用-但是任务和联合程序使用不同的API函数,因此一个队列
(或者信号)不能用于从任务传递数据到联合程序,反之亦然。
任务"的特性
FreeRTOS低于V4.0.0.0的版本只允许实时系统的结构以一组任务的方式组成,这是RTOS调度的传统模式。
简评 In brief:一个使用RTos的实时应用系统可以由一组独立的任务组成,每个任务执行它自己的内容而不依赖于其他任务或者调度器。在任何时候只有个任务可以被执行,调度器负责决定哪个任务应当被执行。调度器反复启动和停止任务(切换任务),因为个任务不清楚调度器的活动,所以在任务切换时保证处理器内容不变(寄存器值、堆栈等)就是实时内核调度器的工作。要做到这点每个任务都需要使用自己的堆栈,当任务切换时运行的参数保存到堆栈中任务再次运行时就可以从堆栈中恢复参数。参考 FreeRTOs怎样工作小节获得更多内容。
就绪的任务是那些可以执行(没有被阻塞或暂停),但是因为其他相同或更高优先级任务正在运行造成还没有运行的任务。
阻塞
当一个任务等待临时事件或外部事件时它就是处于阻塞状态。例如,任务调用 VAsk Delay(),它将被阻塞(置为阻塞状态)直到超过延时时间个临时事件。任务也可以阻塞等待队列和信号事件。阻塞状态的任务般有一个超时时间,超时后任务将解锁。阻塞的任务不会参与调度。