FreeRTOS (了解同步互斥的缺陷)
同步Synchronization信号量含义一个任务等待某个事件发生事件来了任务才继续执行任务之间配合完成工作。生活类比等快递。快递员任务 A送完快递事件发生你任务 B收到通知才开门取件。典型场景按键检测任务检测到按键按下通知业务任务处理串口收到数据通知解析任务处理。互斥Mutual Exclusion互斥锁 mutex含义同一个共享资源同一时刻只允许一个任务使用任务之间互相排斥。目的防止多个任务同时访问同一个资源造成错乱。生活类比公共厕所。同一时间只能一个人进去其他人排队等待。典型场景多个任务操作同一个 LCD、串口、全局变量。同步的缺陷同步代码示例staticintg_LCDCanUse1;//判断任务一是否执行完执行完置1执行任务二volatile是告诉CPU这个值是随时变化的要到内存去取值staticvolatileintCalcTask_Flag0;staticuint64_tg_Time;staticuint32_tg_Sum;staticuint32_ti;voidCalcTask(void*parms){g_Timesystem_get_ns();for(i0;i10000000;i){g_Sumi;}g_Timesystem_get_ns()-g_Time;//计算时间CalcTask_Flag1;vTaskDelete(NULL);}voidLcdPrintTask(void*parms){intlen;while(1){LCD_PrintString(0,0,Waiting Time);while(CalcTask_Flag0);if(g_LCDCanUse1){g_LCDCanUse0;LCD_ClearLine(0,0);LCD_ClearLine(0,2);lenLCD_PrintString(0,0,sum:);//赋值字符串长度给lenLCD_PrintHex(len,0,g_Sum,0);//pre0: 不带0x前缀LCD_ClearLine(0,2);lenLCD_PrintString(0,2,Time:);//赋值字符串长度给lenLCD_PrintSignedVal(len,2,g_Time/1000000);//显示时间g_LCDCanUse1;}vTaskDelete(NULL);}}现象在原代码基础上加了这个让任务二在任务一执行的时候进入阻塞状态不参与任务调度现象变成这样可以看到时间减少了一半这说明任务二在等待任务一执行的时候会浪费很多的CPU资源所以我们使用同步的需思考怎么提高处理器的性能让那些等待的任务进入阻塞不参与CPU的调度互斥的缺陷从这个图我们可以看到如果在红框内执行代码假设任务A发出一个start信号然后任务调度器切到了任务B执行这时任务B又发出一个start信号和发送地址这个I2C时序就被打乱了所以使用红框代码来操作LCD时要互斥使用必须等任务A执行完才能轮到你任务B执行这时我们使用了全局变量来保护临界资源但这能万无一失吗往下看可以看到假设任务A执行到了108行的时候切换到了任务B执行这时因为任务A还没将变量设置为0所以任务B还是能进入这个if语句的但任务B执行红框内代码执行到一半时又切换到任务A因为任务A是在108行被切换的所以它也能进入if语句里面将变量再次置0也同样能操控I2C那这时I2C时序又被打乱了虽然这个概率很小但不是不可能。再举一个例子从这个图中我们假设有任务A和任务B来执行这个函数在汇编语言中bCanUse–代码可以拆分为三条汇编指令假设任务A刚刚将bCanUse变量的值写入到R0寄存器时就切换到任务B执行那么因为bCanUse没有被改变所以任务B还是能继续执行当任务B执行if语句执行到一半时因为任务A已经将bCanUse变量的值写入到R0寄存器了所以它也能正常执行任务这时I2C时序又被打断了怎么办呢既然是在设置变量这里因为切换任务出现了问题那我们关中断不就好了吗如下示例一示例二可以看到我们在判断修改这个变量之前就把中断给关掉等我们修改完变量在重新开启中断这样不就行了吗不过这里依旧有不足以示例一为例子可以看到假设当A在执行任务时因为变量的改变任务B无法进入到while循环里面但任务B还是不断执行申请进入到while循环这些没有意义的事情那这不就跟同步一样占用了CPU资源吗所以我们要在任务A还没有执行完时让任务B进入阻塞状态不参与任务的调度当任务A执行完后会把任务B唤醒让任务B去执行任务这样就能提高CPU运行效率任务之间的通信两个任务之间怎么通信上面同步的例子已经告诉我们全局变量任务A把计算结果放到全局变量里然后任务B读取这个全局变量这就实现了通信的目的那如果我任务A写这个变量写到一半的时候任务B就来读取这个变量那任务B读取的就是一个错误的值这是有可能的所以怎么通信不重要重要的是怎么保证通信的结果是正确的所以我们引用了互斥的方法在互斥的情况下通信除了互斥我们还要提高效率FreeRTOS就提供了很多方法首先通过互斥的方法来保证通信的正确性又通过阻塞和唤醒的同步机制来提高效率下面是提供的多种方法

