FreeRTOS——任务调度(抢占式、时间片和合作式)

调度器

简单的来说,调度器就是使用相关的调度算法来决定当前需要执行的任务。

FreeRTOS操作系统支持三种调度方式:抢占式调度、时间片调度和合作式调度。

1.合作式调度

合作式调度器提供了一种单任务的系统结构:

口 当任务需要运行的时候,被添加到等待队列

口 任务在特定的时刻被调度运行(以周期性或者单次方式)
口 任务运行直到完成(高优先级任务不可抢占 CPU ),然后由调度器选择下一个任务
优点:调度简单,系统占用资源少(单任务结构,运行时高优先级任务不会抢占 CPU ,不需要给每个任务分配独立的栈空间)
缺点:系统实时性不够好
 Note :
单片机资源越来越丰富,加上合作式调度器的系统实时性不够好,合作式调度已经很少用了, FreeRTOS 在新的版本中已不再更新,简单了解即可。

2、抢占式调度
抢占式调度器提供了一种多任务的的系统结构,高优先级任务可以抢占低优先级任务的 CPU 使用权,使得系统实时性非常好。
使用抢占式调度器时,根据任务重要程度合理分配优先级, CPU 会优先执行就绪列表中优先级最高的任务。
下面图片:任务1优先级<任务2优先级<任务3优先级

 下面做个关于抢占式调度的测试:

用stm32cubeMX创建3个LED闪烁任务,优先级关系:LED1<LED2<LED3

 LED1任务:LED1间隔10ms闪烁

 LED2任务:LED2间隔1s闪烁

LED3任务:LED3间隔1s闪烁

 实验现象:

任务1不会执行,任务2和任务3交替执行

 3.时间片调度

时间片调度针对同优先级的任务,调度算法给同优先级的任务分配一个专门的列表,用于记录当前就绪的任务,并为每个任务分配一个时间片,这个时间片是固定的。

这里,一个Tick的时间是可以设定的:

在FreeRTOS.h文件里改变其频率:或者在stm32cubeMX中设定:

 下面做个时间片调度的测试(一个Tick周期为50ms):

还是创建3个任务,不过这次3个LED任务优先级相同

 3个任务里运行内容分别为LED1、LED2、LED3间隔10ms闪烁

 实验现象:

补充:若是关闭了时间片调度器,那么系统将只执行任务3,如何关闭时间片调度器如下图:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

西红柿鸡蛋超级美味

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

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

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

打赏作者

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

抵扣说明:

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

余额充值