# Alios_Things_stm32l496_LVGL_RT-Thread **Repository Path**: stm32proj/l496_lvgl_rtt ## Basic Information - **Project Name**: Alios_Things_stm32l496_LVGL_RT-Thread - **Description**: 基于Alios Things开发板移植RT-Thread(4.1.0)+LVGL(8.2.0)(环境为gcc套件+cmake) - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-11-05 - **Last Updated**: 2023-11-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Alios_Things_stm32l496_LVGL_RT-Thread #### 介绍 基于Alios Things开发板移植RT-Thread(4.1.0)+LVGL(8.2.0) #### 原由 原来工程选择的板卡flash只有128K被写爆了,故更换板卡继续移植 #### 环境 移植依靠官方的env_support可以很快速的入手 板卡介绍(Alios Things develop kit),自带一个stlink v2应该是,支持拖拽下载,体验还是不错的 咸鱼80元,个人感觉资源还可以 ![image-20230430211939011.png](https://z4a.net/images/2023/04/30/image-20230430211939011.png) #### 移植注意: 1.__RTTHREAD__这个宏定义要定义一下 ![image-20230430202836671.png](https://z4a.net/images/2023/04/30/image-20230430202836671.png) 在cmake里面 ![image-20230430210448712.png](https://z4a.net/images/2023/04/30/image-20230430210448712.png) #### 测试效果: ![image-20230430210532085.png](https://z4a.net/images/2023/04/30/image-20230430210532085.png) ![QQ20230430210412.jpg](https://z4a.net/images/2023/04/30/QQ20230430210412.jpg) #### LVGL原理分析: 鉴于网上关于LVGL的分析比较少并且参差不齐,这里简略分析一下LVGL(V8)的工作原理 首先是rtt的env_support里面自动初始化lvgl**(lv_rt_thread_port.c)** ![image-20230504140047523.png](https://z4a.net/images/2023/05/04/image-20230504140047523.png) 之后在自己创建的线程里面调用lv_task_handler()函数,这个时候会好奇lvgl的任务线程在哪里创建 ![image-20230504135924418.png](https://z4a.net/images/2023/05/04/image-20230504135924418.png) 其实在lv_port_disp_init()和lv_port_indev_init()里面自动创建的 disp_refr_timer函数 [![image-2023050414025366112c741bd1dbe19ff.png](https://z4a.net/images/2023/05/04/image-2023050414025366112c741bd1dbe19ff.png)](https://z4a.net/image/Vms7J6) lv_indev_read_timer_cb函数 ![image-20230504140345723.png](https://z4a.net/images/2023/05/04/image-20230504140345723.png) 之后就会在任务调度里面获取时间基准,根据任务优先级进行调度,不过跟RTOS不同的是,lvgl是非实时性调度 时间基准的函数主要是 ![image-20230504140609774.png](https://z4a.net/images/2023/05/04/image-20230504140609774.png) 这个函数内部是 ![image-20230504140625855.png](https://z4a.net/images/2023/05/04/image-20230504140625855.png) 因为RTT里面定义的lv_tick_custom所以我们就不需要调用经典的lv_task_inc进行时间基准的增加 而是在环境接口中帮我们定义好了时间基准增加函数 ![image-20230504140740732.png](https://z4a.net/images/2023/05/04/image-20230504140740732.png)