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 |
|