
# 开发指导
#### 移植LittlevGL
如果需要在STM32xxx之外的其他运行Huawei LiteOS的嵌入式设备上移植LittlevGL，请在开发应用程序之前，根据设备提供的不同能力适配底层驱动（类似的工作我们已经在STM32F769IDISCOVERY上实现）。主要需要适配的内容有：显示驱动适配、输入驱动适配、tick适配、任务适配，适配的方法可以参考官方文档[LittlevGL移植官方文档](https://docs.lvgl.io/latest/en/html/porting/index.html#)。
#### 初始化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的优化和增强功能。
