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

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

相关推荐
点灯小铭39 分钟前
基于单片机的人体红外传感的步进电机调速自动门智能控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
一月千帆41 分钟前
STM32 串口 Bootloader 固件升级方案实现
stm32·单片机·嵌入式硬件
朱嘉鼎1 小时前
GPIO引脚操作方法概述
单片机·嵌入式硬件
小+不通文墨3 小时前
GPIO口输入
stm32·单片机·嵌入式硬件
zzywxc7875 小时前
解锁 Rust 开发新可能:从系统内核到 Web 前端的全栈革命
开发语言·前端·python·单片机·嵌入式硬件·rust·scikit-learn
小莞尔7 小时前
【51单片机】【protues仿真】基于51单片机秒表计时器系统(带存储)
c语言·stm32·单片机·嵌入式硬件·物联网·51单片机
国科安芯8 小时前
ASP3605A电源芯片在高速ADC子卡中的适配性研究
网络·人工智能·单片机·嵌入式硬件·安全
鹓于8 小时前
单片机的开发(未完待续,有时间写)
单片机·嵌入式硬件
GilgameshJSS8 小时前
STM32H743-ARM27例程-TCP_Server
c语言·arm开发·stm32·单片机·tcp/ip
hollq9 小时前
SATM32F103RCT6采集温度并设置阈值报警
stm32·嵌入式硬件