generated from hulk/gd32e23x_template_cmake_vscode
Compare commits
2
Commits
ec412b1ffd
...
baa3e6310b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
baa3e6310b | ||
|
|
5723f521d7 |
@@ -1,6 +1,5 @@
|
||||
# 忽略构建输出目录
|
||||
Build/
|
||||
.vscode/
|
||||
|
||||
# 忽略 Toolchain 目录下所有内容,但保留目录本身
|
||||
Toolchain/*
|
||||
|
||||
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
erase
|
||||
exit
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"marus25.cortex-debug",
|
||||
"ms-vscode.cmake-tools",
|
||||
"twxs.cmake",
|
||||
"ms-vscode.cpptools"
|
||||
]
|
||||
}
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
loadfile Application.hex
|
||||
r
|
||||
go
|
||||
exit
|
||||
Vendored
+58
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"cwd": "${workspaceFolder}",
|
||||
"executable": "${workspaceFolder}/Build/Debug/Application/Application.elf",
|
||||
"name": "Debug with OpenOCD",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"runToEntryPoint": "main",
|
||||
"showDevDebugOutput": "none",
|
||||
"gdbPath": "${env:GD32_GCC_BIN}/arm-none-eabi-gdb.exe",
|
||||
"servertype": "openocd",
|
||||
"serverpath": "${env:GD32_OPENOCD_BIN}/openocd.exe",
|
||||
"svdFile": "${workspaceFolder}/GD32E230.svd",
|
||||
"configFiles": [
|
||||
"${env:GD32_OPENOCD_SCRIPTS}/${config:gd32.openocd.targetConfig}"
|
||||
],
|
||||
"serverArgs": [
|
||||
"-s", "${env:GD32_OPENOCD_SCRIPTS}"
|
||||
],
|
||||
"env": {
|
||||
"OPENOCD_SCRIPTS": "${env:GD32_OPENOCD_SCRIPTS}"
|
||||
},
|
||||
"searchDir": [
|
||||
"${workspaceFolder}"
|
||||
],
|
||||
"preLaunchTask": "Build",
|
||||
"preRestartCommands": [
|
||||
"load",
|
||||
"continue"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cwd": "${workspaceFolder}",
|
||||
"executable": "${workspaceFolder}/Build/Debug/Application/Application.elf",
|
||||
"name": "Debug with J-Link",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"runToEntryPoint": "main",
|
||||
"showDevDebugOutput": "none",
|
||||
"gdbPath": "${env:GD32_GCC_BIN}/arm-none-eabi-gdb.exe",
|
||||
"servertype": "jlink",
|
||||
"device": "${config:gd32.jlink.device}",
|
||||
"interface": "${config:gd32.jlink.interface}",
|
||||
"svdFile": "${workspaceFolder}/GD32E230.svd",
|
||||
"liveWatch": {
|
||||
"enabled": true,
|
||||
"samplesPerSecond": 1
|
||||
},
|
||||
"preLaunchTask": "Build",
|
||||
"preRestartCommands": [
|
||||
"load",
|
||||
"continue"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
r
|
||||
exit
|
||||
Vendored
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"cmake.configureOnOpen": true,
|
||||
"cmake.useCMakePresets": "always",
|
||||
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
|
||||
"cortex-debug.variableUseNaturalFormat": true,
|
||||
"gd32.openocd.targetConfig": "target/openocd_gdlink_gd32e23x.cfg",
|
||||
"gd32.openocd.massEraseCommand": "gd32e23x mass_erase 0",
|
||||
"gd32.jlink.device": "GD32E230F8",
|
||||
"gd32.jlink.interface": "SWD",
|
||||
"gd32.jlink.speed": "4000",
|
||||
"files.associations": {
|
||||
"*.h": "c",
|
||||
"*.c": "c"
|
||||
}
|
||||
}
|
||||
Vendored
+229
@@ -0,0 +1,229 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Build",
|
||||
"type": "cmake",
|
||||
"command": "build",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [
|
||||
{
|
||||
"base": "$gcc",
|
||||
"fileLocation": [
|
||||
"relative",
|
||||
"${command:cmake.buildDirectory}"
|
||||
]
|
||||
}
|
||||
],
|
||||
"options": {
|
||||
"environment": {
|
||||
"CLICOLOR_FORCE": "1",
|
||||
"OPENOCD_SCRIPTS": "${env:GD32_OPENOCD_SCRIPTS}"
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
"clear": true
|
||||
},
|
||||
"icon": {
|
||||
"id": "code",
|
||||
"tooltip": "Build"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Build and Flash",
|
||||
"dependsOn": [
|
||||
"Build",
|
||||
"Flash MCU"
|
||||
],
|
||||
"dependsOrder": "sequence",
|
||||
"group": "build",
|
||||
"icon": {
|
||||
"id": "insert",
|
||||
"tooltip": "Build and Flash"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Flash MCU",
|
||||
"type": "process",
|
||||
"command": "${env:GD32_OPENOCD_BIN}/openocd.exe",
|
||||
"args": [
|
||||
"-s", "${env:GD32_OPENOCD_SCRIPTS}",
|
||||
"-f", "${env:GD32_OPENOCD_SCRIPTS}/${config:gd32.openocd.targetConfig}",
|
||||
"-c", "init; reset halt; flash write_image erase ${command:cmake.launchTargetFilename}; reset; exit"
|
||||
],
|
||||
"group": "build",
|
||||
"problemMatcher": [],
|
||||
"options": {
|
||||
"cwd": "${command:cmake.buildDirectory}/Application",
|
||||
"environment": {
|
||||
"OPENOCD_SCRIPTS": "${env:GD32_OPENOCD_SCRIPTS}"
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
"clear": true
|
||||
},
|
||||
"icon": {
|
||||
"id": "gather",
|
||||
"tooltip": "Flash MCU"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Reset MCU",
|
||||
"type": "process",
|
||||
"command": "${env:GD32_OPENOCD_BIN}/openocd.exe",
|
||||
"args": [
|
||||
"-s", "${env:GD32_OPENOCD_SCRIPTS}",
|
||||
"-f", "${env:GD32_OPENOCD_SCRIPTS}/${config:gd32.openocd.targetConfig}",
|
||||
"-c", "init; reset; exit"
|
||||
],
|
||||
"group": "build",
|
||||
"problemMatcher": [],
|
||||
"options": {
|
||||
"cwd": "${command:cmake.buildDirectory}/Application",
|
||||
"environment": {
|
||||
"OPENOCD_SCRIPTS": "${env:GD32_OPENOCD_SCRIPTS}"
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
"clear": true
|
||||
},
|
||||
"icon": {
|
||||
"id": "discard",
|
||||
"tooltip": "Reset MCU"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Mass Erase MCU",
|
||||
"type": "process",
|
||||
"command": "${env:GD32_OPENOCD_BIN}/openocd.exe",
|
||||
"args": [
|
||||
"-s", "${env:GD32_OPENOCD_SCRIPTS}",
|
||||
"-f", "${env:GD32_OPENOCD_SCRIPTS}/${config:gd32.openocd.targetConfig}",
|
||||
"-c", "init; reset halt; ${config:gd32.openocd.massEraseCommand}; exit"
|
||||
],
|
||||
"group": "build",
|
||||
"problemMatcher": [],
|
||||
"options": {
|
||||
"cwd": "${command:cmake.buildDirectory}/Application",
|
||||
"environment": {
|
||||
"OPENOCD_SCRIPTS": "${env:GD32_OPENOCD_SCRIPTS}"
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
"clear": true
|
||||
},
|
||||
"icon": {
|
||||
"id": "clear-all",
|
||||
"tooltip": "Erase MCU"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "OpenOCD Server",
|
||||
"type": "process",
|
||||
"command": "${env:GD32_OPENOCD_BIN}/openocd.exe",
|
||||
"args": [
|
||||
"-s", "${env:GD32_OPENOCD_SCRIPTS}",
|
||||
"-f", "${env:GD32_OPENOCD_SCRIPTS}/${config:gd32.openocd.targetConfig}"
|
||||
],
|
||||
"group": "build",
|
||||
"problemMatcher": [],
|
||||
"options": {
|
||||
"cwd": "${command:cmake.buildDirectory}/Application",
|
||||
"environment": {
|
||||
"OPENOCD_SCRIPTS": "${env:GD32_OPENOCD_SCRIPTS}"
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
"clear": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Build and Flash (Jlink)",
|
||||
"dependsOn": [
|
||||
"Build",
|
||||
"Flash MCU (Jlink)"
|
||||
],
|
||||
"dependsOrder": "sequence",
|
||||
"group": "build",
|
||||
"icon": {
|
||||
"id": "insert",
|
||||
"tooltip": "Build and Flash (Jlink)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Flash MCU (Jlink)",
|
||||
"type": "process",
|
||||
"command": "JLink.exe",
|
||||
"args": [
|
||||
"-device", "${config:gd32.jlink.device}",
|
||||
"-if", "${config:gd32.jlink.interface}",
|
||||
"-speed", "${config:gd32.jlink.speed}",
|
||||
"-autoconnect", "1",
|
||||
"-CommanderScript", "${workspaceFolder}/.vscode/flash.jlink"
|
||||
],
|
||||
"group": "build",
|
||||
"problemMatcher": [],
|
||||
"options": {
|
||||
"cwd": "${command:cmake.buildDirectory}/Application"
|
||||
},
|
||||
"presentation": {
|
||||
"clear": true
|
||||
},
|
||||
"icon": {
|
||||
"id": "gather",
|
||||
"tooltip": "Flash MCU (Jlink)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Reset MCU (Jlink)",
|
||||
"type": "process",
|
||||
"command": "JLink.exe",
|
||||
"args": [
|
||||
"-device", "${config:gd32.jlink.device}",
|
||||
"-if", "${config:gd32.jlink.interface}",
|
||||
"-speed", "${config:gd32.jlink.speed}",
|
||||
"-autoconnect", "1",
|
||||
"-CommanderScript", "${workspaceFolder}/.vscode/reset.jlink"
|
||||
],
|
||||
"group": "build",
|
||||
"problemMatcher": [],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}"
|
||||
},
|
||||
"presentation": {
|
||||
"clear": true
|
||||
},
|
||||
"icon": {
|
||||
"id": "discard",
|
||||
"tooltip": "Reset MCU (Jlink)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Mass Erase MCU (Jlink)",
|
||||
"type": "process",
|
||||
"command": "JLink.exe",
|
||||
"args": [
|
||||
"-device", "${config:gd32.jlink.device}",
|
||||
"-if", "${config:gd32.jlink.interface}",
|
||||
"-speed", "${config:gd32.jlink.speed}",
|
||||
"-autoconnect", "1",
|
||||
"-CommanderScript", "${workspaceFolder}/.vscode/erase.jlink"
|
||||
],
|
||||
"group": "build",
|
||||
"problemMatcher": [],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}"
|
||||
},
|
||||
"presentation": {
|
||||
"clear": true
|
||||
},
|
||||
"icon": {
|
||||
"id": "clear-all",
|
||||
"tooltip": "Erase MCU (Jlink)"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -52,7 +52,7 @@
|
||||
### 其他
|
||||
|
||||
- LED:PB1
|
||||
- SWD:SWDIO、SWCLK、GND,用于 DAPLink 烧录与调试
|
||||
- SWD:SWDIO、SWCLK、GND,用于 DAPLink/J-Link 烧录与调试
|
||||
|
||||
## 功能开关
|
||||
|
||||
@@ -80,6 +80,26 @@
|
||||
|
||||
## 编译与烧录
|
||||
|
||||
### 环境变量(每台电脑配置一次)
|
||||
|
||||
工程不内置工具链,编译、烧录、调试全部通过用户级环境变量定位工具:
|
||||
|
||||
| 变量名 | 值 | 用途 |
|
||||
|---|---|---|
|
||||
| `GD32_GCC_BIN` | ARM GCC 工具链的 `bin` 目录(也接受根目录) | CMake 编译、GDB 调试 |
|
||||
| `GD32_OPENOCD_BIN` | 包含 `openocd.exe` 的 `bin` 目录 | OpenOCD 烧录/调试 |
|
||||
| `GD32_OPENOCD_SCRIPTS` | OpenOCD `scripts` 根目录 | `-s` 脚本搜索路径 |
|
||||
|
||||
PowerShell 配置示例(路径按本机实际位置填写,设置后重启 VSCode 生效):
|
||||
|
||||
```powershell
|
||||
[Environment]::SetEnvironmentVariable("GD32_GCC_BIN", "D:\toolchain\arm-gnu-toolchain-13.3.rel1\bin", "User")
|
||||
[Environment]::SetEnvironmentVariable("GD32_OPENOCD_BIN", "D:\toolchain\xpack-openocd-0.11.0-3\bin", "User")
|
||||
[Environment]::SetEnvironmentVariable("GD32_OPENOCD_SCRIPTS", "D:\toolchain\xpack-openocd-0.11.0-3\scripts", "User")
|
||||
```
|
||||
|
||||
CMake 也可用 `-DTOOLCHAIN_DIRECTORY=<bin目录>` 临时指定工具链。更换 GCC 版本后需删除 `Build/Debug`、`Build/Release` 重新配置(CMake 缓存了编译器绝对路径)。完整说明见 [gd32e23x_template_cmake_vscode](https://gitea.hulk.wang/hulk/gd32e23x_template_cmake_vscode) 的 README。
|
||||
|
||||
### 编译
|
||||
|
||||
在仓库根目录执行:
|
||||
@@ -103,20 +123,25 @@ cmake --build Build/Debug
|
||||
- `Application.bin`
|
||||
- `Application.map`
|
||||
|
||||
### 烧录
|
||||
### 烧录与调试(VSCode 任务)
|
||||
|
||||
通过 DAPLink/CMSIS-DAP 烧录:
|
||||
工程自带 `.vscode` 配置(推荐安装扩展:CMake Tools、cortex-debug、C/C++),VSCode 内可直接使用:
|
||||
|
||||
- **OpenOCD 任务**(DAPLink/CMSIS-DAP):`Build and Flash`、`Flash MCU`、`Reset MCU`、`Mass Erase MCU`、`OpenOCD Server`
|
||||
- **J-Link 任务**:`Build and Flash (Jlink)`、`Flash MCU (Jlink)`、`Reset MCU (Jlink)`、`Mass Erase MCU (Jlink)`
|
||||
- **调试**:`Debug with OpenOCD` / `Debug with J-Link`(cortex-debug,带 GD32E230.svd 外设视图)
|
||||
|
||||
OpenOCD 使用的 cfg 由 `.vscode/settings.json` 的 `gd32.openocd.targetConfig` 指定(当前为 GD-Link 的 `target/openocd_gdlink_gd32e23x.cfg`);DAPLink 调试器可换成 `interface/cmsis-dap.cfg` + `target/gd32e23x.cfg` 的组合 cfg。J-Link 器件名为 `GD32E230F8`,在 `gd32.jlink.*` 设置中调整。
|
||||
|
||||
命令行烧录(等效 `Flash MCU` 任务):
|
||||
|
||||
```bash
|
||||
D:/toolchain/openocd/bin/openocd.exe \
|
||||
-s D:/toolchain/openocd/scripts \
|
||||
-f interface/cmsis-dap.cfg \
|
||||
-f target/gd32e23x.cfg \
|
||||
-c "reset_config srst_only connect_assert_srst; init; reset halt; flash write_image erase Build/Release/Application/Application.elf; reset; exit"
|
||||
%GD32_OPENOCD_BIN%\openocd.exe ^
|
||||
-s %GD32_OPENOCD_SCRIPTS% ^
|
||||
-f %GD32_OPENOCD_SCRIPTS%\target\openocd_gdlink_gd32e23x.cfg ^
|
||||
-c "init; reset halt; flash write_image erase Build/Release/Application/Application.elf; reset; exit"
|
||||
```
|
||||
|
||||
也可以在 VSCode 中使用已配置的 Flash 任务。
|
||||
|
||||
## 串口命令(Mx)
|
||||
|
||||
命令帧格式 `D5 01 LEN [命令] CRC`(LEN 为命令字节数,CRC 为帧内累加和),响应帧 `B5 TYPE LEN [数据] CRC`,`TYPE=0xF0` 表示成功。波特率 115200,8N1。
|
||||
@@ -129,7 +154,7 @@ D:/toolchain/openocd/bin/openocd.exe \
|
||||
| `M2` | 关闭测距上报,LED 灭 | `ok` |
|
||||
| `M3` | 立即返回最近一帧结果(上报关闭时也可查询) | `d=830;s=0` |
|
||||
| `M888` | 软件重启 | `ok` 后复位 |
|
||||
| `M999` | 输出固件版本号 | `v20.0.0.1` |
|
||||
| `M999` | 输出固件版本号 | `v99.0.0.1` |
|
||||
| `M9999` | 复位进入 OTA/Bootloader | 复位 |
|
||||
|
||||
### 校准命令
|
||||
|
||||
@@ -1,24 +1,62 @@
|
||||
# You can change TOOLCHAIN_DIRECTORY if you want to use different toolchain.
|
||||
# set(TOOLCHAIN_DIRECTORY "${CMAKE_SOURCE_DIR}/Toolchain/xpack-arm-none-eabi-gcc-11.3.1-1.1/bin")
|
||||
# The project never stores a compiler package. Each machine supplies a path.
|
||||
# TOOLCHAIN_DIRECTORY (CMake cache) has priority over the environment variable.
|
||||
# GD32_GCC_ENV_VAR lets a workstation use a different variable name if needed.
|
||||
set(TOOLCHAIN_DIRECTORY "" CACHE PATH "Path to arm-none-eabi toolchain bin directory")
|
||||
set(GD32_GCC_ENV_VAR "GD32_GCC_BIN" CACHE STRING "Environment variable containing the ARM GCC path")
|
||||
set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES TOOLCHAIN_DIRECTORY GD32_GCC_ENV_VAR)
|
||||
|
||||
if(GD32_GCC_ENV_VAR AND NOT GD32_GCC_ENV_VAR MATCHES "^GD32_[A-Za-z0-9_]+$")
|
||||
message(FATAL_ERROR "GD32_GCC_ENV_VAR must use the GD32_ prefix: ${GD32_GCC_ENV_VAR}")
|
||||
endif()
|
||||
|
||||
if(NOT TOOLCHAIN_DIRECTORY AND GD32_GCC_ENV_VAR)
|
||||
if(DEFINED ENV{${GD32_GCC_ENV_VAR}} AND NOT "$ENV{${GD32_GCC_ENV_VAR}}" STREQUAL "")
|
||||
file(TO_CMAKE_PATH "$ENV{${GD32_GCC_ENV_VAR}}" TOOLCHAIN_DIRECTORY)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT TOOLCHAIN_DIRECTORY)
|
||||
# Add extra auto-detect paths in this list when using another machine.
|
||||
# Example: "C:/your/path/xpack-arm-none-eabi-gcc-11.3.1-1.1/bin"
|
||||
set(_TOOLCHAIN_CANDIDATES
|
||||
"D:/toolchain/xpack-arm-none-eabi-gcc-11.3.1-1.1/bin"
|
||||
"C:/toolchain/xpack-arm-none-eabi-gcc-11.3.1-1.1/bin"
|
||||
"${CMAKE_SOURCE_DIR}/Toolchain/xpack-arm-none-eabi-gcc-11.3.1-1.1/bin"
|
||||
)
|
||||
|
||||
foreach(_candidate IN LISTS _TOOLCHAIN_CANDIDATES)
|
||||
if(EXISTS "${_candidate}/arm-none-eabi-gcc.exe" OR EXISTS "${_candidate}/arm-none-eabi-gcc")
|
||||
set(TOOLCHAIN_DIRECTORY "${_candidate}")
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
message(FATAL_ERROR
|
||||
"Cannot find ARM GCC toolchain. Set ${GD32_GCC_ENV_VAR} in the machine environment "
|
||||
"or pass -DTOOLCHAIN_DIRECTORY=<toolchain-bin>.")
|
||||
endif()
|
||||
|
||||
file(TO_CMAKE_PATH "${TOOLCHAIN_DIRECTORY}" TOOLCHAIN_DIRECTORY)
|
||||
get_filename_component(TOOLCHAIN_DIRECTORY "${TOOLCHAIN_DIRECTORY}" ABSOLUTE)
|
||||
|
||||
if(WIN32)
|
||||
set(TOOLCHAIN_SUFFIX ".exe")
|
||||
else()
|
||||
set(TOOLCHAIN_SUFFIX "")
|
||||
endif()
|
||||
|
||||
# Accept either the package root or its bin directory.
|
||||
if(NOT EXISTS "${TOOLCHAIN_DIRECTORY}/arm-none-eabi-gcc${TOOLCHAIN_SUFFIX}" AND
|
||||
EXISTS "${TOOLCHAIN_DIRECTORY}/bin/arm-none-eabi-gcc${TOOLCHAIN_SUFFIX}")
|
||||
set(TOOLCHAIN_DIRECTORY "${TOOLCHAIN_DIRECTORY}/bin")
|
||||
endif()
|
||||
|
||||
set(_ARM_GCC_EXECUTABLE "${TOOLCHAIN_DIRECTORY}/arm-none-eabi-gcc${TOOLCHAIN_SUFFIX}")
|
||||
|
||||
set(_TOOLCHAIN_BINARIES
|
||||
arm-none-eabi-gcc
|
||||
arm-none-eabi-g++
|
||||
arm-none-eabi-gdb
|
||||
arm-none-eabi-ar
|
||||
arm-none-eabi-ranlib
|
||||
arm-none-eabi-as
|
||||
arm-none-eabi-ld
|
||||
arm-none-eabi-objcopy
|
||||
arm-none-eabi-objdump
|
||||
arm-none-eabi-size
|
||||
)
|
||||
foreach(_binary IN LISTS _TOOLCHAIN_BINARIES)
|
||||
if(NOT EXISTS "${TOOLCHAIN_DIRECTORY}/${_binary}${TOOLCHAIN_SUFFIX}")
|
||||
message(FATAL_ERROR
|
||||
"ARM GCC toolchain is incomplete; missing ${_binary}${TOOLCHAIN_SUFFIX} in ${TOOLCHAIN_DIRECTORY}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
set(CMAKE_C_FLAGS_DEBUG "")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "")
|
||||
set(CMAKE_ASM_FLAGS_DEBUG "")
|
||||
@@ -26,18 +64,10 @@ set(CMAKE_C_FLAGS_RELEASE "")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "")
|
||||
set(CMAKE_ASM_FLAGS_RELEASE "")
|
||||
|
||||
if(NOT TOOLCHAIN_DIRECTORY)
|
||||
message(FATAL_ERROR "Cannot find ARM GCC toolchain. Set TOOLCHAIN_DIRECTORY cache variable or install toolchain in one of the default locations.")
|
||||
endif()
|
||||
|
||||
set(CMAKE_COLOR_DIAGNOSTICS ON)
|
||||
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "")
|
||||
|
||||
if(WIN32)
|
||||
set(TOOLCHAIN_SUFFIX ".exe")
|
||||
endif()
|
||||
|
||||
set(CMAKE_SYSTEM_NAME Generic)
|
||||
set(CMAKE_SYSTEM_PROCESSOR arm)
|
||||
|
||||
@@ -50,18 +80,45 @@ set(FLAGS "-mcpu=cortex-m23 -std=gnu11 -fstack-usage -
|
||||
set(ASM_FLAGS "-x assembler-with-cpp")
|
||||
set(CPP_FLAGS "-fno-rtti -fno-exceptions -fno-threadsafe-statics")
|
||||
|
||||
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc${TOOLCHAIN_SUFFIX})
|
||||
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++${TOOLCHAIN_SUFFIX})
|
||||
set(CMAKE_ASM_COMPILER ${TOOLCHAIN_PREFIX}gcc${TOOLCHAIN_SUFFIX})
|
||||
set(_REQUESTED_C_COMPILER "${TOOLCHAIN_PREFIX}gcc${TOOLCHAIN_SUFFIX}")
|
||||
if(DEFINED CMAKE_C_COMPILER AND CMAKE_C_COMPILER AND
|
||||
IS_ABSOLUTE "${CMAKE_C_COMPILER}" AND
|
||||
NOT CMAKE_C_COMPILER STREQUAL "${_REQUESTED_C_COMPILER}")
|
||||
message(FATAL_ERROR
|
||||
"The build directory is already configured for a different ARM GCC compiler:\n"
|
||||
" cached: ${CMAKE_C_COMPILER}\n"
|
||||
" selected: ${_REQUESTED_C_COMPILER}\n"
|
||||
"Delete the build directory or run CMake Tools 'Delete Cache and Reconfigure'.")
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_COMPILER "${_REQUESTED_C_COMPILER}")
|
||||
set(CMAKE_CXX_COMPILER "${TOOLCHAIN_PREFIX}g++${TOOLCHAIN_SUFFIX}")
|
||||
set(CMAKE_ASM_COMPILER "${TOOLCHAIN_PREFIX}gcc${TOOLCHAIN_SUFFIX}")
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS} ${CPP_FLAGS}")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${FLAGS} ${ASM_FLAGS}")
|
||||
set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy${TOOLCHAIN_SUFFIX})
|
||||
set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size${TOOLCHAIN_SUFFIX})
|
||||
set(CMAKE_OBJDUMP ${TOOLCHAIN_PREFIX}objdump${TOOLCHAIN_SUFFIX})
|
||||
set(CMAKE_AS ${TOOLCHAIN_PREFIX}as${TOOLCHAIN_SUFFIX})
|
||||
set(CMAKE_LD ${TOOLCHAIN_PREFIX}ld${TOOLCHAIN_SUFFIX})
|
||||
set(CMAKE_AR "${TOOLCHAIN_PREFIX}ar${TOOLCHAIN_SUFFIX}")
|
||||
set(CMAKE_RANLIB "${TOOLCHAIN_PREFIX}ranlib${TOOLCHAIN_SUFFIX}")
|
||||
set(CMAKE_OBJCOPY "${TOOLCHAIN_PREFIX}objcopy${TOOLCHAIN_SUFFIX}")
|
||||
set(CMAKE_SIZE "${TOOLCHAIN_PREFIX}size${TOOLCHAIN_SUFFIX}")
|
||||
set(CMAKE_OBJDUMP "${TOOLCHAIN_PREFIX}objdump${TOOLCHAIN_SUFFIX}")
|
||||
set(CMAKE_AS "${TOOLCHAIN_PREFIX}as${TOOLCHAIN_SUFFIX}")
|
||||
set(CMAKE_LD "${TOOLCHAIN_PREFIX}ld${TOOLCHAIN_SUFFIX}")
|
||||
set(CMAKE_LINKER "${TOOLCHAIN_PREFIX}ld${TOOLCHAIN_SUFFIX}")
|
||||
|
||||
execute_process(
|
||||
COMMAND "${_ARM_GCC_EXECUTABLE}" --version
|
||||
OUTPUT_VARIABLE _ARM_GCC_VERSION_OUTPUT
|
||||
ERROR_VARIABLE _ARM_GCC_VERSION_ERROR
|
||||
RESULT_VARIABLE _ARM_GCC_VERSION_RESULT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if(NOT _ARM_GCC_VERSION_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Unable to execute ${_ARM_GCC_EXECUTABLE}: ${_ARM_GCC_VERSION_ERROR}")
|
||||
endif()
|
||||
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" _ARM_GCC_VERSION "${_ARM_GCC_VERSION_OUTPUT}")
|
||||
message(STATUS "Using ARM GCC ${_ARM_GCC_VERSION} from ${TOOLCHAIN_DIRECTORY}")
|
||||
|
||||
set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf")
|
||||
set(CMAKE_EXECUTABLE_SUFFIX_C ".elf")
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# Project basic info
|
||||
set(PROJECT_NAME "GD32E23x_StdPeriph_Template")
|
||||
set(BOARD_TYPE_CODE 20)
|
||||
# 板卡类型码(协议帧中的标识):1-89 正式产品;90-99 预研专用,99=通用预研/试验
|
||||
set(BOARD_TYPE_CODE 99)
|
||||
set(VERSION_MAJOR 0)
|
||||
set(VERSION_MINOR 0)
|
||||
set(VERSION_PATCH 1)
|
||||
|
||||
Reference in New Issue
Block a user