FreeRTOS基础之任务调度机制

FreeRTOS基础之任务调度机制

1 、什么是任务的调度机制

​ 调度算法决定了哪个就绪(Ready)状态任务转换到运行(Running)状态。
对于单个内核而言,由于每个时刻,只能有一个任务是实际处于运行状态的,其它任务只能处理运行态以外的其它态(阻塞态blocked,就绪态Ready,暂停态Suspended)。因此,当FreeRTOS在任务调度时必须以一种规则来决定选择哪一个Ready状态的任务来进入Running状态。

2、任务调度算法

FreeRTOS有三种调度算法,分别是:

第一种:具有时间片的优先级抢先调度 Prioritized Pre-emptive Scheduling with Time Slicing

第二种:优先级抢先调度(无时间片)Prioritized Pre-emptive Scheduling (without Time Slicing)

第三种:合作调度Co-operative Scheduling

configUSE_PREEMPTION

该算法是配置任务是否具有可抢占的功能,即当高优先级的任务就绪时能否打断低优先级的任务而执行。
定义为 1 代表具有抢占功能,定义为 0 代表不具有抢占功能。

configUSE_TIME_SLICING

该算法是配置 同等 优先级的任务是否具备轮流执行的功能。如果不配置的话,意味着获得执行权限的任务在不结束的情况下会一直执行下去。
定义为 1 代表具有轮流执行的功能,定义为 0 代表不具有轮流执行的功能。

configIDLE_SHOULD_YIELD

该算法是配置空闲任务是否具有 让步 于其他任务的功能。如果配置的话,空闲任务在执行完自己的任务后会立即释放,让其他任务执行,而不会循环执行,即空闲任务占用的时间比较少;否则在时间片轮转的情况下会与其他任务轮流执行。
定义为 1 代表具有让步于其他任务的功能,定义为 0 代表不具有让步于其他任务的功能。
配置项ABCDE
configUSE_PREEMPTION11110
configUSE_TIME_SLICING1100x
configIDLE_SHOULD_YIELD1010x
说明常用很少用很少用很少用几乎不用
  • A:可抢占+时间片轮转+空闲任务让步
  • B:可抢占+时间片轮转+空闲任务不让步
  • C:可抢占+非时间片轮转+空闲任务让步
  • D:可抢占+非时间片轮转+空闲任务不让步
  • E:合作调度

对于任务调度算法,通过在文件 FreeRTOSConfig.h 中进行配置。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仙人掌渴了要喝水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值