当前位置: 首页 > news >正文

使用FreeRTOS时的一些注意事项

1、临界区的使用

  临界区是一把“重型锁”,它的核心作用是:保护一段极短的代码,在执行时不被任何中断或其他任务干扰。
  简单说,就是创造一个临时的“真空地带”,保证操作的完整性。但要记住,它必须短,越短越好。
  🟢 什么时候必须用临界区?
  当操作一个既会被任务访问,又会被中断修改的共享资源时,就必须用。典型场景有:
    保护非原子操作:比如在32位CPU上读写一个64位变量,这个操作本身不是一条指令完成的,可能会被中断打断。
    保护共享外设寄存器:如果你在任务里配置某个外设,而中断服务程序也可能配置同一个外设,就需要保护。
    需要多条指令完成的原子逻辑:比如经典的“读-改-写”操作(global_var |= 0x01;),它包含多条汇编指令,必须整个流程不被中断。
  🔴 什么时候绝对不要用?
    调用API函数时:绝大多数 RTOS 函数(如 xQueueSend, xSemaphoreGive)内部已自带保护,你不需要再套一层。
    耗时长的操作:在临界区内进行计算、调用复杂函数、操作外设,会长时间屏蔽中断,破坏系统的实时性。
    调用可能会阻塞的函数:这是死路一条,当前任务持有临界区却进入阻塞,系统就卡死了。

  ✅ 正确的替代方案是什么?
  在很多场景下,有比直接屏蔽中断更好的方法,对系统影响更小。
  只保护数据,不保护任务切换(挂起调度器)
    如果数据只被多个任务共享,不会被中断使用,可以只用 vTaskSuspendAll() 和 xTaskResumeAll()。它只防止任务切换,中断还能响应,系统响应更快。
  用互斥量 (Mutex) 保护任务间资源
    这是推荐的做法。它只让访问同一资源的任务互斥,不影响其他任务和中断。但如果资源在中断里也要用,就只能用临界区。

 

http://www.jsqmd.com/news/700078/

相关文章:

  • 网络安全学习路线-超详细
  • RS485网络拓扑结构
  • AiPy帮我工作后,我开始躺平摸鱼
  • 算法打卡第12天|多数元素
  • AI提示词库:结构化规则提升AI编程助手效率与代码质量
  • Superturtle:模块化命令行工具集的设计哲学与自动化实践
  • 编译原理实践:在Windows系统上快速搭建Flex词法分析环境与入门测试
  • 3个步骤解决PCL2启动器资源文件下载异常问题:告别“文件已损坏“的困扰
  • C++ MCP网关性能卡在8万QPS?(2024年Linux 6.8+eBPF验证版调优清单)
  • 【Flutter for OpenHarmony第三方库】Flutter for OpenHarmony 音频播放功能适配与实现指南
  • 暗黑破坏神2存档编辑神器:网页版d2s-editor完全指南
  • 网络通信安全技术:加密与认证机制详解
  • 忍者像素绘卷微信小程序性能优化:像素图WebP压缩+渐进式加载
  • CYT4BF芯片“救砖”指南:当设备进入DEAD状态,如何利用RMA流程进行故障分析
  • 从汽车ECU通信到智能家居:深入浅出聊聊CAN数据帧里的‘仲裁’到底在争什么?
  • 用VCS和Verdi联手分析UPF:从仿真波形里看懂电源域开关
  • 股票交易执行算法研究员JD工作地点:[上海]薪资范围:薪资open,绩效奖金+策略超额收益分成岗位职责:1. 搭建并持续完善执行算法的研究与回测框架,辅助评估不同策略的最优执行策略;2. 研
  • 测试开发提升效率利器:AppleScript!
  • 免费降AI实测:高效降低论文AI率方法+工具测评
  • 3步构建专业级3D重建:Meshroom节点编程终极指南
  • 【K线分析08A】K线类型、信号K线、市场背景--30
  • UnityFigmaBridge终极指南:从设计到开发的完整高效协作方案
  • PersistentWindows终极指南:让多显示器窗口布局永不丢失的5个简单技巧
  • AC7801 ADC软件触发+DMA搬运数据实战:从官方例程到多通道采样的避坑指南
  • 算法训练营第十三天| 454.四数相加II
  • Savitech盛微先进Saviaudio原厂原装一级代理分销经销
  • 掌握UIEffect:5分钟让你的Unity UI界面焕发专业级视觉效果
  • 社交媒体成为搜索引擎:2026 年品牌如何应对这一趋势 - SocialEcho社媒管理
  • 经常用到的渗透测试工具集整理,大佬都说好!
  • Unity PSD导入器终极指南:3分钟将Photoshop设计转为游戏UI的完整解决方案