FreeRTOS学习(十七)——优先级翻转与优先级继承
上一节学习了互斥量Mutex它可以保护共享资源保证同一时刻只有一个任务能够访问串口、LCD、Flash等资源。但是如果多个不同优先级的任务同时竞争一个互斥量就可能产生一个比较隐蔽的问题——优先级翻转Priority Inversion。这一节学习什么是优先级翻转以及FreeRTOS是如何利用**优先级继承Priority Inheritance**解决这一问题的。这也是嵌入式软件工程师面试中经常出现的知识点。一、什么是优先级翻转假设系统中有三个任务Task_H 高优先级3Task_M 中优先级2Task_L 低优先级1其中Task_L首先获得了互斥量Mutex开始访问串口。此时Task_H也需要访问串口。但是Mutex已经被Task_L占用因此Task_H ↓ 等待Mutex按理来说只需要等待Task_L执行完释放互斥量即可。但是Task_M此时变为就绪态。由于Task_M 优先级 Task_L于是CPU开始执行Task_M而Task_L一直得不到CPU。结果就是Task_H ↓ 等待Task_L ↓ Task_L又一直被Task_M抢占最终高优先级任务 反而等待低优先级任务。这就是优先级翻转二、优先级翻转过程整个过程可以表示为Task_L 获得Mutex ↓ Task_H需要Mutex ↓ Task_H阻塞 ↓ Task_M开始运行 ↓ Task_L没有机会运行 ↓ Mutex一直不能释放 ↓ Task_H持续等待可以看到真正阻塞高优先级任务的不是Task_L而是Task_M这也是优先级翻转最容易让人困惑的地方。三、为什么优先级翻转危险假设Task_H负责电机控制而Task_M只是LED闪烁如果发生优先级翻转LED任务 一直抢占CPU ↓ 电机控制一直等待显然是不合理的。在实时系统中高优先级任务 必须尽快得到CPU。因此必须解决优先级翻转问题。四、什么是优先级继承FreeRTOS互斥量支持Priority Inheritance即优先级继承。它的思想很简单当Task_H等待Mutex而Mutex被Task_L占有时。FreeRTOS会暂时把Task_L的优先级提升为Task_H的优先级。例如原来Task_L Priority 1现在自动变成Priority 3这样Task_M Priority 2就不能抢占Task_L了。五、优先级继承过程加入优先级继承以后Task_L获得Mutex ↓ Task_H等待Mutex ↓ Task_L优先级提升 ↓ Task_L继续运行 ↓ 释放Mutex ↓ Task_L恢复原优先级 ↓ Task_H立即运行整个过程中Task_M不会再影响Task_H等待互斥量。因此优先级翻转被解决。六、代码示例创建互斥量SemaphoreHandle_t Mutex; Mutex xSemaphoreCreateMutex();任务1void LowTask(void *pvParameters) { while(1) { xSemaphoreTake( Mutex, portMAX_DELAY ); printf(Low Task\r\n); vTaskDelay(pdMS_TO_TICKS(2000)); xSemaphoreGive(Mutex); vTaskDelay(pdMS_TO_TICKS(1000)); } }任务2void HighTask(void *pvParameters) { while(1) { xSemaphoreTake( Mutex, portMAX_DELAY ); printf(High Task\r\n); xSemaphoreGive(Mutex); vTaskDelay(pdMS_TO_TICKS(500)); } }程序运行过程中如果LowTask已经获得互斥量。随后HighTask请求同一个互斥量。FreeRTOS会自动进行优先级继承。整个过程不需要用户手动修改优先级。七、为什么二值信号量不能解决很多初学者容易认为二值信号量 ↓ 也能锁资源。事实上二值信号量 没有优先级继承。因此如果使用xSemaphoreCreateBinary();保护共享资源。发生优先级翻转以后。FreeRTOS不会自动提高低优先级任务的优先级。所以保护共享资源 推荐使用Mutex 不要使用Binary Semaphore。八、什么时候会发生优先级翻转通常需要满足三个条件第一多个任务优先级不同。第二多个任务共同访问同一个共享资源。第三共享资源采用互斥机制保护。例如USART SPI I2C Flash SD卡这些都是实际工程中经常发生优先级翻转的地方。九、实际工程建议互斥量虽然能够解决优先级翻转但仍然要尽量缩短Take ↓ Give之间的代码。例如xSemaphoreTake(); printf(); xSemaphoreGive();是合理的。但是xSemaphoreTake(); vTaskDelay(5000); xSemaphoreGive();则不建议这样写。因为任务长时间占有互斥量会增加其他任务等待时间降低系统实时性。因此共享资源保护范围越小越好互斥量占用时间越短越好。十、总结这一节学习了FreeRTOS中的优先级翻转与优先级继承。当高优先级任务等待低优先级任务占有的互斥量而低优先级任务又被中优先级任务抢占时就会发生优先级翻转。FreeRTOS互斥量支持优先级继承机制能够临时提高持有互斥量任务的优先级使其尽快释放共享资源从而减少高优先级任务的等待时间。因此需要牢记二值信号量用于任务同步。互斥量用于共享资源保护。互斥量具有优先级继承而二值信号量没有。

