目录:
  *开发工具
  *硬件简介
  *绘制UI
  *导出工程
  *适配工程代码逻辑

正文:

开发工具
Scons
VScode
Guider-1.5.1
AiBurn

硬件简介
D13x 系列是一款高性能的工业级高清显示和智能控制 MCU,采用国产自主高算力 RISC-V 内核,配备强大的 2D 图形加速处理器, 内置自研 PNG/JPEG 解码引擎,支持丰富的软件生态,适用于各类交互设计和多媒体互动场景,具有功能强大、可靠稳定的特点。
我们使用到得板子硬件上带一个RGB显示屏,支持LVGL,本文使用RT-Thread+lvgl开发
image.png

1. 绘制UI
使用Guider-1.5.1工具,创建三个页面,该ui工具操作较为简便,并且ui组件较为丰富,绘制好了ui后可以方便得导出c语言或者python。点击右上角运行按钮即可生成代码,并且预览运行效果
首先是开机logo,本文选取网上一汽车电池得骨架图,开机后1S时间向侧边滑过消失

image.png

其次是主页面,主要包括电池电压信息,采用仪表盘展示方式,Soc现实为百分比,电池个数,温度个数 最高最低电压信息位置标号,以及单个电芯状态信息。旁边设置三个按钮用来操作校准,现实图标 读取数据等操作,效果如下
image.png

最后单体信息表页面,在表中展示单个电池电压 单体温度等
image.png

2. 导出工程
导出代码到指定文件夹下,该工程导出目录如下
image.png
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文件,不然编译不进工程
image.png
创建出lv_ui变量,在lv_bms_gui_init函数中初始化即可适配ok
lv_ui   guider_ui;
setup_ui(&guider_ui);
在ui上操作按钮响应则需要对应ui条目得回调事件中加对应逻辑,比如screen_CellData_btn_back_event_handler回调函数
image.png