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 时间。

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

相关推荐
项目題供诗1 小时前
51单片机入门(八)
单片机·嵌入式硬件·51单片机
羽获飞2 小时前
从零开始学嵌入式之STM32——9.STM32的时钟系统
stm32·单片机·嵌入式硬件
飞睿科技2 小时前
乐鑫智能开关方案解析:基于ESP32-C系列的低功耗、高集成设计
嵌入式硬件·物联网·esp32·智能家居·乐鑫科技
来自晴朗的明天3 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
17(无规则自律)4 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
芯岭技术4 小时前
PY32MD310单片机:高性能、低功耗的32位电机控制微控制器
单片机·嵌入式硬件
wotaifuzao5 小时前
STM32 + FreeRTOS 的订阅通知组件架构
stm32·嵌入式硬件·架构·freertos·事件驱动·嵌入式架构
小龙报5 小时前
【51单片机】深度解析 51 串口 UART:原理、配置、收发实现与工程化应用全总结
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·51单片机
Lester_110113 小时前
STM32 高级定时器PWM互补输出模式--如果没有死区,突然关闭PWM有产生瞬间导通的可能吗
stm32·单片机·嵌入式硬件·嵌入式软件
小李独爱秋14 小时前
“bootmgr is compressed”错误:根源、笔记本与台式机差异化解决方案深度指南
运维·stm32·单片机·嵌入式硬件·文件系统·电脑故障