B站大神的一个视频。有些需要设置的joson文件,这里整理下。
原视频可以看这里。
【VSCode+EIDE开发STM32,支持标准库、HAL库、LL库,可以在VSCode里进行调试,编译以及下载,代码编辑更舒适,环境搭建超简单。】 https://www.bilibili.com/video/BV1nr4y1R7Jb/?share_source=copy_web\&vd_source=6c4c4f00651225661ba90a5916b481f5
VSCode+EIDE开发STM32,支持标准库、HAL库、LL库,可以在VSCode里进行调试,编译以及下载,代码编辑更舒适,环境搭建超简单。
c_cpp_properties.json
bash
{
"configurations": [
{
"name": "ARM",
"includePath": [
"${workspaceFolder}/**"
],
"compilerArgs": [
"-Wall", // 启用所有常见警告
"-Wextra", // 启用额外警告
"-Werror", // 将警告视为错误
"-Wstrict-prototypes", // 函数声明必须指定参数类型
"-Wunused", // 未使用的变量警告
"-Wconversion", // 隐式转换警告
"-Wshadow", // 变量遮蔽警告
"-Wpadded", // 结构体填充警告
"-Wpointer-arith", // 指针运算警告
"-Wdouble-promotion", // float到double的隐式转换警告
"-Wformat=2", // 格式字符串警告
"-pedantic", // 严格遵循标准
"-fstack-usage" // 显示栈使用情况
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"GD32E230"
],
"windowsSdkVersion": "10.0.17134.0",
"cStandard": "c99",
"cppStandard": "c++11",
"intelliSenseMode": "windows-clang-arm64",
"compilerPath": "C:\\Keil_v5\\ARM\\ARMCLANG\\bin\\armclang.exe"
}
],
"version": 4
}

编译器性能优化 的附加选项
填上之后,尺寸能小很多,将优化进行到极致。
bash
-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m23 -c -mexecute-only -fno-rtti -flto -funsigned-char -fshort-enums -fshort-wchar -D__MICROLIB -gdwarf-4 -Oz -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -D__UVISION_VERSION="536" -D_RTE_ -DGD32E23x -D_RTE_ -DGD32E230
这些编译器的附加选项主要用于配置编译器的行为,以满足特定的硬件平台、优化需求和代码规范。以下是对这些选项的逐条解释:
-
编译器选项
-xc:指定输入文件为C语言源代码。
-std=c99:指定使用C99标准进行编译。
-c:只编译源代码,不进行链接,生成目标文件(.o)。
-o ./output/2024/*.o:指定输出文件的路径和名称。
-MD:生成依赖文件(.d),用于Makefile中跟踪依赖关系。
-MD,keilmdk:可能是特定工具链(如Keil MDK)的附加选项,用于生成依赖文件。
-
目标架构和硬件相关
--target=arm-arm-none-eabi:指定目标架构为ARM的无操作系统支持的嵌入式应用二进制接口(EABI)。
-mcpu=cortex-m23:指定目标CPU为Cortex-M23,这是ARM Cortex-M系列的低功耗、低性能核心。
-mexecute-only:生成只执行的代码,通常用于安全或代码保护场景。
-
代码优化和特性
-Oz:最高级别的优化,通常包括代码大小和执行效率的优化。
-flto:启用链接时优化(Link-Time Optimization),允许编译器在链接阶段进一步优化代码。
-fno-rtti:禁用C++的运行时类型信息(RTTI),减少代码大小和执行时间。
-funsigned-char:将char类型默认为无符号类型。
-fshort-enums:将枚举类型存储为最短的整型。
-fshort-wchar:将宽字符类型wchar_t定义为16位(默认是32位)。
-
调试和符号信息
-gdwarf-4:生成DWARF 4格式的调试信息,便于调试器使用。
-DMICROLIB:启用MicroLib,这是ARM提供的轻量级C运行时库,适合嵌入式系统。
-
警告和错误
-Wno-packed:禁止"packed属性"相关的警告。
-Wno-missing-variable-declarations:禁止"缺少变量声明"相关的警告。
-Wno-missing-prototypes:禁止"缺少函数原型"相关的警告。
-Wno-missing-noreturn:禁止"缺少noreturn属性"相关的警告。
-Wno-sign-conversion:禁止"符号转换"相关的警告。
-Wno-nonportable-include-path:禁止"非可移植的包含路径"相关的警告。
-Wno-reserved-id-macro:禁止"保留标识符宏"相关的警告。
-Wno-unused-macros:禁止"未使用的宏"相关的警告。
-Wno-documentation-unknown-command:禁止"未知文档命令"相关的警告。
-Wno-documentation:禁止"文档相关"警告。
-Wno-license-management:禁止"许可证管理相关"警告。
-Wno-parentheses-equality:禁止"括号中的等式"相关警告。
-
宏定义
-DUVISION_VERSION="536":定义宏UVISION_VERSION,值为536。
-DRTE:定义宏RTE,通常用于RTX实时操作系统。
-DGD32E23x:定义宏GD32E23x,表示目标芯片是GD32E23x系列。
-DGD32E230:定义宏GD32E230,可能用于特定的芯片型号。
这些选项的组合通常是为了满足嵌入式开发的需求,确保代码在目标硬件上高效运行,同时减少代码大小和提高安全性。

遇到不能调试的情况
bash
"gdbPath": "C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10/bin/arm-none-eabi-gdb.exe",
这行代码要加进去 ,你必须下载一个新版本的工具链,因为要用到调试工具。
arm-none-eabi-gdb.exe
https://developer.arm.com/downloads/-/gnu-rm
下载这个版本的工具链,才可以。
bash
"configFiles": [
"interface/cmsis-dap-v1.cfg",
"target/gd32e23x.cfg"
],
注意,这里,我直接填写了精准的端口配置文件。
以下是完整的配置。launch.json 这个是调试文件。
bash
{
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"type": "cortex-debug",
"request": "launch",
"name": "jlink",
"servertype": "jlink",
"interface": "swd",
"executable": ".\\build\\Debug\\gd32e230-quickstart.axf",
"runToEntryPoint": "main",
"device": "GD32E230C8",
"gdbPath": "C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10/bin/arm-none-eabi-gdb.exe"
},
{
"cwd": "${workspaceRoot}",
"type": "cortex-debug",
"request": "launch",
"name": "openocd",
"servertype": "openocd",
"executable": ".\\build\\Debug\\gd32e230-quickstart.axf",
"runToEntryPoint": "main",
"gdbPath": "C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10/bin/arm-none-eabi-gdb.exe",
"configFiles": [
"interface/cmsis-dap-v1.cfg",
"target/gd32e23x.cfg"
],
"showDevDebugOutput": "raw"
}
]
}
配置好了这个,就可以用vscode,或者curor去调试的GD32了
