RTOS学习笔记:RTOS基础知识
- 任务调度简介
调度器就是使用相关的调度算法来决定当前需要执行哪个任务
三种调度方式:
- 抢占式调度:
主要是针对优先级不同的任务,每个任务都有一个优先级,优先高的任务可以抢占 优先级低的任务
- 时间片调度:
主要针对优先级相同的任务,当多个任务的优先级相同时,任务调度器会在每一次 系统时钟节拍到的时候切换任务
- 协程式调度:
当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务。 FreeRTOS现在虽然还支持,但是官方已经不再更新协程式调度
抢占式调度
运行过程如下:
- 在Task1运行中,在这个过程中Task2就绪了,在抢占调度器的作用下Task2会抢占 Task1的运行。
- 在Task2运行中,Task3就绪了,在抢占调度器的作用下Task3会抢占Task2的运行
- Task3运行过程中,若遇系统延时等情况,系统转而运行Task2,延时结束后重新运 行Task3
时间片调度
同等优先级任务轮流的享相同的CPU时间(可设置),在FreeRTOS中,一个时间片就等于SysTick中断周期。
运行过程如下:
Task1运行完一个时间片后Task2运行,Task2运行一个时间片后Task3运行,若遇阻 塞,则直接跳到下一任务循环,不管有没有运行完。
二、任务状态
FreeRTOS中存在4种状态:
运行态:正在执行的任务,该任务就处于运行态,STM32中,同一时间仅一个任务 处于运行态。
就绪态:如果该任务已经能够被执行,但当前还未被执行,那么该任务处于就绪态。
阻塞态:一个任务因延时或等待外部事件发生,那么这个任务就处于阻塞态。
挂起态:类似暂停,调用函数进入挂起态,需要使用解挂函数才可以进入就绪态。
任务状态列表:
除了运行态,其他三种任务状态的任务都有其对应的任务状态列表
就绪列表:pxReadyTaskLists[x],其中x代表任务优先级数值,32位数组,当某个位置1 时,代表所对应的优先级就绪列表有任务存在。
阻塞列表:pxDelayTaskLists
挂起列表:xSuspendedTaskListsw