运行条件:

这里仅对时间片调度进行说明。

创建 4 个同优先级任务 Task1,Task2,Task3 和 Task4。

每个任务分配的时间片大小是 5 个系统时钟节拍。

运行过程描述如下:

先运行任务 Task1,运行够 5 个系统时钟节拍后,通过时间片调度切换到任务 Task2。

任务 Task2 运行够 5 个系统时钟节拍后,通过时间片调度切换到任务 Task3。

任务 Task3 在运行期间调用了阻塞式 API 函数,调用函数时,虽然 5 个系统时钟节拍的时间片大小还没有用完,此时依然会通过时间片调度切换到下一个任务 Task4。 (注意,没有用完的时间片不会再使用,下次任务 Task3 得到执行还是按照 5 个系统时钟节拍运行)

任务 Task4 运行够 5 个系统时钟节拍后,通过时间片调度切换到任务 Task1。

上面就是一个简单的同优先级任务通过时间片调度进行任务调度和任务切换的过程。

Summary:

时间片调度和抢占式调度我们一般都是开启了的,这样优先级相同时,使用时间片调度,优先级不同时,使用抢占式调度。默认情况下,在freertos.h中使能了时间片调度:

freertos移植教程_freertos任务调度原理

而抢占式调度需要我们用户自己开启,一般在freertosconfig.h中使能:

freertos移植教程_freertos任务调度原理

小编推荐阅读: