基于vscode搭建LVGL环境

前言

目前网上windows仿真LVGL的资料都是比较久远的,不太适合现有的开发,因此重新整理了一下资料.

目标:

使用Vscode进行LVGL开发和仿真.

关键词: LVGL, vscode,llvm,cmake,windows

环境配置

编译器目前使用的是llvm-MinGW-msvcrt:Releases · mstorsjo/llvm-mingw (github.com)

LVGL官方提供了vscodedemo:lvgl/lv_port_pc_vscode (github.com),不过官方只在linux和mac做了适配,在windows下还需要自己修改下参数

LVGLvscode的仿真是基于SDL的,因此也需要下载下Releases · libsdl-org/SDL (github.com) .注意下载版本为:SDL2-devel-2.30.6-mingw.zip

Vsocde就常用的插件,这里调试用的codeLLDB,自己下载下.

编译器下载了加入环境变量,这里就不细说了

SDL下载后放到一个常用的位置即可,不需要加入环境变量,加入后也没啥用,只需要记住解压到的位置就行

通过以下指令拉取最新代码

git clone --recursive https://github.com/lvgl/lv_port_pc_vscode

代码编译

使用code打开simulator.code-workspace工作区,使用cmaketools正常配置,选择上述下载的编译器即可.

image-20240808111115470

这时候编译会报找不到SDL的错误.

打开CmakeLists.txt,添加SDL的查找路径.

list(APPEND CMAKE_PREFIX_PATH "D:/Program Files/SDL_MINGW/")
set(SDL2_NO_MWINDOWS 1) # 设置为0的话不显示控制台,也就看不到打印信息
find_package(SDL2 REQUIRED SDL2)

这个时候就能正常配置了,但是编译不通过,

error: call to undeclared library function 'memmove' with type 'void *(void *, const void *, unsigned long long)'; ISO C99 and later do not support implicit function declarations

还需要修改几个编译器指令,需要修改的后面写了注释

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    target_compile_options(lvgl PRIVATE
        -pedantic-errors
        -Wall
        # -Wclobbered 注释掉
        -Wdeprecated
        -Wdouble-promotion
        -Wempty-body
        -Wextra
        -Wformat-security
        # -Wmaybe-uninitialized 注释掉
        # -Wmissing-prototypes
        -Wpointer-arith
        -Wmultichar
        -Wno-pedantic # ignored for now, we convert functions to pointers for propertis table.
        -Wreturn-type
        -Wshadow
        -Wshift-negative-value
        -Wsizeof-pointer-memaccess
        -Wtype-limits
        -Wundef
        -Wuninitialized
        -Wunreachable-code
        -Wfloat-conversion
        -Wstrict-aliasing
        -Wno-implicit-function-declaration #增加该项,不然会报memmove找不到
    )

    target_compile_options(main PRIVATE -fsanitize=address,undefined)#删除leak
    target_link_options(main PRIVATE -fsanitize=address,undefined)#删除leak

还需要修改main.c,不然会报error: undefined symbol: SDL_main

#include "lvgl/demos/lv_demos.h"
#include LV_SDL_INCLUDE_PATH //包含SDL的头文件

或者修改main函数为SDL_main函数

这时候就能正常编译了,但是还没法运行,因为缺少SDL.dll运行时,需要手动复制到可执行文件路径下,也可以在CmakeLists.txt中添加后处理执行

add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/main DEPENDS main)
# 添加下面这行语句
add_custom_command(
        TARGET main  POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy
        "${SDL2_DIR}/../x86_64-w64-mingw32/bin/SDL2.dll" ${EXECUTABLE_OUTPUT_PATH}
        )

然后就可以愉快的运行了

image-20240808114151184

调试

打开simulator.code-workspace

找到LLVM,修改cppdbglldb

        {
            "name": "Debug LVGL demo with LLVM",
            "type": "lldb",
            "request": "launch",
            "program": "${workspaceFolder}/bin/main",
            "args": [],
            "cwd": "${workspaceFolder}",
            "preLaunchTask": "Build",
            "stopAtEntry": false,
            "MIMode": "lldb"
        },

然后就可以调试了

image-20240808114427986

posted @ 2024-08-08 11:46  USTHzhanglu  阅读(805)  评论(0编辑  收藏  举报