diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d901fb..b1e280c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,10 @@ include(${CMAKE_SOURCE_DIR}/cmake/project.cmake) project(${PROJECT_NAME} LANGUAGES C CXX ASM) +# Generate version header from CMake version variables +file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/generated) +configure_file(${CMAKE_SOURCE_DIR}/cmake/version.h.in ${CMAKE_BINARY_DIR}/generated/version.h @ONLY) + # 添加SDK库 add_subdirectory(SDK/CMSIS) add_subdirectory(SDK/GD32E23x_standard_peripheral) @@ -47,6 +51,7 @@ project_add_target_properties(${PROJECT_NAME}) # 头文件路径 target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/Inc + ${CMAKE_BINARY_DIR}/generated # Add new include directories here, e.g. ${CMAKE_SOURCE_DIR}/Application/User/Inc @@ -68,7 +73,7 @@ target_link_libraries(${PROJECT_NAME} PRIVATE CMSIS) target_link_libraries(${PROJECT_NAME} PRIVATE GD32E23x_standard_peripheral) # 生成 bin/hex/list 文件名格式:[工程名_版本号_编译条件_编译日期] -set(OUTPUT_PREFIX "${PROJECT_NAME}_${VERSION}_${IIC_TYPE}_${BUILD_DATE}") +set(OUTPUT_PREFIX "${PROJECT_NAME}_${VERSION}_${BUILD_VARIANT}_${BUILD_DATE}") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD diff --git a/Inc/board_config.h b/Inc/board_config.h index 73f6d8a..e12ef65 100644 --- a/Inc/board_config.h +++ b/Inc/board_config.h @@ -1,6 +1,8 @@ #ifndef BOARD_CONFIG_H #define BOARD_CONFIG_H +#include "version.h" + #define GD32E23XF4 0x10 #define GD32E23XF6 0x20 #define GD32E23XF8 0x40 @@ -27,14 +29,6 @@ /******************************************************************************/ -#define MCU_CODE 23u - -#define FW_VERSION_MAJOR 0 -#define FW_VERSION_MINOR 0 -#define FW_VERSION_PATCH 3 - -/******************************************************************************/ - /* Dynamic USART Configuration Structure */ typedef struct { uint32_t rcu_usart; diff --git a/Src/command.c b/Src/command.c index 8836074..932285f 100644 --- a/Src/command.c +++ b/Src/command.c @@ -322,12 +322,29 @@ void handle_command(const uint8_t *frame, uint8_t len) { // send_response(RESP_TYPE_OK, s_report_status_ok, sizeof(s_report_status_ok)); // return; - case 999u: //M999: 输出固件版本号(vMCU_CODE.FW_VERSION_MAJOR.FW_VERSION_MINOR.FW_VERSION_PATCH) + /* ========================================== + * M999 输出固件版本号命令 + * ========================================== */ + case 999u: //M999: 输出固件版本号 + { char version_str[16]; - int n = snprintf(version_str, sizeof(version_str), "v%u.%u.%u.%u", MCU_CODE, FW_VERSION_MAJOR, FW_VERSION_MINOR, FW_VERSION_PATCH); - send_response(RESP_TYPE_OK, (uint8_t *)version_str, (uint8_t)n); - // send_response(RESP_TYPE_OK, (uint8_t *)"v23.0.0.3", 9); - return; + char *p = version_str; + + *p++ = 'v'; + p += uint_to_str(BOARD_TYPE_CODE, p); + *p++ = '.'; + p += uint_to_str(FW_VERSION_MAJOR, p); + *p++ = '.'; + p += uint_to_str(FW_VERSION_MINOR, p); + *p++ = '.'; + p += uint_to_str(FW_VERSION_PATCH, p); + *p = '\0'; // null-terminate for printf safety + + uint8_t n = (uint8_t)(p - version_str); + send_response(RESP_TYPE_OK, (uint8_t *)version_str, n); + COMMAND_DEBUG("Firmware Version: %s", version_str); + } + return; case 9999u: // M9999: 重启系统 diff --git a/cmake/project_config.cmake b/cmake/project_config.cmake index c4c7858..788a990 100644 --- a/cmake/project_config.cmake +++ b/cmake/project_config.cmake @@ -1,5 +1,6 @@ # Project basic info set(PROJECT_NAME "LDC1612") +set(BOARD_TYPE_CODE 23) set(VERSION_MAJOR 1) set(VERSION_MINOR 0) set(VERSION_PATCH 0) @@ -7,10 +8,12 @@ set(VERSION "V${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") string(TIMESTAMP BUILD_DATE "%Y-%m-%d") # 编译条件(如IIC类型等) -# set(IIC_TYPE "AutoDetectDriveCurrent") -set(IIC_TYPE "HW-IIC") +# Example: HW-IIC_APP / HW-IIC_Bootloader +# set(BUILD_VARIANT "AutoDetectDriveCurrent") +# set(BUILD_VARIANT "HW-IIC") +set(BUILD_VARIANT "APP") # 其它自定义宏 -add_definitions(-DIIC_TYPE=${IIC_TYPE}) +add_definitions(-DBUILD_VARIANT=${BUILD_VARIANT}) add_definitions(-DPROJECT_VERSION="${VERSION}") add_definitions(-DBUILD_DATE="${BUILD_DATE}") \ No newline at end of file diff --git a/cmake/version.h.in b/cmake/version.h.in new file mode 100644 index 0000000..ccf0756 --- /dev/null +++ b/cmake/version.h.in @@ -0,0 +1,7 @@ +#pragma once + +/* Auto-generated from CMake VERSION_* variables. Do not edit directly. */ +#define BOARD_TYPE_CODE @BOARD_TYPE_CODE@ +#define FW_VERSION_MAJOR @VERSION_MAJOR@ +#define FW_VERSION_MINOR @VERSION_MINOR@ +#define FW_VERSION_PATCH @VERSION_PATCH@ diff --git a/start-vscode-no-openocd-env.bat b/start-vscode-no-openocd-env.bat deleted file mode 100644 index 7bd4f7e..0000000 --- a/start-vscode-no-openocd-env.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -set OPENOCD_SCRIPTS= -start "" "D:\Microsoft VS Code\Code.exe" \ No newline at end of file