*开发工具
*硬件简介
*绘制UI
*导出工程
*适配工程代码逻辑
正文:
开发工具
Scons
VScode
Guider-1.5.1
AiBurn
硬件简介
D13x 系列是一款高性能的工业级高清显示和智能控制 MCU,采用国产自主高算力 RISC-V 内核,配备强大的 2D 图形加速处理器, 内置自研 PNG/JPEG 解码引擎,支持丰富的软件生态,适用于各类交互设计和多媒体互动场景,具有功能强大、可靠稳定的特点。
我们使用到得板子硬件上带一个RGB显示屏,支持LVGL,本文使用RT-Thread+lvgl开发
1. 绘制UI
使用Guider-1.5.1工具,创建三个页面,该ui工具操作较为简便,并且ui组件较为丰富,绘制好了ui后可以方便得导出c语言或者python。点击右上角运行按钮即可生成代码,并且预览运行效果
首先是开机logo,本文选取网上一汽车电池得骨架图,开机后1S时间向侧边滑过消失
其次是主页面,主要包括电池电压信息,采用仪表盘展示方式,Soc现实为百分比,电池个数,温度个数 最高最低电压信息位置标号,以及单个电芯状态信息。旁边设置三个按钮用来操作校准,现实图标 读取数据等操作,效果如下
最后单体信息表页面,在表中展示单个电池电压 单体温度等
2. 导出工程
导出代码到指定文件夹下,该工程导出目录如下
3. 适配工程代码逻辑
此次我们是在Luban-lite这份SDK下适配开发
Luban-Lite\luban-lite\packages\artinchip\lvgl-ui\lv_demo.c 文件中配置了
INIT_APP_EXPORT(lvgl_thread_init); 在app阶段启动lvgl_thread_init函数
找到该函数,创建LVBMS子线程,具体如下
intlvgl_thread_init(void)
{
rt_err_terr;
err=rt_thread_init(&lvgl_thread, "LVBMS", lv_bms_thread_entry, RT_NULL,
&lvgl_thread_stack[0], sizeof(lvgl_thread_stack), LPKG_LVGL_THREAD_PRIO, 0);
if(err!=RT_EOK)
{
LOG_E("Failed to create LVBMS thread");
return-1;
}
rt_thread_startup(&lvgl_thread);
return0;
}
子线程创建后,初始化lvgl,调用lv_bms_gui_init()初始化配置
/**
* @brief
*
* @paramparameter
*/
staticvoidlv_bms_thread_entry(void*parameter)
{
lv_init();
lv_port_disp_init();
lv_port_indev_init();
lv_bms_gui_init();
/* handle the tasks of LVBMS */
while(1)
{
lv_task_handler();
rt_thread_mdelay(10);
}
}
我们将Guider创建得工程导出得c文件放到lvgl-ui目录下,重新建个目录lv_bms,记得放上SConscript文件,不然编译不进工程
创建出lv_ui变量,在lv_bms_gui_init函数中初始化即可适配ok
lv_ui guider_ui;
setup_ui(&guider_ui);
在ui上操作按钮响应则需要对应ui条目得回调事件中加对应逻辑,比如screen_CellData_btn_back_event_handler回调函数