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

为什么操作 UI 必须加 `lcd_mutex` 互斥锁?不用会怎样?

1. 先给结论(你必须记住)

LVGL 所有界面操作(创建文字、按钮、刷新屏幕)都不是线程安全的。

意思是:
绝对不能有两个线程同时操作 LVGL 界面!

  • 线程A:LVGL 主线程(一直在刷新屏幕)
  • 线程B:你的任务3线程(突然去创建 UI)

如果两个线程同时碰 LVGL→ 直接死机、花屏、界面卡死、汉字不显示、按钮乱跳。


2. 那rt_mutex_take / rt_mutex_release到底做了什么?

rt_mutex_take(&lcd_mutex,RT_WAITING_FOREVER);// 上锁create_task3_ui();// 安全操作UIrt_mutex_release(&lcd_mutex);// 解锁

它的作用只有一句话:

让“操作UI”这段代码变成原子操作,同一时间只能有一个线程执行!

具体行为:

  1. take
    • 拿走 LCD 互斥锁
    • LVGL 线程会被卡住,等待锁释放
    • 屏幕暂时停止刷新
  2. create_task3_ui()
    • 只有当前线程能操作 UI
    • 绝对安全
  3. release
    • 释放锁
    • LVGL 线程恢复运行,继续刷新屏幕
    • 新界面立刻显示出来

3. 重点:如果不加互斥锁,会发生什么严重后果?

我直接告诉你真实会出现的问题:

后果 1:界面花屏 / 黑屏 / 显示错乱

LVGL 正在刷新画面 → 你突然改界面 → 画面画到一半被破坏 → 显示乱码。

后果 2:汉字显示不出来(你今天遇到的问题)

两个线程同时操作字体资源 → 字体指针被破坏 → 汉字无法渲染。

后果 3:程序直接进入 HardFault 崩溃(死机)

这是最常见的!

  • 链表结构破坏
  • 内存指针踩坏
  • 控件被重复创建/删除

后果 4:UI 卡死,点击无反应

LVGL 内部状态机被多线程打乱 → 永远卡住。

后果 5:偶尔正常、偶尔异常(最难调试的BUG)

多线程竞争不是必现的
→ 你调试时正常
→ 跑着跑着突然死机
→ 查半天查不出来


4. 用最通俗的比喻你就彻底懂了

LVGL 界面 = 一张画布
LVGL 线程 = 正在画画的画家
你的任务线程 = 另一个想画画的人

如果不加锁:
两个人同时在一张纸上画 → 画面糊掉、画错、画乱、纸撕破。

加锁:

你说:等一下,我画完你再画! 画家停下 → 你画 → 画完 → 画家继续

5. 你的工程里,哪些地方必须加锁?

只要出现下面任意一种,必须加锁

  1. 创建文字
lv_label_create(...);
  1. 创建按钮
lv_btn_create(...);
  1. 修改文字内容
lv_label_set_text(...);
  1. 刷新界面
lv_obj_align(...);
  1. 切换界面
create_task3_ui();
  1. 删除控件
lv_obj_del(...);

6. 最终总结(最重要的3句话)

  1. LVGL 不支持多线程同时操作界面
  2. 互斥锁的作用是:同一时间只允许一个线程操作界面
  3. 不加锁 = 界面乱码 + 死机 + 崩溃 + 偶现BUG

你现在的写法:

rt_mutex_take(&lcd_mutex,RT_WAITING_FOREVER);create_task3_ui();rt_mutex_release(&lcd_mutex);

✅ 这是最标准、最安全、最正确的写法!

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

相关文章:

  • 用Arduino Uno和纸板DIY一个超静音扫地机器人(附完整代码和避坑指南)
  • 如何实现音乐逐字同步?KuGouMusicApi中KRC歌词技术的创新应用
  • 蓝桥杯 电池分组
  • 液压剪切机(剪板机)SolidWorks
  • 2026新托福APP对比|多次元托福APP题库丰富程度真的赢麻了! - 速递信息
  • Babel polyfill配置全解析:为什么你的Next.js项目在IE11还是报错?
  • 榨汁机(solidworks)
  • JAVA重点基础、进阶知识及易错点总结(1)---数据类型、运算符、流程控制
  • 思岚S1雷达+Cartographer纯激光建图实战:室内外效果对比与关键参数调优心得
  • 手把手教你用4G Cat.1 bis开发智能硬件:从电路设计到低功耗优化的完整实战
  • 机床自动上下料机械手(solidworks+x_t)
  • OFA图像英文描述模型效果展示:COCO精简版在儿童绘本图、教育课件图的语义适配能力
  • BotW-Save-Manager终极方案:深度解析《塞尔达传说:旷野之息》跨平台存档迁移技术
  • 2026新托福备考APP哪家强?多次元托福凭32分型诊断断层领先 - 速递信息
  • C语言新手必练:10道经典算法题实战解析(附完整代码)
  • 主从博弈在共享储能与微网优化中的实战
  • N诺机试题
  • 面对运维效率低下与成本浪费,试试超自动化运维
  • 3步打造智能无人机:如何用ESP32开源飞控实现专业级飞行?
  • 终极美化指南:为Windows资源管理器添加惊艳毛玻璃效果
  • COA - CNN - BiGRU - Attention分类:新手友好的数据预测方案
  • 从Jupyter到PLC边缘设备:Python视觉模型部署全流程,含Docker+ONNX+RTSP低延迟优化
  • 代谢组+微生物组联合分析实战:从样本处理到生物标志物筛选的完整流程
  • IIS 10配置asp+access环境注意事项
  • 图床项目(二) 接口设计
  • 突破限制:BlenderCompat让Windows 7焕发新活力运行Blender 3.x
  • [USACO14MAR] Mooo Moo S
  • 视觉算法平台落地路径探索
  • Llama-3.2V-11B-cot入门必看:bf16精度下视觉嵌入层数值稳定性保障
  • 中医理疗培训师资靠谱吗?守嘉职业技能汇聚资深专家团队授课 - 品牌排行榜单