【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485
1 . 概要
LVGL 8.3 为基于对象树状态、由定时器驱动、通过脏矩形优化实现局部刷新的图形框架。其核心是数据(对象树)与渲染分离,应用代码只改变数据状态,渲染引擎自动、高效地响应这些变化。
二 . 四大核心支柱
| 支柱 | 核心组件 | 职责 | 关键机制 |
|---|---|---|---|
| 1. 状态定义 | 对象树 (lv_obj) + 样式系统 (lv_style) | 描述UI是什么(结构、外观、关系)。 | 继承、级联、事件冒泡、链表管理子对象。 |
| 2. 状态改变 | 事件系统 (lv_event) + 动画系统 (lv_anim) | 定义UI如何变化(交互反馈、动态效果)。 | 用户输入、定时器回调、属性插值。 |
| 3. 变更收集 | 脏矩形系统 (lv_refr) | 计算哪里需要更新,并做优化。 | 自动标记变更区域、合并相邻/重叠脏矩形。 |
| 4. 渲染执行 | 绘制引擎 (lv_draw) + 驱动抽象 (lv_disp) | 执行如何画到屏幕(像素生成与输出)。 | 绘制任务分解、软件渲染算法、硬件加速抽象。 |
三 . 工作流程(数据流闭环)
“设定状态 → 自动标记 → 合并优化 → 定时渲染”
1 . 应用层:调用API(如 lv_label_set_text)修改对象树中的属性(状态)。
2 . 内核层:
- API函数自动调用 lv_obj_invalidate,将受影响屏幕区域标记为“脏”。
- 定时器循环 (lv_timer_handler) 周期性触发刷新任务 (lv_refr_handler)。
- 刷新任务合并所有脏矩形,对每个最终区域,查询对象树,调用对应的 lv_draw_xxx 函数生成像素。
- 像素数据通过你实现的 flush_cb 发送到显示硬件。
3 . 关键特性
- 高效的局部刷新:脏矩形机制确保只重绘变化区域,极大节省CPU。
- 强大的样式系统:支持继承、级联、状态(如按下、聚焦)和过渡动画。
- 灵活的布局:提供现代Flexbox和Grid布局管理器。
- 丰富的控件:按钮、列表、图表、键盘等数十种控件,支持自定义。
- 多图形后端:支持纯软件渲染及各类硬件加速(GPU、DMA2D等)抽象。
- 低内存占用:专为嵌入式设备优化,可在数十KB RAM上运行。
四 . 源码目录
- src/core/:对象树、事件、样式、脏矩形、定时器 —— 你已理解的心脏与循环系统。
- src/widgets/:所有控件实现 —— 基于核心系统的具体组件。
- src/draw/、src/extra/libs/:软件绘制、字体、图像解码 —— 渲染魔法发生的地方。
- src/hal/:显示与输入驱动抽象 —— 连接硬件的桥梁。
- src/misc/:容器、动画、布局等 —— 重要的增强工具集。
技术交流QQ群 : 745662457
群内专注 - 问题答疑,项目外包,技术研究
1453

被折叠的 条评论
为什么被折叠?



