一、任务调度方式
1.1抢占式调度(不同优先级)
主要是针对优先级不同的任务,每个任务都有一个优先级,
优先级高的任务可以抢占优先级低的任务。
1.2时间片调度(同优先级)
主要针对优先级相同的任务,当多个任务的优先级相同时,
任务调度器会在每一次系统时钟节拍到的时候切换任务。
1.3协程式调度(逐渐淘汰)
当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务
FreeRTOS现在虽然还支持,但是官方已经表示不再更新协程式调度
二、任务状态
FreeRTOS中任务共存在4种状态:
1、运行态: 正在执行的任务,该任务就处于运行态,注意在STM32中,同一时间仅一个任务处于运行态
2、就绪态: 如果该任务已经能够被执行,但当前还未被执行,那么该任务处于就绪态
3、阻塞态: 如果一个任务因延时或等待外部事件发生,那么这个任务就处于阻塞态
4、挂起态: 类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume()才可以进入就绪态
四种任务状态之间的转换图:
总结:
1、仅就绪态可转变成运行态
2、其他状态的任务想运行,必须先转变成就绪态