LVGL9-移植
1.环境
检查gcc,g++, make, cmake编译环境,如果不具备则安装mingw64和cmake
1.1 Mingw64下载安装
下载已经编译好的mingw64版本mingw-build-binaries,选择类似于x86_64-15.2.0-release-posix-seh-ucrt-rt_v13-rev0.7z的版本下载并解压到D盘下,例如D:\mingw64,则PATH的系统环境变量应该添加D:\mingw64\bin,注意,在该目录下把mingw32-make.exe复制一份并重命名为make.exe。
1.2 CMake下载安装
下载cmake的安装包cmake,选择类似于cmake-4.1.2-windows-x86_64.zip的版本,解压到D盘下,例如D:\cmake-4.1.2-windows-x86_64,则PATH的系统环境变量应该添加D:\cmake-4.1.2-windows-x86_64\bin。
1.3 Vcpkg下载安装
在D盘下克隆vcpkg的仓库,教程:通过 CMake 安装和使用包
1 | |
进入vcpkg目录,执行启动脚本
1 | |
环境变量PATH添加D:\vcpkg
1.4 检查环境
1 | |
1 | |
1 | |
1 | |
1 | |
2.安装SDL2环境
1 | |
则安装好的SDL2的路径应该是D:\vcpkg\installed\x64-mingw-static\share\sdl2
3.下载LVGL
1 | |
3.1 修改CMakeLists.txt
修改根目录下的CMakeLists.txt,在# Find and include SDL2 library下面一行引入SDL2库,例如
1 | |
3.2 使用CMake编译
创建并进入build目录
1 | |
生成Makefile
1 | |
编译项目
1 | |
3.3 运行
进入bin目录找到main.exe双击运行
1 | |
4.优化
4.1 修改运行尺寸
main.c中找到sdl_hal_init函数,修改尺寸
1 | |
4.2 鼠标残影
hal.c中找到鼠标初始化相关代码,注释掉,否则会有鼠标残影
1 | |
4.3 打开监控
lv_conf.h中确保以下宏定义启用
1 | |
4.4 提升帧率
lv_conf.h中修改以下宏定义,16ms刷新一次,即60FPS
1 | |
重新编译运行,记得关闭程序再编译,否则提示Permission denied错误
5.Gui Guider导出
以Gui Guider中的Demo: SmartAppliance为例进行导出
5.1 生成Project
- 点击
New,在LVGL9.2.1的标签下选择Simulator,选择SmartAppliance,点击Create Project Project Directory修改为项目保存路径- 其他参数自定义,分辨率可以保持默认的
480*272 - 点击
Create确定 - 尝试点击右上角的编译按钮,选择
C进行编译运行
5.2 导出代码
- 点击
Project - 移动到
Export Code - 选择
Zephyr - 弹窗选择保存路径
导出后的目录结构如下其中1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28.
├── CMakeLists.txt
├── patches
├── prj.conf
└── src
├── custom
│ ├── custom.c
│ ├── custom.h
│ ├── lv_conf_ext.h
│ ├── ui_Aircon.c
│ ├── ui_Aircon.h
│ ├── ui_Oven.c
│ └── ui_Oven.h
├── generated
│ ├── events_init.c
│ ├── events_init.h
│ ├── gui_guider.c
│ ├── gui_guider.h
│ ├── guider_customer_fonts
│ ├── guider_fonts
│ ├── images
│ ├── setup_scr_scrAircon.c
│ ├── setup_scr_scrHome.c
│ ├── setup_scr_scrHood.c
│ ├── setup_scr_scrOven.c
│ ├── widgets_init.c
│ └── widgets_init.h
└── main.ccustom和generated文件夹下的源文件需要加入编译。
5.3 复制文件
在成功运行lvgl9的官方Demo后,把custom和generated目录复制到src目录下,结构如下
1 | |
5.4 修改文件
5.4.1 main.c
在引入头文件部分添加
1 | |
再添加guider_ui结构体
1 | |
在main函数里的初始化官方demo处,替换为ui和events初始化,例如
1 | |
5.4.2 其他文件
把所有的源文件中的lv_animimg_set_src的最后一个布尔值参数删除,删除后类似如下
1 | |
- 所有函数
lv_animimg_set_playback_time替换为lv_animimg_set_reverse_duration - 所有函数
lv_animimg_set_playback_delay替换为lv_animimg_set_reverse_delay
5.4.3 添加编译规则
根目录下的CMakeLists.txt文件增加编译规则,大概37行后面添加新的编译路径
1 | |
set(MAIN_SOURCES src/mouse_cursor_icon.c src/hal/hal.c)修改为
1 | |
重新编译运行
6.直接克隆
克隆已经移植好的仓库,符合环境要求则可直接编译运行
1 | |
7.VSCode优化
由于仓库包含了多个子模块,在VSCode中使用Copilot非常容易出现OOM(Out Of Memory)错误从而导致闪退。在VSCode工作区中忽略子模块,让Copilot不去索引子模块内容作为上下文。
创建.vscode/settings.json,内容如下
1 | |
创建.vscode/c_cpp_properties.json,内容如下
1 | |