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

串口和LCD使用同一队列传递status,多消费者竞争导致 LCD 延迟丢包

现象

  • LCD 显示明显滞后于串口输出
  • LCD 偶尔丢失 M1 的 PWM 更新,RPM 刷新不稳定

根因

status_queue(1 个队列)被 USARTLCD 两个任务同时消费:

MotorCtrlTask --→ status_queue --+--→ UartCommTask(printf,微秒级)+--→ LcdDisplayTask(SPI 绘制,毫秒级)
  • UartCommTask 仅做 printf(),微秒级完成,立刻回到等待队列
  • LcdDisplayTask 需 lcd_fill() + lcd_show_string() 等 SPI 逐像素绘制,毫秒级耗时
  • 结果:USART 几乎每次都能抢到消息,LCD 只能拿到 USART 处理间隙的少数消息

本质问题:多消费者单队列 + 消费者处理速度差异 → 竞争消费,慢消费者丢包。

修复

拆分为两路独立队列,各消费者持有专属队列:

MotorCtrlTask --+--→ usart_status_queue (16) --→ UartCommTask(独立消费)+--→ lcd_status_queue   (16) --→ LcdDisplayTask(独立消费)
文件 改动
freertos.c 用户区新增 usart_status_queue / lcd_status_queuexQueueCreate(16, sizeof(motor_status_t))
motor_app.c 每条状态 xQueueSend 到两个队列各一份
usart_app.c 改为 xQueueReceive(usart_status_queue, ...)osStatus_t/osOKBaseType_t/pdPASS
lcd_app.c 改为 xQueueReceive(lcd_status_queue, ...)osStatus_t/osOKBaseType_t/pdPASS

经验

  • FreeRTOS 队列是点对点通信机制,一条消息只能被一个消费者取走
  • 需要广播数据给多个消费者时,必须用多队列分发或 Event Group + 共享内存
  • CubeMX 生成的 status_queueHandle 保留在非用户区无法删除,但可弃用
http://www.jsqmd.com/news/760140/

相关文章:

  • 在医学图像分割任务中,给UNet加上SK和CBAM模块到底有没有用?我用Refuge数据集实测告诉你
  • 2026最权威的六大AI写作助手实际效果
  • 别再手动调舵机了!用机智云+ESP8266做个手机遥控器,附完整STM32标准库代码
  • 别再手动调LOD了!UE5 Nanite实战:如何一键导入ZBrush高模并优化开放世界地形
  • Android Demos高级UI组件:CarouselFragment与EditTextChips深度解析
  • ESP32与Air780E的MQTT通信如何实现数据的实时传输?
  • 5分钟实现Figma中文界面:设计师必备的界面翻译完整指南
  • 3分钟掌握B站字幕下载:BiliBiliCCSubtitle免费工具全解析
  • MATLAB实战:手把手教你用SLM和PTS算法搞定OFDM信号的高PAPR难题
  • DLSS Swapper:游戏性能智能调优与动态DLL管理解决方案
  • 区块链原理-大白话极简版
  • 别再手动核销了!用uniapp+uQRCode插件5分钟搞定微信扫码核销功能
  • 68万小时音频喂出来的Whisper,真的比无监督预训练强吗?一次深度技术选型分析
  • 云深处冲刺 IPO:四足机器人盈利背后,B 端场景之路能走多远?
  • 2025最权威的六大AI写作平台推荐
  • SAP交货单PGI后物料凭证‘被归档’?别慌,手把手教你用ABAP修复程序ZZRB_VBFA_NO_GI_DOC_5排查
  • 高危预警3个致命威胁,企业需紧急排查
  • 从仲裁器到系统瓶颈:聊聊FPGA/芯片设计中那些“争抢资源”的事儿
  • 数据血缘入门:手把手教你用Apache Calcite解析INSERT SELECT语句的列依赖关系
  • 从 signed main 聊起:C++类型别名和宏定义的那些‘坑’与最佳实践
  • 别被128TB吓到!手把手教你用readelf和gdb玩转Linux内核的‘活体解剖’/proc/kcore
  • 【愚公系列】《AI漫剧创作一本通》004-剧本拆解,把小说改编为可落地的脚本(爆款AI漫剧,从选择合适的小说开始)
  • 拆解B站AI字幕插件的三个核心Prompt:如何让大模型听懂你的视频分析需求
  • Chandra OCR效果可视化展示:PDF页面→原始图像→结构化HTML→Markdown对照
  • 实现一个内存泄漏检测工具
  • 别再手动上传了!Element UI + Quill 富文本编辑器图片上传功能完整封装指南
  • PyEcharts实战:Python数据可视化进阶指南与完整示例库
  • 【RT-DETR论文阅读】:首个实时端到端Transformer检测器,DETR正式超越YOLO
  • 有哪些从零构建Claude Code式harness的教程和开源项目?
  • Dify低代码平台与企业系统集成(含ERP/CRM/钉钉/飞书)——内部技术白皮书首次公开