FreeRTOS 知识点

一、配置过程

二、基本知识点

2.1 抢占优先级和响应优先级

在 FreeRTOS 中,任务的调度方式主要有 ​​抢占式(Preemptive)​​ 和 ​​协作式(Cooperative)​​ 两种模式,它们的核心区别在于 ​​任务如何释放 CPU 控制权​​,以及 ​​调度器如何决定任务切换​​。以下是详细对比:

1.抢占式调度(Preemptive Scheduling)​

高优先级任务可立即抢占低优先级任务​​,无需等待当前任务主动让出 CPU。

依赖配置​​:需在 FreeRTOSConfig.h中启用:

#define configUSE_PREEMPTION    1  // 启用抢占式调度
#define configUSE_TIME_SLICING  1  // 可选:同优先级任务时间片轮转

工作流程​

  • 任务就绪​​:当一个高优先级任务进入就绪状态(如被创建、延迟结束、收到信号量等),调度器会​​立即检查​​是否需要切换。
  • ​抢占发生​​:如果新就绪的任务优先级​​高于当前任务​​,CPU 会​​立即切换​​到高优先级任务。
  • ​无需主动让步​​:即使当前任务未调用 taskYIELD()或 vTaskDelay(),也会被强制打断。

优点​​

  • ​​实时性强​​:高优先级任务能快速响应(适合中断服务、紧急事件处理)。
  • ​​自动化调度​​:开发者无需手动管理任务切换。

​​缺点​​

  • ​​资源竞争风险​​:需注意优先级反转(Priority Inversion)问题(可通过互斥量优先级继承解决)。
  • ​​上下文切换开销​​:频繁抢占会增加 CPU 负载。

​2. 协作式调度(Cooperative Scheduling)​

特点​​

  • ​​任务必须主动释放 CPU​​,否则会一直运行直到完成。
  • ​​依赖配置​​:需在 FreeRTOSConfig.h中关闭抢占:
#define configUSE_PREEMPTION    0  // 关闭抢占式调度

工作流程​​

  • ​​任务运行​​:当前任务会一直占用 CPU,直到:
  • 调用 taskYIELD()主动让出 CPU。
  • 调用阻塞 API(如 vTaskDelay(), xQueueReceive())。
  • ​​调度器介入​​:只有当任务主动放弃 CPU 时,调度器才会选择​​下一个最高优先级就绪任务​​运行。

优点​​

  • ​​确定性高​​:任务切换完全由代码控制,避免不可预知的抢占。
  • ​​资源竞争少​​:无需频繁处理共享数据的互斥问题(适合简单系统)。
  • ​​低开销​​:减少上下文切换次数。

​​缺点​​

  • ​​实时性差​​:高优先级任务可能因低优先级任务不释放 CPU 而无法及时响应。
  • ​​开发者负担​​:需手动插入 taskYIELD(),否则可能导致低优先级任务“饿死”。

3. 如何选择?​​

​​选抢占式​​:

  • 需要快速响应中断或高优先级事件(如传感器数据处理)。
  • 系统中有多个不同优先级的任务。

​​选协作式​​:

  • 资源受限的裸机升级项目(减少调度复杂性)。
  • 任务执行时间短且可预测(如串口协议解析)。

2.2 响应优先级和抢占优先级

1. 优先级的基本机制​​

FreeRTOS 使用 ​​单一的优先级数值​​(通常为 0到 configMAX_PRIORITIES-1,默认最高优先级为 configMAX_PRIORITIES-1)来管理任务调度。

​​数值越大,优先级越高​​(例如优先级 3> 2)。

高优先级任务可​​抢占​​(Preempt)低优先级任务,无需等待当前任务主动释放 CPU。

​​2. 抢占优先级(Preemptive Priority)​​

​​定义​​:高优先级任务​​立即抢占​​低优先级任务的 CPU 使用权。

​​表现​​:

         如果任务 A(优先级 3)就绪,而当前运行的是任务 B(优先级 2),FreeRTOS 会​​立即切换​​到任务 A。

        这是 FreeRTOS 默认的调度行为(需配置 configUSE_PREEMPTION=1)。

​​关键点​​:

       抢占是​​自动的​​,无需任务主动让步(除非使用 taskYIELD())。确保高优先级任务能​​实时响应​​。

​​3. 响应优先级(Response Priority)​​

​​定义​​:任务在​​就绪状态​​下被调度的顺序,完全由优先级决定。

​​表现​​:

当多个任务同时就绪时,调度器会选择​​优先级最高​​的任务运行(即响应最快)。

例如:任务 A(优先级 3)和任务 B(优先级 2)同时就绪,任务 A 会优先被调度。

​​关键点​​:

“响应优先级”是抢占式调度的​​结果​​,而非独立配置。

与“抢占优先级”是同一机制的两个视角:

  • ​​抢占​​:强调中断当前任务的行为。
  • ​​响应​​:强调任务被选中的顺序。

FreeRTOS 中 “实时性” 的体现是什么:   抢占式:高优

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值