如何将VSCode中C项目工程运行到开发板上 - 指南


大致步骤记录下:

1.拷贝cmake文件夹以及文件 到  项目根目录
2.拷贝build.bat 和 clean.bat到根目录 ===>修改到指定工具链  设置了ARM工具链路径,但CMake可能仍然使用了系统默认的编译器(MinGW64)。
3.修改build.bat
4.修改main.c
5.修改CmakeLists.txt
6.精简项目工程


一、需求来源

 1.之前我们的项目工程都在VSCode搭建的模拟器上跑,现在我们需要在开发板上跑。

 2.Leader要求,参照下面的编译环境搭建,把demo的应用hellolvgl模板编译下

01-02编译环境搭建
1. svn导出01编译环境prebuilts,到C盘根目录
2. svn导出02SDK开发发布到C:\prebuilts\win32
3. 下载02SDK开发发布/工程模板,分普通应用helloworld和界面应用hellolvgl
3.1 普通应用helloworld通过build.bat编译
3.2 普通应用hellolvgl通过build.bat
4. 通过adb push xxx /userdata/ 到目标板上执行,chmod +x xxx

二、准备配置

1.将编译环境prebuilts整个文件拷贝到C盘根目录,如图所示:

2. 将svn导出02SDK开发发布到C:\prebuilts\win32,如图所示:

3. 下载02SDK开发发布/工程模板,分普通应用helloworld和界面应用hellolvgl

4.因为我们是用lvgl开发的界面,将代码导入到官方的lv_port_pc_eclipse-release-v8.3项目中,并在VScode中运行,所以这里选用参考模版为 hellolvgl。hellolvgl如图所示:

三、参考模版配置项目工程

1.首先看看我们的原代码工程,如图所示:

2.复制一份上面项目工程代码,到桌面,以便编译,防止破坏了原工程。

3.拷贝模版中的三个文件到项目工程根目录,同时删除不必要的文件,最终如下图所示

4.修改CMakeLists.txt文件如下图所示

cmake_minimum_required(VERSION 3.10)
# 设置项目名称和C标准
project(hellolvgl C)
# 包含工具链和LVGL配置
include(cmake/toolchain.cmake)
include(cmake/lvgl.cmake)
# 只添加项目根目录到包含路径
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})
# 递归收集所有头文件(.h)到 INCLUDES 变量
file(GLOB_RECURSE INCLUDES "main/custom/*.h" "main/generated/*.h" "main/generated/guider_customer_fonts/*.h")
# 递归收集所有源文件(.c)到 SOURCES 变量
file(GLOB_RECURSE SOURCES  "main/custom/*.c" "main/generated/*.c" "main/generated/guider_customer_fonts/*.c" "main/generated/guider_fonts/*.c" "main/generated/images/*.c"
 "main.c")
# 创建可执行文件
add_executable(hellolvgl ${SOURCES})

5.修改main.c文件,如下图所示:

/**
 * @file main
 *
 */
/*********************
 *      INCLUDES
 *********************/
#include 
#include 
#include "lvgl/lvgl.h"
#include "main/generated/gui_guider.h"
#include "lvgl/lv_port_init.h"
lv_ui guider_ui;
/*********************
 *      DEFINES
 *********************/
/**********************
 *      TYPEDEFS
 **********************/
/**********************
 *  STATIC PROTOTYPES
 **********************/
/**********************
 *  STATIC VARIABLES
 **********************/
/**********************
 *      MACROS
 **********************/
/**********************
 *   GLOBAL FUNCTIONS
 **********************/
/*********************
 *      DEFINES
 *********************/
/**********************
 *      TYPEDEFS
 **********************/
/**********************
 *      VARIABLES
 **********************/
/**********************
 *  STATIC PROTOTYPES
 **********************/
/**********************
 *   GLOBAL FUNCTIONS
 **********************/
int main()
{
  lv_port_init(320, 480, 0);
  setup_ui(&guider_ui);
  while(1) {
      /* Periodically call the lv_task handler.
       * It could be done in a timer interrupt or an OS task too.*/
      lv_timer_handler();
      usleep(5 * 1000);
  }
  return 0;
}

6.Leader提供的build.bat我运行始终生成不出可执行文件,所以我修改了一下build.bat

@echo off

set PROJECT_ROOT=%CD%
set PROJECT_OUT=%PROJECT_ROOT%\out

call :add_path C:\prebuilts\win32\bin
call :add_path C:\prebuilts\win32\cmake\bin
call :add_path C:\prebuilts\win32\arm-none-linux-gnueabihf\bin

if not exist %PROJECT_OUT% mkdir %PROJECT_OUT%

cd %PROJECT_OUT%

:: 明确指定工具链文件
cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain.cmake

ninja -v -j 1

cd ..

exit /B 0

:add_path
(echo ";%PATH%;" | find /C /I ";%1;" > nul) || set "PATH=%1;%PATH%"
goto :eof

7.最终的目录结构如下图所示:

8.点击build.bat,编译出可执行文件在out目录下:,如图所示:

9.通过以下命令,运行到开发板上:

adb push C:\Users\A03251\Desktop\lv_port_pc_eclipse-release-v8.3\out\hellolvgl /userdata
cd /userdata
chmod 777 hellolvgl
 ./hellolvgl

额外命令也写上,万一以后用的上:


adb shell
cd /userdata
/userdata# ./n
/userdata# ./hellolvgl
/userdata# ls
/userdata# cp hellolvgl bak
/userdata# exit

四、效果展示

因为屏还没调好,所以会导致显示有问题

posted on 2026-01-24 11:15  ljbguanli  阅读(0)  评论(0)    收藏  举报