各位,前段时间我主要在做STM32上的嵌入式软件开发,主要是用来同时控制3个BLDC电机和4G通信。当时写了一个【用VSCode和STM32CubeMX打造STM32开发利器 保姆级教程】

用VSCode和STM32CubeMX打造STM32开发利器 保姆级教程

确实很好用。

现在我要用树莓派来写嵌入式软件,我发现用vscode来编程实在是爽,因此,我准备来用vscode和cmake打造一个树莓派开发利器。下面是保姆级教程。

1. vscode的安装

参考下面链接就可以了。

Visual Studio Code on Linux

因为我是用的ubuntu 24.04LTS版,所以,我是装的ubuntu的vscode

2. 打开vscode

安装好后,用ssh登录树莓派,在任意地方,输入code,就可以打开vscode了。我喜欢在project目录下编程,所以,我在project目录下打开vscode.

打开之后,在显示器就出现vscode框了。但是,大小和位置是固定的,而且反应有点慢。这没有办法,因为是通过ssh登录反应到电脑屏幕的。(如果直接用树莓派接显示器的话,应该能够解决这个问题)

3. 编译环境

编译的话,当然还是用CMake爽啊。下面是我用的cmake文件,主要是参考

cmake使用详细教程(日常使用这一篇就足够了)_cmake教程-CSDN博客

cmake_minimum_required(VERSION 3.22)

#Setup compiler settings
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTERNSIONS ON)

#Set the project name
set(CMAKE_PROJECT_NAME my_dcmotor1)

#Enable CMake support for ASM and C, CPP languages
enable_language(CXX C ASM)

#Core project settings
project(${CMAKE_PROJECT_NAME})

#integrate source files
aux_source_directory(. MAIN_SRC)

#include files
include_directories(.)

#for opencv
find_package(OpenCV REQUIRED)

#for wiringPi
find_library(WIRINGPI_LIBRARIES NAMES wiringPi)

#Create an executable object type
add_executable (${CMAKE_PROJECT_NAME} ${MAIN_SRC})

#link
target_link_libraries(${CMAKE_PROJECT_NAME} ${OpenCV_LIBS})
target_link_libraries(${CMAKE_PROJECT_NAME} ${WIRINGPI_LIBRARIES})

#add compiler options
add_compile_options(-Wall -g)

 4. 编译方式

有了上面的cmake文件后呢,可以有2种方式进行编译

4.1, 在源文件目录下打开vscode后,vscode看到这个cmake文件后,会自动帮你配置,你只需要等配置好后,点build就行。大概情况如下:

上面是vscode的自动配置,那么点build后,就是下面的情况了

可以看到,build文件夹里,已经生成了【my_dcmotor1】的可执行文件,并且包含debug信息的。

4.2 第二种方式,就是,自己建立一个build文件夹,进入build文件夹,然后,执行指令

cmake ..

那么会自动执行上层目录的CMakeLists.txt里面的指令。然后,执行指令

make

则,在build目录下就自动生成了【my_dcmotor1】的可执行文件。

5. 调试debug

 因为CMakeLists.txt里面已经加了生成debug信息的指令,所以,生成的可执行文件是带debug的信息的。

然后,点vscode左侧的run and debug图标,然后点绿色三角形图标,会要求配置launch.json.

按照我下面这样配置,就OK了

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    {
        "name": "build and debug Linux (gdb) Launch",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}/build/my_dcmotor1",
        "args": [],
        "stopAtEntry": true,
        "cwd": "${fileDirname}",
        "environment": [],
        "externalConsole": false,
        "MIMode": "gdb",
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            },
            {
                "description": "Set Disassembly Flavor to Intel",
                "text": "-gdb-set disassembly-flavor intel",
                "ignoreFailures": true
            }
        ]
    }
    ]
}

什么都不需要改,只是将“program”:后面的可执行文件改成你的文件就行了。我的文件就是build文件夹下的【my_dcmotor1】.

那么,就会出现下面的画面

调试程序停在了main()的第一条指令,然后,可以点单步执行,或者打断点,看执行逻辑和变量了。可以在watch窗口加入全局变量,看全局变量。

 那么接下来的执行,就跟【用VSCode和STM32CubeMX打造STM32开发利器 保姆级教程】里面一样了,可以随意进行debug了。

6. 一点tips

如果你的程序用到了wiringPi的库,那么用gdb进行调试时,会说没有权限访问gpiomem等等。这时需要将用户加入kmem组,然后重启系统,就没有问题了。

7. 好了,大功告成,亲个嘴儿。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