本帖最后由 dirty 于 2024-8-31 23:30 编辑
本篇梳理讲述SDK LVGL框架功能,并移植自定义LVGL demo界面功能。
一.系统框架LVGL
RTOS SDK已经移植了LVGL,其库如下图所示框架部分。
图1:LVGL库框架
LVGL的入口为lvgl_thread_init,其被RT-Thread系统初始化导入。在任务lvgl_thread_entry里实现了LVGL显示触摸初始化:函数 lv_port_disp_init()中实现显示接口的对接以及硬件 2D 加速的对接;函数 lv_port_indev_init()中实现触摸屏的对接;函数 aic_dec_create()注册硬件解码器。lv_timer_handler(),lv_tick_get()给了LVGL一个心跳。lv_task_handler()处理LVGL任务。关于LVGL库,SDK是移植配套好了。用户LVGL应用在aic_ui_init里实现。
二.移植自定义LVGL
1.GUI-Guider工具界面配置如下,注意适配屏幕分辨率1024*600,色深16bit。这里用现成的模板稍作修改,使用Simulator仿真模式。
图2:GUI-Guider配置
2.稍作修改,生成C界面源码,操作如下
图3:生成界面源码
3.取需要使用源码如下,移入到SDK aci_demo路径下,这里放在自建app_user_ui下,如下图所示。 后面以模板化编写,后面界面更改变动基本只需将如下图所示部分替换即可。
4.创建app_user_ui.c/.h文件,编写用户统一界面代码接口函数如下
/*
packages/artinchip/lvgl-ui/aic_demo/app_user_ui/app_user_ui.c
*/
#include <unistd.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include "lvgl.h"
#include "aic_ui.h"
#include "lv_port_disp.h"
#include "mpp_fb.h"
#include "app_user_ui.h"
#include "gui_guider.h"
lv_ui guider_ui;
void app_user_ui_init()
{
/* 用户APP 入口 */
setup_ui(&guider_ui);
events_init(&guider_ui);
custom_init(&guider_ui);
}
5.在LVGL界面用户接口函数aic_ui_init添加如下自定义用户界面代码。这里铺展使用命令宏形式进行灵活选择配置。
图5:添加用户界面
6,脚本编写。这里涉及到第3步源码植入脚本路径及宏的加入,另一部分是可配置命令脚本。
(1)源码植入脚本SConscript 。这里可以从其他示例界面工程拷贝,然后修改依赖宏,如下图所示。然后将此SConscript脚本拷贝到app_user_ui文件夹下每个子文件夹下。
图6:修改脚本并在设计界面目录下拷贝
(2)在路径application/Kconfig文件里添加如下:
图7:修改添加工程命令配置脚本
7.使用scons --menuconfig命令到LVGL,可以看到自创的界面配置单,可以选择使用自定义界面,非常方面灵活。
图8:自定义界面配置
8.这时自定义界面代码基本植入完成,可以开始编译。这个会出现一些编译不过问题。一个是LVGL API函数不匹配报错,一般替换SDK LVGL的API即可。另一个是SRAM_S0溢出报错如下,这时配置到PSRAM即可。
图9:SRAM_S0溢出报错
自此,用户自定义LVGL Demo界面移植基本完成。
三.测验
编译烧录后,开机后界面如下,成功植入自定义LVGL demo界面,且后面也很方面根据需要局部替换生成代码即可。
效果视频如下
LVGL自定义界面移植