FreeRTOS 的任务调度方式和具体任务是怎么切换的

FreeRTOS操作系统主要是两种任务调度方式:

 抢占式调度
每个任务都有不同的优先级,任务会一直运行直到被高优先级任务抢占或者遇到阻塞式的 API 函数,比如 vTaskDelay。
 时间片调度
每个任务都有相同的优先级,任务会运行固定的时间片个数或者遇到阻塞式的 API 函数,比如vTaskDelay,才会执行同优先级任务之间的任务切换。

/***************************************************************************************/

任务切换具体过程

如果用户在 FreeRTOS 的配置文件 FreeRTOSConfig.h 中禁止使用时间片调度, 那么每个任务必须配置不同的优先级。当 FreeRTOS 多任务启动执行后,基本会按照如下的方式去执行:
假设现在有两个任务task1,task2
首先执行的最高优先级的任务 Task1, Task1 会一直运行直到遇到 系统阻塞式的 API 函数,比如延迟,事件标志等待,信号量等待, Task1 任务会被挂起,也就是释放 CPU 的执行权,让低优先级的任务得到执行。

✔ FreeRTOS 操作系统继续执行任务就绪列表中下一个最高优先级的任务 Task2,Task2 执行过程中有两种情况:

  1. Task1由于 延迟时间到, 接收到信号量消息方面的原因, 使得 Task1从挂起状态恢复到就绪态,在抢占式调度器的作用下,Task2 的执行会被 Task1 抢占。
  2. Task2 会一直运行直到遇到系统阻塞式的 API 函数,比如延迟,事件标志等待,信号量等待, Task2任务会被挂起,继而执行就绪列表中下一个最高优先级的任务。

✔ 如果用户创建了多个任务并且采用抢占式调度器的话,基本都是按照上面两条来执行。 根据抢占式调度器,当前的任务要么被高优先级任务抢占,要么通过调用阻塞式 API 来释放 CPU 使用权让低优先级任务执行,没有用户任务执行时就执行空闲任务。

主要是理解系统在何时调度???
阻塞式的 API 函数,比如延迟,事件标志等待,信号量等待等等,在这里也理解了为啥大多数任务都有延时了把。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值