开发指导
移植LittlevGL
如果需要在STM32xxx之外的其他运行Huawei LiteOS的嵌入式设备上移植LittlevGL,请在开发应用程序之前,根据设备提供的不同能力适配底层驱动(类似的工作我们已经在STM32F769IDISCOVERY上实现)。主要需要适配的内容有:显示驱动适配、输入驱动适配、tick适配、任务适配,适配的方法可以参考官方文档LittlevGL移植官方文档。
初始化LittlevGL并添加任务
适配好驱动之后,在开发应用程序之前,还需要在Huawei LiteOS上将LittlevGL初始化,并创建LittlevGL的任务,可以参考Huawei LiteOS在STM32F769IDISCOVERY上的实现:Huawei LiteOS预留给用户使用的任务处理函数app_init()中,添加LittlevGL任务。当前Huawei LiteOS在app_init()中调用了DemoEntry()函数,该函数又调用了LvglDemo()。LvglDemo()函数创建了LittlevGL任务,其任务处理函数为LvglTaskEntry()。LvglTaskEntry()函数中,初始化LittlevGL,并循环调用LittlevGL的任务处理函数lv_task_handle()r,代码示例如下:
STATIC VOID LvglTaskEntry(VOID)
{
/* Enable the CPU Cache */
EnableCache();
lv_init();
tft_init();
touchpad_init();
#ifdef LV_USE_DEMO_WIDGETS
lv_demo_widgets();
#endif
while (1) {
lv_task_handler();
LOS_Msleep(LVGL_TASK_POLL_PERIOD);
}
}
UINT32 LvglDemo(VOID)
{
UINT32 ret;
UINT32 taskId;
TSK_INIT_PARAM_S lvglTask;
(VOID)memset_s(&lvglTask, sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S));
lvglTask.pfnTaskEntry = (TSK_ENTRY_FUNC)LvglTaskEntry;
lvglTask.uwStackSize = LVGL_TASK_STACK_SIZE;
lvglTask.pcName = "Lvgl_Task";
lvglTask.usTaskPrio = LOSCFG_BASE_CORE_TSK_DEFAULT_PRIO;
lvglTask.uwResved = LOS_TASK_STATUS_DETACHED;
ret = LOS_TaskCreate(&taskId, &lvglTask);
if (ret != LOS_OK) {
return ret;
}
return ret;
}
功能特性
后续Huawei LiteOS将陆续提供更多GUI的优化和增强功能。