相关新闻

下一代AI智能体架构解析:从概念到工程实践

下一代AI智能体架构解析:从概念到工程实践

如果你最近关注AI领域,特别是智能体(AI Agent)的发展,可能会发现一个现象: 大模型的能力越来越强,但让它们真正“干活”——比如自动处理一个复杂任务、协调多个工具、在真实业务场景中稳定运行——依然困…

2026/8/15 8:15:00 阅读更多 →
JVM内存模型、垃圾回收与类加载机制全解析

JVM内存模型、垃圾回收与类加载机制全解析

1. 项目概述:为什么我们需要一张JVM的“地图”? 干了这么多年Java开发,我越来越觉得,JVM(Java虚拟机)就像是你每天开车上下班必经的那条路。你可能开了好几年,知道哪个路口容易堵,哪…

2026/8/15 8:15:00 阅读更多 →
基于QEMU模拟器学习嵌入式Linux驱动开发:从环境搭建到实战调试

基于QEMU模拟器学习嵌入式Linux驱动开发:从环境搭建到实战调试

1. 项目概述:打破硬件依赖的驱动学习新范式 “学习嵌入式Linux驱动开发必须要有开发板吗?”这个问题,几乎困扰过每一个刚踏入这个领域的工程师。传统的学习路径,总是将我们引向购买一块价格不菲的开发板,然后经历焊接、…

2026/8/15 8:15:00 阅读更多 →

最新新闻

YOLOv11模型导出全攻略:从ONNX、TensorRT到OpenVINO、Core ML、TFLite与TorchScript的多平台部署实战指南

YOLOv11模型导出全攻略:从ONNX、TensorRT到OpenVINO、Core ML、TFLite与TorchScript的多平台部署实战指南

🎬 Clf丶忆笙:个人主页 🔥 个人专栏:《YOLOv11全栈指南:从零基础到工业实战》 ⛺️ 努力不一定成功,但不努力一定不成功! 文章目录 一、YOLOv11模型导出基础 1.1 模型导出的意义与挑战 1.2 常见模型格式对比 1.3 YOLOv11模型结构概览 二、YOLOv11模型导出为ONNX格式…

2026/8/15 8:57:13 阅读更多 →
碧蓝航线智能托管脚本 Alas:把委托科研交给它,你只管睡觉和收菜

碧蓝航线智能托管脚本 Alas:把委托科研交给它,你只管睡觉和收菜

碧蓝航线智能托管脚本 Alas:把委托科研交给它,你只管睡觉和收菜 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoS…

2026/8/15 8:57:13 阅读更多 →
麦芽AI vs workbuddy / Codex(六):选型决策指南——你到底该用哪一个?

麦芽AI vs workbuddy / Codex(六):选型决策指南——你到底该用哪一个?

前面五篇讲了差异、机制、成本。最后一篇换个视角:不站队,给选型建议。不同人群、不同场景,该用 workbuddy、Codex 还是麦芽AI(maiya AI 平台)?本文用决策表 场景匹配的方式给出客观答案。 一、先承认一个事实:没有「…

2026/8/15 8:57:13 阅读更多 →
碧蓝航线自动化脚本Alas完整上手指南:把每日收菜委托科研全交给它,一次配置长期省心

碧蓝航线自动化脚本Alas完整上手指南:把每日收菜委托科研全交给它,一次配置长期省心

碧蓝航线自动化脚本Alas完整上手指南:把每日收菜委托科研全交给它,一次配置长期省心 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirro…

2026/8/15 8:57:13 阅读更多 →
JetBrains IDE 试用期到期不用慌:几步完成试用期重置,重新拿回 30 天

JetBrains IDE 试用期到期不用慌:几步完成试用期重置,重新拿回 30 天

JetBrains IDE 试用期到期不用慌:几步完成试用期重置,重新拿回 30 天 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 深夜赶交付,代码写到一半,IntelliJ IDEA 突然弹…

2026/8/15 8:57:13 阅读更多 →
别再做 AI POC 了:用 PSF 与 MVD 逃离“概念验证坟墓”

别再做 AI POC 了:用 PSF 与 MVD 逃离“概念验证坟墓”

本文是《企业 AI 落地实战:FDE 从 0 到规模化》第 3/10 篇。 上一篇讲清了 FDE 的责任边界;本篇提供一套可以直接用于 AI 项目立项、方案评审和试点验收的方法:PSF 三重检验 两周 MVD。 本文根据范冰《前线部署工程师:人工智能时…

2026/8/15 8:56:12 阅读更多 →

日新闻

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

2026/8/15 0:00:30 阅读更多 →
重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

2026/8/15 0:00:30 阅读更多 →
一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

2026/8/15 0:02:30 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/14 14:06:45 阅读更多 →
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/15 2:35:29 阅读更多 →