LVGL 启动流程全解析:RT-Thread 下的界面渲染链路
LVGL 整体启动链路你这个工程RT-Thread 自动初始化 独立 LVGL 线程模式。从上电到界面显示完整流程如下系统启动进入 RT-Thread 主流程rtthread_startup创建并运行main线程main_thread_entrymain_thread_entry里先执行rt_components_init()rt_components_init()执行各级INIT_*_EXPORT注册函数命中INIT_ENV_EXPORT(lvgl_thread_init)调用lvgl_thread_initlvgl_thread_init创建并启动LVGL线程LVGL线程入口lvgl_thread_entry顺序执行lv_init()lv_port_disp_init()lv_port_indev_init()lv_user_gui_init()lv_user_gui_init()调用lv_demo_music()创建 demo UI线程进入循环lv_task_handler()rt_thread_mdelay(...)界面持续刷新、动画运行、输入事件生效每个关键点在干什么lvgl_thread_init只负责“拉起线程”rt_thread_initrt_thread_startup。lv_init初始化 LVGL 内核对象系统、样式、动画、timer 等基础设施。lv_port_disp_init把 LCD 注册给 LVGL打开lcd设备、拿 framebuffer 信息、建 draw buffer、注册flush_cb。lv_port_indev_init把输入设备注册给 LVGL配置read_cb让 LVGL 能取到触摸/指针状态。lv_user_gui_init你的 UI 入口当前实现是跑lv_demo_music()。lv_task_handlerLVGL 主调度器处理输入、事件、动画、重绘没有它界面就“死的”。你当前涉及文件职责packages/LVGL-v8.3.11/env_support/rt-thread/lv_rt_thread_port.cLVGL 与 RT-Thread 的线程/初始化胶水层核心启动文件applications/lvgl/lv_port_disp.c显示驱动适配LCD flushapplications/lvgl/lv_port_indev.c输入驱动适配pointer read callbackapplications/lvgl/demo/lv_demo.c用户 GUI 入口当前接到 music demoapplications/main.c普通用户main()不是直接启动 LVGL 的地方运行时时序可当心智模型RT-Thread调度-LVGL线程唤醒-lv_task_handler-需要重绘则调用flush_cb写fb读取输入并分发事件-线程delay- 下一个周期常见调试抓手最实用屏不亮先查lv_port_disp_init()里rt_device_find(lcd)、GET_INFO、buffer 分配是否失败。能显示但不能点查lv_port_indev_input()是否被底层事件持续喂数据。界面卡顿调小/调大LV_DISP_DEF_REFR_PERIOD找平衡。异常重启/HardFault优先看PKG_LVGL_THREAD_STACK_SIZE是否太小。API 调用异常确认 LVGL API 是否在 LVGL 线程上下文调用跨线程需同步。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2564383.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!