FreeRTOS 学习教程之任务调度算法
所谓调度算法,就是怎么确定哪个就绪态的任务可以切换为运行状态。
在 FreeRTOS
中,任务调度有如下策略:
configUSE_PREEMPTION
该算法是配置任务是否具有可抢占的功能,即当高优先级的任务就绪时能否打断低优先级的任务而执行。
定义为1
代表具有抢占功能,定义为0
代表不具有抢占功能。
configUSE_TIME_SLICING
该算法是配置
同等
优先级的任务是否具备轮流执行的功能。如果不配置的话,意味着获得执行权限的任务在不结束的情况下会一直执行下去。
定义为1
代表具有轮流执行的功能,定义为0
代表不具有轮流执行的功能。
configIDLE_SHOULD_YIELD
该算法是配置空闲任务是否具有
让步
于其他任务的功能。如果配置的话,空闲任务在执行完自己的任务后会立即释放,让其他任务执行,而不会循环执行,即空闲任务占用的时间比较少;否则在时间片轮转的情况下会与其他任务轮流执行。
定义为1
代表具有让步于其他任务的功能,定义为0
代表不具有让步于其他任务的功能。
基于上述三种任务调度算法,具有如下情形:
配置项 | A | B | C | D | E |
---|---|---|---|---|---|
configUSE_PREEMPTION | 1 | 1 | 1 | 1 | 0 |
configUSE_TIME_SLICING | 1 | 1 | 0 | 0 | x |
configIDLE_SHOULD_YIELD | 1 | 0 | 1 | 0 | x |
说明 | 常用 | 很少用 | 很少用 | 很少用 | 几乎不用 |
- A:可抢占+时间片轮转+空闲任务让步
- B:可抢占+时间片轮转+空闲任务不让步
- C:可抢占+非时间片轮转+空闲任务让步
- D:可抢占+非时间片轮转+空闲任务不让步
- E:合作调度
对于任务调度算法,通过在文件 FreeRTOSConfig.h
中进行配置。