HAL-DDC | LVGL_UI 核心类 (v8.4) | 2026-2-v1
Last Edited: 2026/2/26 20:47
1 |
|
需要引两个 LVGL 头文件支持类型的使用。
1. 类型定义
1 | class LVGL_UI |
首先,flush 回调函数的逻辑是需要由用户提供的,这里设置成模版文件中 flush 的标准形式,也就是入口参数为
- 显示驱动的实例
- 需要渲染的区域
- 像素数据指针
1 | using pixel = lv_color_t; // LVGL Buffer/Pixel Type |
设置一些常见的数据类型:
pixel- 缓冲区数组以及其中像素数据的类型,本质上是lv_color_t,受到lv_conf.h控制res- 分辨率coord- 像素坐标
2. 一些成员
1 | lv_disp_drv_t disp_drv; // LVGL Display Driver Instance |
首先就是 disp_drv,也就是 LVGL8.4 中的显示屏实例,然后是 render_buf ,根据其类型可以知道是 LVGL 用于存储缓冲区信息的结构体(而非缓冲区数组本体)。
3. 构造体
1 | /* * Constructor */ |
4. 注册函数
1 | template <size_t N> |
首先,res_h 和 res_v 是显示屏的水平与垂直像素,flush_cb 为用户所提供的 flush 回调函数逻辑。buf1 与 buf2 为用户提供的缓冲区,默认只填写 buf1 时,使用单缓冲工作模式。
为了防止 lv_init 的反复调用,这里用一个局部变量控制。
这之后,按顺序来初始化显示实例、缓冲区,并且填写实例的各项信息,需要注意的是,由于 flush 本质上是一个静态的 C 回调函数,所以此处需要将当前对象的指针保存至 user_data 中,这之后再在 flush 中释放以提供 C++ 对象的访问。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Clairvoyance!
