RTOS学习笔记–RTOS介绍
本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号
RTOS特点:RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性,其将任务划分为多个任务进行,对每个任务设置优先级,高优先级的任务可以打断低优先级的任务,每个任务有自己独立的堆栈,其结构如下
但是在实际上来说,RTOS中的任务是分时间而执行的,每一个任务都独立执行一会儿,然后跳转到下一个任务
任务调度的方式
调度器:调度器就是使用相关的算法来决定当前需要执行哪种调度算法,RTOS支持三种形式
调度算法 | 简介 |
---|---|
抢占式调度 | 主要是针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。,优先级是单一的,不会重复 |
时间片调度 | 主要针对优先级相同的任务,当多个任务的优先级相同时, 任务调度器会在每一次系统时钟节拍到的时候切换任务。优先级可能会重复 |
协程式调度 | 当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务,不会再更新 |
抢占式调度
- 创建三个任务,分别为Task1、Task2、Task3 其优先级分别为1,、2、3
- 在RTOS中 中断优先级数字越大 代表其越优先
- 在运行过程中Task2 会抢夺Task1 Task3会抢夺Task2,被抢夺的任务就阻塞住了
- 总结
- 高优先级任务优先执行
- 高优先级任务只要不停止,低优先级任务就会一直阻塞
- 被抢占的任务将会进入就绪态,如T2 抢占了T1 T2进入了就绪态,可以执行了
时间片调度
同等优先级任务轮流享有相同的CPU时间(可以设置),也叫时间片,在RTOS中 一个时间片就等于SysTick中断周期
- 运行三个任务 T1、T2、T3
- T1、T2、T3的优先级均为1
- T1运行一个时间片后 该T2运行
- 如T2运行0.5T 个时间片,剩下的0.5T个时间片直接丢掉,跳转到下一个任务执行,在一个循环过后,到了T2依然是1T个时间片
- 如T2运行时间超出了一个时间片,那么T2将会阻塞,直到下一个循环到他的时间片之后他才会继续执行
- 总结
- 同等优先任务,轮流执行,时间片流转
- 一个时间片的大小,取决于滴答定时器的中断周期
- 没有用完的时间片不会再使用,下次任务T2时还是按一个时间片分配
任务状态
- 运行态:正在执行的任务,在32中同一时间只有一个任务处于运行态
- 就绪态:该任务已经能被执行,已经准备好了,但是还未执行,就叫就绪态,如果都准备好了,则执行优先级最高的就绪态
- 阻塞态:如果一个任务因延时或者等待外部时间发生,则该任务就处于阻塞态
- 挂起态:类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume()
才可以进入就绪态
任务状态转换图
- 只有就绪态才可以直接变为运行态
- 其他状态的任务要想运行,必须进入就绪态
任务状态列表
这四种状态中,除了运行态,其他三种任务状态的任务都有其对应的任务状态列表
- 就绪列表:pxReadyTasksLists[x],其中x代表任务优先级数值
- 阻塞列表:pxDelayedTaskList
- 挂起列表:xSuspendedTaskList
系统配置文件详解
FreeRTOSConfig.h配置文件中的中对RTOS功能进行裁剪