开发者成长激励计划-开发笔记:最简步骤移植LVGL

2022-08-07 11:46:51 浏览数 (2)

参数项目”自修伴侣“需要LCD上显示时钟,考虑移植LVGL。查了一些资料LVGL生态还是不错,不过其强大也就意味的移植,应用开发不会简单;此外lvgl快速发展,以为找到的各种教程版本差异导致你整合到一起不一定能工作。最简便的方法就是站在前人的肩膀上,把手上获得相同硬件平台的lvgl(好像是最近master分支)模块(文件)拷贝到自己的工程,再在工程上对应修改。因为绕开了移植操作,最是方便happy path。

也许有人会抬杠,那为什么不直接从那个lvgl的例程出发?因为lvgl只是显示,不是要是场景业务逻辑的核心,所以我的base 工程可以是基础前后台main循环,也可以是rtos的架构:这里把lvgl模块摘出来,做最小的修改再放到需要的地方,快速验证移植,作为一个方便的起点。

1. 文件复制、工程配置

base工程:

CH32V307VCT6_test,就是循环打印的的工程

lvgl工程:

01.lvgl_v8.2_for_ch32v_evb_TencentOS-tiny,移植lvgl某个新版本的工程

1) 文件复制

2)工程配置

这个版本的lvgl只要添加其父目录,内部自己处理相对路径。和以前版本不一样。

2. lvgl模块初始化及运行

1) lvglv相关初始化

lvgl也可以理解为os之上一个类os处理ui互动的框架,有自己的心跳,输入输出处理。初始化包括框架的初始化,以及依赖关联硬件驱动的初始化。

在合适的地方初始化,如果是裸工程的化main是个不错的地方,需要包含关联的头文件。

头文件头文件
初始化以及setup初始化以及setup

lv_tick_inc(1)的参数1,是因为1ms调用一次,用于给lvgl心跳;lv_timer_handler()是因为这个example是给timer类型的,task handler入口就是lv_timer_handler,用于响应外部对lvgl的输入。

2) lvgl 任务的example

这里example拷贝lvgl的代码,后面可以用gui-guider或者其他工具软件生成应用代码。

lvgl example tasklvgl example task

从代码上看,显示是一个基础lv_obj_t的对象,lv_exmpale_meter_xxx对它进行初始化,构建回调函数set_value以供外部输入控制。

运行情况及其他

运行情况运行情况

其他

上述只是最简单的移植,lvgl还有很多课题:文件处理,输入输出,外部图片导入等等。如果移植到RTOS(比如TencentOS Tiny)有差异的就是心跳的实现,可能用一个tos的timer吧,或者空闲任务中计算tick差异?另外还有对于lvgl的外部输入,可以考虑用一个邮箱队列处理?

参考

1. TencentOS-tiny之移植LVGL v8.0.2 - 木子剑 - 博客园

2. AIoT應用創新大賽-基於TencentOS Tiny 的智能家居中控

3. 沁恒CH32V307应用方案分享之LVGL移植

0 人点赞