FreeRTOS 学习教程之任务调度算法

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 中进行配置。

猜你喜欢

转载自blog.csdn.net/weixin_44916154/article/details/124749653
今日推荐