1、FreeRTOS基础知识

1.FreeRTOS任务调度方式

FreeRTOS 默认使用固定优先级抢占式调度策略 ,对同等优先级 的任务执行时间片轮询调度:

  • 抢占式调度:FreeRTOS采用抢占式调度方式,允许更高优先级的任务在任何时刻抢占正在执行的低优先级任务。这确保了高优先级任务能够及时响应,并提高了系统的实时性。
  • 时间片轮询:在相同优先级的任务之间,FreeRTOS采用时间片轮转策略。每个任务执行一个时间片,如果有其他同优先级的任务等待执行,则切换到下一个任务。这有助于公平地分配CPU时间。

2.FreeRTOS中任务共存在4种状态:

  • 运行态:当任务实际执行时,它被称为处于运行状态。如果运行 RTOS 的处理器只有一个内核, 那么在任何给定时间内都只能有一个任务处于运行状态。注意在STM32中,同一时间仅一个任务处于运行态。
  • 就绪态:准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态), 但目前没有执行的任务, 因为同等或更高优先级的不同任务已经处于运行状态。
  • 阻塞态:如果任务当前正在等待延时或外部事件,则该任务被认为处于阻塞状态。
  • 挂起态:类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume()才可以进入就绪态。

只有就绪态可转变成运行态,其他状态的任务想运行,必须先转变成就绪态。转换关系如下:

3.FreeRTOS的滴答

休眠时,RTOS 任务将指定需要"唤醒"的时间。 阻塞时,RTOS 任务可以指定希望等待的最长时间。

FreeRTOS 实时内核通过滴答计数变量 测量时间。定时器中断(RTOS 滴答中断)以严格的时间精度增加滴答数------允许实时内核以所选择的定时器中断频率的分辨率来测量时间。

每次滴答数增加时,实时内核必须检查是否现在是解除阻塞或唤醒任务的时间。在滴答 ISR 期间唤醒或解除阻塞的任务的优先级可能高于被中断任务的优先级。

4.什么时候进行上下文切换

在需要切换任务的时候进行上下文切换,真正执行上下文切换是在PendSV的ISR中处理的。使用PendSV是因为其可以手动触发,并且可以在其他更高中断优先级的ISR中来进行设置,比较灵活。具体触发操作是将中断控制和状态寄存器 ICSR 的 bit28,也就是 PendSV 的挂起位置 1 来触发PendSV 中断。FreeRTOS会将PendSV设置为最低中断优先级,避免任务切换影响到其他正常的ISR。

在FreeRTOS中有以下几个情况会触发PendSV异常产生切换:

​​​​​​​RTOS 滴答中断:会处理就绪列表,判断是否要切换任务(包括抢占式、时间片轮转)。

任务执行完毕:主动调用任务切换函数进行强制切换。

5.空闲任务

RTOS 调度器启动时,自动创建空闲任务,以确保始终存在一个能够运行的任务。

空闲以最低优先级创建,以确保如果有更高的优先级应用程序任务处于准备就绪状态,空闲任务则不使用任何 CPU 时间。

空闲任务负责释放被删除的任务的内存。

相关推荐
时空自由民.6 小时前
STM32配置Timer+DMA读取ADC数据
stm32·单片机·嵌入式硬件
华普微HOPERF7 小时前
数字隔离器,如何确保MCU不受储能系统中的高电压、大电流影响?
单片机·嵌入式硬件
小麦嵌入式8 小时前
FPGA入门(四):时序逻辑计数器原理与 LED 闪烁实现
linux·驱动开发·stm32·嵌入式硬件·fpga开发·硬件工程·dsp开发
搁浅小泽9 小时前
常用电子元器件
单片机·嵌入式硬件·可靠性工程师
zhaoshuzhaoshu9 小时前
嵌入式开发之时钟树解析-SMT32平台
嵌入式硬件
三佛科技-187366133979 小时前
FT60E211-RB省成本,提效率!IO型8位单片机智能家居产品应用解析
单片机·嵌入式硬件·智能家居
ghie909010 小时前
基于 STM32 + LDC1000 电感传感器的金属循迹三轮车程序
stm32·单片机·嵌入式硬件
Teleger13 小时前
在window上使用c++控制鼠标点击,实现的exe
c++·单片机·计算机外设
黑白园15 小时前
STM32F103ZET6移植-电机2804-驱动板SimpleFOC Mini实现速度开环_位置开环控制(一、硬件介绍及接线)
stm32·单片机·嵌入式硬件
星夜夏空9915 小时前
STM32单片机学习(12)——串口通信相关概念
stm32·单片机·学习