FreeRTOS基础知识记录
FreeRTOS基础知识
1、任务调度简介
简述:调度器就是使用相关的调度算法来决定当前需要执行的任务
FreeRTOS一共支持三种任务调度方式
1、抢占式调度
主要针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务
1. 高优先级任务,优先执行
2. 高优先级任务不停止,低优先级任务无法执行
3. 被抢占CPU的任务将会进入就绪态
2、时间片调度
主要针对优先级相同的任务,当多个任务优先级相同时,任务调度器会在每一次时间片到的时候切换任务
1. 同等优先级任务,轮流执行;时间片流转
2. 一个时间片大小,取决为滴答定时器中断频率
3. 注意任务中途被打断或阻塞,没有用完的时间片不会再使用,下次该任务得到执行还是按照一个时间片的钟时间进行
3、协程式调度
主要是函数调用,FreeRTOS现在虽然还支持,但是官方已经表示不再开发协程式调度
2、任务状态
FreeRTOS中任务共有4种状态:
1、运行态
正在执行的任务,该任务就处于运行态,注意在STM32中,同一时间仅一个任务处于运行态
2、就绪态
如果该任务已经能够被执行,但当前还未被执行,那么此任务处于就绪态
3、阻塞态
如果一个任务因延时或等待外部事件发生,那么这个任务就处于阻塞态
4、挂起态
类似暂停,调用函数vTaskSuspend()进入挂起态,需要调用解除挂起函数vTaskResume()才可以进入就绪态
注意:
1. 仅就绪态可转变成运行态
2. 其他状态的任务想运行,必须先转变成就绪态
就绪列表:pxReadyTasksLists[x],其中x代表任务优先级数值
阻塞列表:pxDelayedTaskList
挂起列表:pxSuspendedTaskList
调度器是会在所有处于就绪队列的任务中,选择具有最高优先级的任务来执行