相关新闻

从玩具到工程:M型模型车底盘调校与电子系统实战指南

从玩具到工程:M型模型车底盘调校与电子系统实战指南

1. 从“玩具”到“工程”:M型模型车的真实世界 提到“M型模型车”,很多人的第一反应可能是商场里、玩具店货架上那些色彩鲜艳、造型炫酷的遥控车。没错,从广义上讲,任何以“M”为设计特征或系列代号的模型车,都可以归入…

2026/8/5 9:17:59 阅读更多 →
解决ftsrch.dll丢失问题的安全修复指南

解决ftsrch.dll丢失问题的安全修复指南

1. 问题背景:ftsrch.dll文件丢失的典型场景 最近帮同事处理电脑故障时,发现一个高频出现的系统错误提示:"无法启动此程序,因为计算机中丢失ftsrch.dll"。这个看似简单的dll文件缺失问题,实际上可能引发一系列…

2026/8/5 9:16:59 阅读更多 →
Shader学习25:织物 之 天鹅绒

Shader学习25:织物 之 天鹅绒

一、关于布料表现布料表面不是光滑的,是无数根细小纤维竖立着传统的微表面brdf更适用于致密表面,但对于松散结构的布料 缺少了一些真实布料的特征,因为表面的纤维会吸收、散射入射光。边缘光照效果》Sheen 环:织物在掠射角时出现的…

2026/8/5 9:16:59 阅读更多 →

最新新闻

KeymouseGo:跨平台鼠标键盘自动化录制的技术架构与实战应用

KeymouseGo:跨平台鼠标键盘自动化录制的技术架构与实战应用

KeymouseGo:跨平台鼠标键盘自动化录制的技术架构与实战应用 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 在当…

2026/8/5 9:59:16 阅读更多 →
Windows平台dirsearch渗透测试工具配置与实战指南

Windows平台dirsearch渗透测试工具配置与实战指南

1. 项目概述:为什么在Windows上玩转dirsearch是门必修课 在渗透测试或安全研究的前期信息收集阶段,目录和文件枚举是绕不开的基础操作。dirsearch,这个用Python编写的命令行工具,因其速度快、字典全、功能灵活,早已成为…

2026/8/5 9:59:16 阅读更多 →
抖音批量下载终极指南:5步搞定自动化收藏,轻松管理喜欢的视频内容

抖音批量下载终极指南:5步搞定自动化收藏,轻松管理喜欢的视频内容

抖音批量下载终极指南:5步搞定自动化收藏,轻松管理喜欢的视频内容 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and …

2026/8/5 9:59:16 阅读更多 →
Linux下adb安装、管理与排错全指南:从基础配置到高效调试

Linux下adb安装、管理与排错全指南:从基础配置到高效调试

1. 从一次设备调试的“卡壳”说起:为什么Linux下的adb管理是门必修课 那天下午,我正在为一个嵌入式开发板调试一个关键的传感器驱动。开发板通过USB连接到我的Ubuntu工作站,一切准备就绪,我习惯性地在终端敲下 adb devices &am…

2026/8/5 9:59:16 阅读更多 →
UE5距离场环境光遮蔽(DFAO)实战:从原理到调优全解析

UE5距离场环境光遮蔽(DFAO)实战:从原理到调优全解析

1. 项目概述与DFAO核心价值最近在UE5里折腾一个写实向的室外场景,总感觉物体之间的接触边缘、墙角、凹陷处少了点“分量感”,光照显得有点“飘”。屏幕空间环境光遮蔽(SSAO)虽然方便,但相机一动或者物体移出屏幕&#…

2026/8/5 9:59:16 阅读更多 →
洛谷P5658 [CSP-S 2019] 括号树一题的题解

洛谷P5658 [CSP-S 2019] 括号树一题的题解

注意到有两个fii-1,也就是说他爹必在它前一个位置,即这棵树退化成一条链,直接暴力枚举所有情况再写一个check函数用来检查子串是否合法。 顺带提一嘴,检查方法为:用一个栈从头到脚依次压入字符,当出现“)”…

2026/8/5 9:58:16 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →