From ef243e207aac2f6f9e0921a3e095573e0b664ef8 Mon Sep 17 00:00:00 2001 From: qzhhhi Date: Mon, 2 Mar 2026 17:23:38 +0000 Subject: [PATCH 1/3] refactor(firmware/c_board): Split app/bsp layout and align firmware packaging - Move app code to `app/src/` and `app/include/` to make room for future bootloaders. - Isolate CubeMX files in `bsp/cubemx/`, rename linker script to `STM32F407XX_APP.ld`, and enable `NoMain=true`. - Move `main()` to the app layer to control startup flow, relocate startup interrupt-disable logic from `startup_stm32f407xx.s` to `main()`, and keep TinyUSB IRQ dispatch in CubeMX ISR. - Refactor CMake with top-level shared options and `app/CMakeLists.txt`; update toolchain path, presets, and lint targets. - Adapt `.scripts/patch_cubemx` for the new CubeMX root and patch strategy. - Update `Dockerfile.build_firmware` to package only release ELFs (excluding debug artifacts) from specific board outputs (`rmcs_board`, `c_board_app`). No runtime feature changes are introduced to the c_board application logic; startup and packaging flows are strictly reorganized. --- .scripts/lint-targets.yml | 4 +- .scripts/patch_cubemx | 30 ++-- Dockerfile.build_firmware | 33 ++-- firmware/c_board/CMakeLists.txt | 147 +++++------------- firmware/c_board/CMakePresets.json | 2 +- firmware/c_board/app/CMakeLists.txt | 53 +++++++ .../c_board/{ => app}/include/tusb_config.h | 0 firmware/c_board/app/src/app.cpp | 79 ++++++++++ firmware/c_board/{ => app}/src/app.hpp | 2 +- firmware/c_board/{ => app}/src/can/can.cpp | 4 +- firmware/c_board/{ => app}/src/can/can.hpp | 6 +- firmware/c_board/{ => app}/src/gpio/gpio.cpp | 4 +- firmware/c_board/{ => app}/src/led/led.hpp | 2 +- .../c_board/{ => app}/src/logger/logger.hpp | 2 +- .../{ => app}/src/spi/bmi088/accel.hpp | 10 +- .../c_board/{ => app}/src/spi/bmi088/base.hpp | 4 +- .../c_board/{ => app}/src/spi/bmi088/gyro.hpp | 10 +- firmware/c_board/{ => app}/src/spi/spi.cpp | 2 +- firmware/c_board/{ => app}/src/spi/spi.hpp | 2 +- .../c_board/{ => app}/src/timer/delay.cpp | 4 +- .../c_board/{ => app}/src/timer/delay.hpp | 0 firmware/c_board/{ => app}/src/uart/uart.cpp | 4 +- firmware/c_board/{ => app}/src/uart/uart.hpp | 4 +- firmware/c_board/{ => app}/src/usb/helper.hpp | 0 .../src/usb/interrupt_safe_buffer.hpp | 2 +- .../{ => app}/src/usb/usb_descriptors.cpp | 2 +- .../{ => app}/src/usb/usb_descriptors.hpp | 2 +- firmware/c_board/{ => app}/src/usb/vendor.cpp | 4 +- firmware/c_board/{ => app}/src/usb/vendor.hpp | 10 +- .../c_board/{ => app}/src/utility/assert.cpp | 2 +- .../{ => app}/src/utility/interrupt_lock.hpp | 4 +- .../c_board/{ => app}/src/utility/lazy.hpp | 2 +- .../{ => app}/src/utility/ring_buffer.hpp | 0 firmware/c_board/{ => bsp}/cubemx/.gitignore | 2 + .../c_board/{ => bsp}/cubemx/Core/Inc/can.h | 0 .../c_board/{ => bsp}/cubemx/Core/Inc/dma.h | 0 .../c_board/{ => bsp}/cubemx/Core/Inc/gpio.h | 0 .../c_board/{ => bsp}/cubemx/Core/Inc/main.h | 2 +- .../c_board/{ => bsp}/cubemx/Core/Inc/spi.h | 0 .../cubemx/Core/Inc/stm32f4xx_hal_conf.h | 0 .../{ => bsp}/cubemx/Core/Inc/stm32f4xx_it.h | 0 .../c_board/{ => bsp}/cubemx/Core/Inc/tim.h | 0 .../c_board/{ => bsp}/cubemx/Core/Inc/usart.h | 0 .../{ => bsp}/cubemx/Core/Inc/usb_otg.h | 0 .../c_board/{ => bsp}/cubemx/Core/Src/can.c | 0 .../c_board/{ => bsp}/cubemx/Core/Src/dma.c | 0 .../c_board/{ => bsp}/cubemx/Core/Src/gpio.c | 0 .../c_board/{ => bsp}/cubemx/Core/Src/main.c | 56 ------- .../c_board/{ => bsp}/cubemx/Core/Src/spi.c | 0 .../cubemx/Core/Src/stm32f4xx_hal_msp.c | 0 .../{ => bsp}/cubemx/Core/Src/stm32f4xx_it.c | 5 +- .../{ => bsp}/cubemx/Core/Src/syscalls.c | 0 .../{ => bsp}/cubemx/Core/Src/sysmem.c | 0 .../cubemx/Core/Src/system_stm32f4xx.c | 0 .../c_board/{ => bsp}/cubemx/Core/Src/tim.c | 0 .../c_board/{ => bsp}/cubemx/Core/Src/usart.c | 0 .../{ => bsp}/cubemx/Core/Src/usb_otg.c | 0 .../cubemx/STM32F407XX_APP.ld} | 0 .../cubemx/cmake/stm32cubemx/CMakeLists.txt | 49 +----- .../c_board/{ => bsp}/cubemx/rmcs_slave.ioc | 2 +- .../{ => bsp}/cubemx/startup_stm32f407xx.s | 1 - .../c_board/cmake/gcc-arm-none-eabi.cmake | 40 +++++ .../cubemx/cmake/gcc-arm-none-eabi.cmake | 43 ----- firmware/c_board/src/app.cpp | 55 ------- 64 files changed, 313 insertions(+), 378 deletions(-) create mode 100644 firmware/c_board/app/CMakeLists.txt rename firmware/c_board/{ => app}/include/tusb_config.h (100%) create mode 100644 firmware/c_board/app/src/app.cpp rename firmware/c_board/{ => app}/src/app.hpp (84%) rename firmware/c_board/{ => app}/src/can/can.cpp (84%) rename firmware/c_board/{ => app}/src/can/can.hpp (97%) rename firmware/c_board/{ => app}/src/gpio/gpio.cpp (78%) rename firmware/c_board/{ => app}/src/led/led.hpp (98%) rename firmware/c_board/{ => app}/src/logger/logger.hpp (92%) rename firmware/c_board/{ => app}/src/spi/bmi088/accel.hpp (94%) rename firmware/c_board/{ => app}/src/spi/bmi088/base.hpp (96%) rename firmware/c_board/{ => app}/src/spi/bmi088/gyro.hpp (93%) rename firmware/c_board/{ => app}/src/spi/spi.cpp (94%) rename firmware/c_board/{ => app}/src/spi/spi.hpp (99%) rename firmware/c_board/{ => app}/src/timer/delay.cpp (87%) rename firmware/c_board/{ => app}/src/timer/delay.hpp (100%) rename firmware/c_board/{ => app}/src/uart/uart.cpp (90%) rename firmware/c_board/{ => app}/src/uart/uart.hpp (97%) rename firmware/c_board/{ => app}/src/usb/helper.hpp (100%) rename firmware/c_board/{ => app}/src/usb/interrupt_safe_buffer.hpp (98%) rename firmware/c_board/{ => app}/src/usb/usb_descriptors.cpp (89%) rename firmware/c_board/{ => app}/src/usb/usb_descriptors.hpp (98%) rename firmware/c_board/{ => app}/src/usb/vendor.cpp (87%) rename firmware/c_board/{ => app}/src/usb/vendor.hpp (93%) rename firmware/c_board/{ => app}/src/utility/assert.cpp (94%) rename firmware/c_board/{ => app}/src/utility/interrupt_lock.hpp (86%) rename firmware/c_board/{ => app}/src/utility/lazy.hpp (97%) rename firmware/c_board/{ => app}/src/utility/ring_buffer.hpp (100%) rename firmware/c_board/{ => bsp}/cubemx/.gitignore (73%) rename firmware/c_board/{ => bsp}/cubemx/Core/Inc/can.h (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Inc/dma.h (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Inc/gpio.h (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Inc/main.h (95%) rename firmware/c_board/{ => bsp}/cubemx/Core/Inc/spi.h (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Inc/stm32f4xx_hal_conf.h (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Inc/stm32f4xx_it.h (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Inc/tim.h (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Inc/usart.h (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Inc/usb_otg.h (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/can.c (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/dma.c (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/gpio.c (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/main.c (76%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/spi.c (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/stm32f4xx_hal_msp.c (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/stm32f4xx_it.c (94%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/syscalls.c (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/sysmem.c (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/system_stm32f4xx.c (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/tim.c (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/usart.c (100%) rename firmware/c_board/{ => bsp}/cubemx/Core/Src/usb_otg.c (100%) rename firmware/c_board/{cubemx/STM32F407XX_FLASH.ld => bsp/cubemx/STM32F407XX_APP.ld} (100%) rename firmware/c_board/{ => bsp}/cubemx/cmake/stm32cubemx/CMakeLists.txt (67%) rename firmware/c_board/{ => bsp}/cubemx/rmcs_slave.ioc (99%) rename firmware/c_board/{ => bsp}/cubemx/startup_stm32f407xx.s (99%) create mode 100644 firmware/c_board/cmake/gcc-arm-none-eabi.cmake delete mode 100644 firmware/c_board/cubemx/cmake/gcc-arm-none-eabi.cmake delete mode 100644 firmware/c_board/src/app.cpp diff --git a/.scripts/lint-targets.yml b/.scripts/lint-targets.yml index 8501f8e..72dd41f 100644 --- a/.scripts/lint-targets.yml +++ b/.scripts/lint-targets.yml @@ -23,5 +23,5 @@ c_board: folders: - core/src - core/include - - firmware/c_board/src - - firmware/c_board/include + - firmware/c_board/app/src + - firmware/c_board/app/include diff --git a/.scripts/patch_cubemx b/.scripts/patch_cubemx index 23808e2..c9c321f 100755 --- a/.scripts/patch_cubemx +++ b/.scripts/patch_cubemx @@ -10,7 +10,9 @@ STALE_FILES = ( Path(".mxproject"), Path("CMakeLists.txt"), Path("CMakePresets.json"), + Path("STM32F407XX_FLASH.ld"), Path("cmake/starm-clang.cmake"), + Path("cmake/gcc-arm-none-eabi.cmake"), ) PATCH_RULES = ( @@ -28,14 +30,23 @@ PATCH_RULES = ( ), ( re.compile(r"/[^\s\"')]+/Drivers/CMSIS/Include(?=$|[\s\"')])"), - r"${LIBRMCS_CMSIS_CORE_INCLUDE_DIR}", + r"${LIBRMCS_CMSIS_CORE_ROOT}/Core/Include", ), ) ABSOLUTE_PATH_PATTERN = re.compile(r"(?:(?<=^)|(?<=[\s(]))/[^\s\"')]+") -PROJECT_LINK_LIBRARIES_PATTERN = re.compile( - r"target_link_libraries\(\$\{CMAKE_PROJECT_NAME\}\s+\$\{MX_LINK_LIBS\}\)" +DRIVERS_MIDDLEWARES_TO_EOF_PATTERN = re.compile( + r"^# Drivers Midllewares[\s\S]*\Z", + re.MULTILINE, ) +STM32CUBEMX_TAIL = """# Create stm32cubemx static library +add_library(stm32cubemx OBJECT) +target_sources(stm32cubemx PRIVATE ${STM32_Drivers_Src}) +target_sources(stm32cubemx PRIVATE ${MX_Application_Src}) +target_include_directories(stm32cubemx PUBLIC ${MX_Include_Dirs}) +target_compile_definitions(stm32cubemx PUBLIC ${MX_Defines_Syms}) +""" +STM32CUBEMX_TAIL_ANCHOR = "# Create stm32cubemx static library" def parse_args() -> argparse.Namespace: @@ -46,7 +57,7 @@ def parse_args() -> argparse.Namespace: "--cubemx-root", type=Path, default=None, - help="Path to CubeMX root (default: firmware/c_board/cubemx).", + help="Path to CubeMX root (default: firmware/c_board/bsp/cubemx).", ) return parser.parse_args() @@ -54,7 +65,7 @@ def parse_args() -> argparse.Namespace: def resolve_cubemx_root(cubemx_root_arg: Path | None) -> Path: if cubemx_root_arg is not None: return cubemx_root_arg.resolve() - return (Path(__file__).resolve().parent.parent / "firmware/c_board/cubemx").resolve() + return (Path(__file__).resolve().parent.parent / "firmware/c_board/bsp/cubemx").resolve() def remove_stale_files(cubemx_root: Path) -> None: @@ -73,10 +84,11 @@ def patch_stm32cubemx_cmake(cubemx_root: Path) -> None: for pattern, replacement in PATCH_RULES: patched = pattern.sub(replacement, patched) - patched = PROJECT_LINK_LIBRARIES_PATTERN.sub( - "target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${MX_LINK_LIBS})", - patched, - ) + line_ending = "\r\n" if "\r\n" in original else "\n" + custom_tail = STM32CUBEMX_TAIL.replace("\n", line_ending) + patched, replacements = DRIVERS_MIDDLEWARES_TO_EOF_PATTERN.subn(custom_tail, patched) + if replacements == 0 and STM32CUBEMX_TAIL_ANCHOR not in patched: + raise ValueError("Marker '# Drivers Midllewares' not found in stm32cubemx CMake file") unresolved = sorted(set(ABSOLUTE_PATH_PATTERN.findall(patched))) if unresolved: diff --git a/Dockerfile.build_firmware b/Dockerfile.build_firmware index e5db952..315b036 100644 --- a/Dockerfile.build_firmware +++ b/Dockerfile.build_firmware @@ -5,24 +5,25 @@ SHELL ["/bin/bash", "-c"] WORKDIR /src RUN --mount=type=bind,target=/src,source=.,readonly \ set -euo pipefail \ + && mkdir -p /output \ && LIBRMCS_PROJECT_VERSION="$(.scripts/generate_version)" \ - && for board in rmcs_board c_board; do \ - for config in debug release; do \ - build_dir="/output/build-${board}-${config}"; \ - cmake --preset "${config}" -S "firmware/${board}" -B "${build_dir}"; \ - cmake --build "${build_dir}"; \ - elf_path="${build_dir}/output/librmcs-firmware.elf"; \ - if [ ! -f "${elf_path}" ]; then \ - elf_path="${build_dir}/librmcs-firmware.elf"; \ - fi; \ - if [ ! -f "${elf_path}" ]; then \ - echo "Missing firmware ELF for ${board} (${config})" >&2; \ - exit 1; \ - fi; \ - mv "${elf_path}" "/output/librmcs-firmware-${board}-${LIBRMCS_PROJECT_VERSION}-${config}.elf"; \ - done; \ + && for board in rmcs_board; do \ + build_dir="/tmp/build-${board}"; \ + cmake --preset release -S "firmware/${board}" -B "${build_dir}"; \ + cmake --build "${build_dir}"; \ + elf_path="${build_dir}/output/librmcs-firmware.elf"; \ + if [ ! -f "${elf_path}" ]; then \ + elf_path="${build_dir}/librmcs-firmware.elf"; \ + fi; \ + cp "${elf_path}" "/output/librmcs-firmware-${board}-${LIBRMCS_PROJECT_VERSION}.elf"; \ done \ - && rm -rf /output/build-* + && for board in c_board; do \ + build_dir="/tmp/build-${board}"; \ + cmake --preset release -S "firmware/${board}" -B "${build_dir}"; \ + cmake --build "${build_dir}"; \ + cp "${build_dir}/app/${board}_app.elf" \ + "/output/librmcs-firmware-${board}-${LIBRMCS_PROJECT_VERSION}.elf"; \ + done FROM scratch AS output COPY --from=build /output/ / diff --git a/firmware/c_board/CMakeLists.txt b/firmware/c_board/CMakeLists.txt index a31ebb6..8c4c799 100644 --- a/firmware/c_board/CMakeLists.txt +++ b/firmware/c_board/CMakeLists.txt @@ -1,7 +1,6 @@ cmake_minimum_required(VERSION 3.28) set(CMAKE_CXX_SCAN_FOR_MODULES OFF) -# Language standards set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF) @@ -13,21 +12,14 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug") endif() -set(CMAKE_PROJECT_NAME librmcs-firmware) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -project(${CMAKE_PROJECT_NAME}) -message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") -enable_language(C CXX ASM) + +project(librmcs-firmware LANGUAGES C CXX ASM) set(LIBRMCS_PROJECT_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../..") cmake_path(ABSOLUTE_PATH LIBRMCS_PROJECT_ROOT NORMALIZE) -set(LIBRMCS_STM32_HAL_DRIVER_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/bsp/stm32f4xx-hal-driver") -set(LIBRMCS_STM32_DEVICE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/bsp/cmsis-device-f4") -set(LIBRMCS_CMSIS_CORE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/bsp/cmsis-core") -set(LIBRMCS_CMSIS_CORE_INCLUDE_DIR "${LIBRMCS_CMSIS_CORE_ROOT}/Core/Include") -set(LIBRMCS_TINYUSB_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/bsp/tinyusb") if(NOT DEFINED LIBRMCS_PROJECT_VERSION OR LIBRMCS_PROJECT_VERSION STREQUAL "") execute_process( @@ -40,56 +32,7 @@ if(NOT DEFINED LIBRMCS_PROJECT_VERSION OR LIBRMCS_PROJECT_VERSION STREQUAL "") endif() message(STATUS "Librmcs project version: ${LIBRMCS_PROJECT_VERSION}") -add_executable(${CMAKE_PROJECT_NAME}) - -# Add libstdc++ for C++ code. -list(APPEND TOOLCHAIN_LINK_LIBRARIES "stdc++") - -add_subdirectory(cubemx/cmake/stm32cubemx) - -add_library(tinyusb_device OBJECT) -target_sources(tinyusb_device PRIVATE - "${LIBRMCS_TINYUSB_ROOT}/src/tusb.c" - "${LIBRMCS_TINYUSB_ROOT}/src/common/tusb_fifo.c" - "${LIBRMCS_TINYUSB_ROOT}/src/device/usbd.c" - "${LIBRMCS_TINYUSB_ROOT}/src/device/usbd_control.c" - "${LIBRMCS_TINYUSB_ROOT}/src/class/vendor/vendor_device.c" - "${LIBRMCS_TINYUSB_ROOT}/src/portable/synopsys/dwc2/dwc2_common.c" - "${LIBRMCS_TINYUSB_ROOT}/src/portable/synopsys/dwc2/dcd_dwc2.c" -) -target_include_directories(tinyusb_device SYSTEM PUBLIC - "${LIBRMCS_TINYUSB_ROOT}/src" -) -target_include_directories(tinyusb_device PUBLIC - "${CMAKE_CURRENT_SOURCE_DIR}/include" -) -target_compile_definitions(tinyusb_device PUBLIC - CFG_TUSB_MCU=OPT_MCU_STM32F4 -) -target_link_libraries(tinyusb_device PUBLIC - stm32cubemx -) - -# Mark CubeMX/HAL headers as SYSTEM so they show up as `-isystem` in -# compile_commands.json (clang-tidy should not warn on third-party code). -if(TARGET stm32cubemx) - get_target_property(HAL_INCLUDE_DIRS stm32cubemx INTERFACE_INCLUDE_DIRECTORIES) - if(HAL_INCLUDE_DIRS AND NOT HAL_INCLUDE_DIRS STREQUAL "HAL_INCLUDE_DIRS-NOTFOUND") - set_property(TARGET stm32cubemx PROPERTY INTERFACE_INCLUDE_DIRECTORIES "") - target_include_directories(stm32cubemx SYSTEM INTERFACE ${HAL_INCLUDE_DIRS}) - endif() -endif() - -# --- Compile options --- -target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE - -fvisibility=hidden - $<$:-Wall -Wextra -Wpedantic> - $<$:-fno-unwind-tables> - $<$:-fno-asynchronous-unwind-tables> - $<$:-fno-use-cxa-atexit> -) -# --- HOST_DEBUGGER support --- option(HOST_DEBUGGER "Debugger runs outside Dev Container (Docker)" OFF) set(SOURCE_PATH_MAP "" CACHE PATH "(In container) Map container source path to a host-visible path for debugger") @@ -103,55 +46,49 @@ endif() if(NOT SOURCE_PATH_MAP STREQUAL "") set(SOURCE_PATH_MAP "${SOURCE_PATH_MAP}/") cmake_path(NORMAL_PATH SOURCE_PATH_MAP) - - target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE + add_compile_options( "-fdebug-prefix-map=${LIBRMCS_PROJECT_ROOT}=${SOURCE_PATH_MAP}" "-ffile-prefix-map=${LIBRMCS_PROJECT_ROOT}=${SOURCE_PATH_MAP}" ) endif() -# Debug build: append -Og (overrides toolchain's -O0, GCC takes last) -if(CMAKE_BUILD_TYPE STREQUAL "Debug") - target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE -Og) -endif() -# --- User application sources --- -file(GLOB_RECURSE APP_SOURCES CONFIGURE_DEPENDS src/*.cpp src/*.c) -file(GLOB_RECURSE CORE_SOURCES CONFIGURE_DEPENDS - "${LIBRMCS_PROJECT_ROOT}/core/src/*.cpp" - "${LIBRMCS_PROJECT_ROOT}/core/src/*.c" -) -file(GLOB SEGGER_C_SOURCES bsp/SEGGER/RTT/*.c) -file(GLOB SEGGER_ASM_SOURCES bsp/SEGGER/RTT/*.S) - -target_sources(${CMAKE_PROJECT_NAME} PRIVATE - ${APP_SOURCES} - ${CORE_SOURCES} - ${SEGGER_C_SOURCES} - ${SEGGER_ASM_SOURCES} -) - -# --- Include paths --- -target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE - ${LIBRMCS_PROJECT_ROOT} -) - -# SEGGER RTT is third-party code; treat its headers as system headers. -target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/bsp/SEGGER/RTT - ${CMAKE_CURRENT_SOURCE_DIR}/bsp/SEGGER/Config -) - -# --- Defines --- -target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE - LIBRMCS_PROJECT_VERSION_STRING="${LIBRMCS_PROJECT_VERSION}" - $<$:NDEBUG> -) - -# Remove wrong libob.a dependency (CubeMX toolchain quirk) -list(REMOVE_ITEM CMAKE_C_IMPLICIT_LINK_LIBRARIES ob) - -target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE - stm32cubemx - tinyusb_device -) +set(LIBRMCS_STM32_HAL_DRIVER_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/bsp/stm32f4xx-hal-driver") +set(LIBRMCS_STM32_DEVICE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/bsp/cmsis-device-f4") +set(LIBRMCS_CMSIS_CORE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/bsp/cmsis-core") +set(LIBRMCS_STM32_CUBEMX_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/bsp/cubemx") + +add_subdirectory("${LIBRMCS_STM32_CUBEMX_ROOT}/cmake/stm32cubemx" SYSTEM) + + +function(c_board_apply_target_options target linker_file) + target_include_directories(${target} PRIVATE + ${LIBRMCS_PROJECT_ROOT} + ) + + target_compile_options(${target} PRIVATE + -fvisibility=hidden + $<$:-Wall -Wextra -Wpedantic> + $<$:-fno-unwind-tables> + $<$:-fno-asynchronous-unwind-tables> + $<$:-fno-use-cxa-atexit> + ) + + target_compile_definitions(${target} PRIVATE + LIBRMCS_PROJECT_VERSION_STRING="${LIBRMCS_PROJECT_VERSION}" + $<$:NDEBUG> + ) + + target_link_libraries(${target} PRIVATE + stdc++ + m + stm32cubemx + ) + target_link_options(${target} PRIVATE + "-Wl,-Map=$/$.map" + "-T${LIBRMCS_STM32_CUBEMX_ROOT}/${linker_file}" + ) +endfunction() + + +add_subdirectory(app) diff --git a/firmware/c_board/CMakePresets.json b/firmware/c_board/CMakePresets.json index d09c5ca..ccb6d84 100644 --- a/firmware/c_board/CMakePresets.json +++ b/firmware/c_board/CMakePresets.json @@ -6,7 +6,7 @@ "hidden": true, "generator": "Ninja", "binaryDir": "${sourceDir}/build", - "toolchainFile": "${sourceDir}/cubemx/cmake/gcc-arm-none-eabi.cmake" + "toolchainFile": "${sourceDir}/cmake/gcc-arm-none-eabi.cmake" }, { "name": "debug", diff --git a/firmware/c_board/app/CMakeLists.txt b/firmware/c_board/app/CMakeLists.txt new file mode 100644 index 0000000..829f9b7 --- /dev/null +++ b/firmware/c_board/app/CMakeLists.txt @@ -0,0 +1,53 @@ +add_executable(c_board_app) + +set(C_BOARD_APP_TINYUSB_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../bsp/tinyusb") +cmake_path(ABSOLUTE_PATH C_BOARD_APP_TINYUSB_ROOT NORMALIZE) +set(C_BOARD_APP_TINYUSB_COMMON_SOURCES + "${C_BOARD_APP_TINYUSB_ROOT}/src/tusb.c" + "${C_BOARD_APP_TINYUSB_ROOT}/src/common/tusb_fifo.c" + "${C_BOARD_APP_TINYUSB_ROOT}/src/device/usbd.c" + "${C_BOARD_APP_TINYUSB_ROOT}/src/device/usbd_control.c" + "${C_BOARD_APP_TINYUSB_ROOT}/src/portable/synopsys/dwc2/dwc2_common.c" + "${C_BOARD_APP_TINYUSB_ROOT}/src/portable/synopsys/dwc2/dcd_dwc2.c" +) + +add_library(tinyusb_app OBJECT) +target_sources(tinyusb_app PRIVATE + ${C_BOARD_APP_TINYUSB_COMMON_SOURCES} + "${C_BOARD_APP_TINYUSB_ROOT}/src/class/vendor/vendor_device.c" +) +target_include_directories(tinyusb_app SYSTEM PUBLIC + "${C_BOARD_APP_TINYUSB_ROOT}/src" +) +target_include_directories(tinyusb_app PUBLIC + "${CMAKE_CURRENT_SOURCE_DIR}/include" +) +target_compile_definitions(tinyusb_app PUBLIC + CFG_TUSB_MCU=OPT_MCU_STM32F4 +) +target_link_libraries(tinyusb_app PUBLIC + stm32cubemx +) + +file(GLOB_RECURSE C_BOARD_APP_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c" + "${LIBRMCS_PROJECT_ROOT}/core/src/*.cpp" + "${LIBRMCS_PROJECT_ROOT}/core/src/*.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../bsp/SEGGER/RTT/*.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../bsp/SEGGER/RTT/*.S" +) +target_sources(c_board_app PRIVATE + ${C_BOARD_APP_SOURCES} +) + +target_include_directories(c_board_app SYSTEM PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/../bsp/SEGGER/RTT" + "${CMAKE_CURRENT_SOURCE_DIR}/../bsp/SEGGER/Config" +) + +target_link_libraries(c_board_app PRIVATE + tinyusb_app +) + +c_board_apply_target_options(c_board_app "STM32F407XX_APP.ld") diff --git a/firmware/c_board/include/tusb_config.h b/firmware/c_board/app/include/tusb_config.h similarity index 100% rename from firmware/c_board/include/tusb_config.h rename to firmware/c_board/app/include/tusb_config.h diff --git a/firmware/c_board/app/src/app.cpp b/firmware/c_board/app/src/app.cpp new file mode 100644 index 0000000..7277b05 --- /dev/null +++ b/firmware/c_board/app/src/app.cpp @@ -0,0 +1,79 @@ +#include "firmware/c_board/app/src/app.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "firmware/c_board/app/src/can/can.hpp" +#include "firmware/c_board/app/src/led/led.hpp" +#include "firmware/c_board/app/src/spi/bmi088/accel.hpp" +#include "firmware/c_board/app/src/spi/bmi088/gyro.hpp" +#include "firmware/c_board/app/src/spi/spi.hpp" +#include "firmware/c_board/app/src/uart/uart.hpp" +#include "firmware/c_board/app/src/usb/vendor.hpp" +#include "firmware/c_board/app/src/utility/interrupt_lock.hpp" + +int main() { librmcs::firmware::app.init().run(); } + +namespace librmcs::firmware { + +App::App() { + const utility::InterruptLockGuard guard; + + HAL_Init(); + SystemClock_Config(); + + CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; + DWT->CYCCNT = 0; + DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; + + MX_GPIO_Init(); + MX_DMA_Init(); + MX_SPI1_Init(); + MX_CAN1_Init(); + MX_CAN2_Init(); + MX_USART1_UART_Init(); + MX_USART3_UART_Init(); + MX_USART6_UART_Init(); + MX_TIM5_Init(); + MX_USB_OTG_FS_PCD_Init(); + + led::led.init(); + usb::vendor.init(); + can::can1.init(); + can::can2.init(); + uart::uart1.init(); + uart::uart2.init(); + uart::uart_dbus.init(); + spi::bmi088::accelerometer.init(); + spi::bmi088::gyroscope.init(); +} + +// Non-static to ensure instantiation +// NOLINTNEXTLINE(readability-convert-member-functions-to-static) +[[noreturn]] void App::run() { + while (true) { + tud_task(); + + usb::vendor->try_transmit(); + can::can1->try_transmit(); + usb::vendor->try_transmit(); + can::can2->try_transmit(); + usb::vendor->try_transmit(); + spi::spi1->update(); + usb::vendor->try_transmit(); + uart::uart1->try_transmit(); + usb::vendor->try_transmit(); + uart::uart2->try_transmit(); + usb::vendor->try_transmit(); + uart::uart_dbus->try_transmit(); + } +} + +} // namespace librmcs::firmware diff --git a/firmware/c_board/src/app.hpp b/firmware/c_board/app/src/app.hpp similarity index 84% rename from firmware/c_board/src/app.hpp rename to firmware/c_board/app/src/app.hpp index 3af2b99..6feaf37 100644 --- a/firmware/c_board/src/app.hpp +++ b/firmware/c_board/app/src/app.hpp @@ -1,7 +1,7 @@ #pragma once #include "core/src/utility/immovable.hpp" -#include "firmware/c_board/src/utility/lazy.hpp" +#include "firmware/c_board/app/src/utility/lazy.hpp" namespace librmcs::firmware { diff --git a/firmware/c_board/src/can/can.cpp b/firmware/c_board/app/src/can/can.cpp similarity index 84% rename from firmware/c_board/src/can/can.cpp rename to firmware/c_board/app/src/can/can.cpp index 41edbdf..a6ccb8c 100644 --- a/firmware/c_board/src/can/can.cpp +++ b/firmware/c_board/app/src/can/can.cpp @@ -1,9 +1,9 @@ -#include "firmware/c_board/src/can/can.hpp" +#include "firmware/c_board/app/src/can/can.hpp" #include #include "core/include/librmcs/data/datas.hpp" -#include "firmware/c_board/src/usb/helper.hpp" +#include "firmware/c_board/app/src/usb/helper.hpp" namespace librmcs::firmware::can { diff --git a/firmware/c_board/src/can/can.hpp b/firmware/c_board/app/src/can/can.hpp similarity index 97% rename from firmware/c_board/src/can/can.hpp rename to firmware/c_board/app/src/can/can.hpp index e384086..e12f4c7 100644 --- a/firmware/c_board/src/can/can.hpp +++ b/firmware/c_board/app/src/can/can.hpp @@ -15,9 +15,9 @@ #include "core/src/protocol/serializer.hpp" #include "core/src/utility/assert.hpp" #include "core/src/utility/immovable.hpp" -#include "firmware/c_board/src/led/led.hpp" -#include "firmware/c_board/src/utility/lazy.hpp" -#include "firmware/c_board/src/utility/ring_buffer.hpp" +#include "firmware/c_board/app/src/led/led.hpp" +#include "firmware/c_board/app/src/utility/lazy.hpp" +#include "firmware/c_board/app/src/utility/ring_buffer.hpp" namespace librmcs::firmware::can { diff --git a/firmware/c_board/src/gpio/gpio.cpp b/firmware/c_board/app/src/gpio/gpio.cpp similarity index 78% rename from firmware/c_board/src/gpio/gpio.cpp rename to firmware/c_board/app/src/gpio/gpio.cpp index 49fec5a..7b1434a 100644 --- a/firmware/c_board/src/gpio/gpio.cpp +++ b/firmware/c_board/app/src/gpio/gpio.cpp @@ -3,8 +3,8 @@ #include #include -#include "firmware/c_board/src/spi/bmi088/accel.hpp" -#include "firmware/c_board/src/spi/bmi088/gyro.hpp" +#include "firmware/c_board/app/src/spi/bmi088/accel.hpp" +#include "firmware/c_board/app/src/spi/bmi088/gyro.hpp" namespace librmcs::firmware::gpio { diff --git a/firmware/c_board/src/led/led.hpp b/firmware/c_board/app/src/led/led.hpp similarity index 98% rename from firmware/c_board/src/led/led.hpp rename to firmware/c_board/app/src/led/led.hpp index 2c81b4d..e988973 100644 --- a/firmware/c_board/src/led/led.hpp +++ b/firmware/c_board/app/src/led/led.hpp @@ -7,7 +7,7 @@ #include #include "core/src/utility/assert.hpp" -#include "firmware/c_board/src/utility/lazy.hpp" +#include "firmware/c_board/app/src/utility/lazy.hpp" namespace librmcs::firmware::led { diff --git a/firmware/c_board/src/logger/logger.hpp b/firmware/c_board/app/src/logger/logger.hpp similarity index 92% rename from firmware/c_board/src/logger/logger.hpp rename to firmware/c_board/app/src/logger/logger.hpp index b080a4e..e305072 100644 --- a/firmware/c_board/src/logger/logger.hpp +++ b/firmware/c_board/app/src/logger/logger.hpp @@ -4,7 +4,7 @@ #include -#include "firmware/c_board/src/utility/lazy.hpp" +#include "firmware/c_board/app/src/utility/lazy.hpp" namespace librmcs::firmware::logger { diff --git a/firmware/c_board/src/spi/bmi088/accel.hpp b/firmware/c_board/app/src/spi/bmi088/accel.hpp similarity index 94% rename from firmware/c_board/src/spi/bmi088/accel.hpp rename to firmware/c_board/app/src/spi/bmi088/accel.hpp index 3c0ba6d..8f23295 100644 --- a/firmware/c_board/src/spi/bmi088/accel.hpp +++ b/firmware/c_board/app/src/spi/bmi088/accel.hpp @@ -8,11 +8,11 @@ #include "core/src/protocol/serializer.hpp" #include "core/src/utility/assert.hpp" -#include "firmware/c_board/src/spi/bmi088/base.hpp" -#include "firmware/c_board/src/spi/spi.hpp" -#include "firmware/c_board/src/timer/delay.hpp" -#include "firmware/c_board/src/usb/vendor.hpp" -#include "firmware/c_board/src/utility/lazy.hpp" +#include "firmware/c_board/app/src/spi/bmi088/base.hpp" +#include "firmware/c_board/app/src/spi/spi.hpp" +#include "firmware/c_board/app/src/timer/delay.hpp" +#include "firmware/c_board/app/src/usb/vendor.hpp" +#include "firmware/c_board/app/src/utility/lazy.hpp" namespace librmcs::firmware::spi::bmi088 { diff --git a/firmware/c_board/src/spi/bmi088/base.hpp b/firmware/c_board/app/src/spi/bmi088/base.hpp similarity index 96% rename from firmware/c_board/src/spi/bmi088/base.hpp rename to firmware/c_board/app/src/spi/bmi088/base.hpp index b55a714..a066f01 100644 --- a/firmware/c_board/src/spi/bmi088/base.hpp +++ b/firmware/c_board/app/src/spi/bmi088/base.hpp @@ -10,8 +10,8 @@ #include #include "core/src/utility/assert.hpp" -#include "firmware/c_board/src/spi/spi.hpp" -#include "firmware/c_board/src/timer/delay.hpp" +#include "firmware/c_board/app/src/spi/spi.hpp" +#include "firmware/c_board/app/src/timer/delay.hpp" namespace librmcs::firmware::spi::bmi088 { diff --git a/firmware/c_board/src/spi/bmi088/gyro.hpp b/firmware/c_board/app/src/spi/bmi088/gyro.hpp similarity index 93% rename from firmware/c_board/src/spi/bmi088/gyro.hpp rename to firmware/c_board/app/src/spi/bmi088/gyro.hpp index 225008e..a398e01 100644 --- a/firmware/c_board/src/spi/bmi088/gyro.hpp +++ b/firmware/c_board/app/src/spi/bmi088/gyro.hpp @@ -8,11 +8,11 @@ #include "core/src/protocol/serializer.hpp" #include "core/src/utility/assert.hpp" -#include "firmware/c_board/src/spi/bmi088/base.hpp" -#include "firmware/c_board/src/spi/spi.hpp" -#include "firmware/c_board/src/timer/delay.hpp" -#include "firmware/c_board/src/usb/vendor.hpp" -#include "firmware/c_board/src/utility/lazy.hpp" +#include "firmware/c_board/app/src/spi/bmi088/base.hpp" +#include "firmware/c_board/app/src/spi/spi.hpp" +#include "firmware/c_board/app/src/timer/delay.hpp" +#include "firmware/c_board/app/src/usb/vendor.hpp" +#include "firmware/c_board/app/src/utility/lazy.hpp" namespace librmcs::firmware::spi::bmi088 { diff --git a/firmware/c_board/src/spi/spi.cpp b/firmware/c_board/app/src/spi/spi.cpp similarity index 94% rename from firmware/c_board/src/spi/spi.cpp rename to firmware/c_board/app/src/spi/spi.cpp index 25d0b2a..fd4ddf6 100644 --- a/firmware/c_board/src/spi/spi.cpp +++ b/firmware/c_board/app/src/spi/spi.cpp @@ -1,4 +1,4 @@ -#include "firmware/c_board/src/spi/spi.hpp" +#include "firmware/c_board/app/src/spi/spi.hpp" #include #include diff --git a/firmware/c_board/src/spi/spi.hpp b/firmware/c_board/app/src/spi/spi.hpp similarity index 99% rename from firmware/c_board/src/spi/spi.hpp rename to firmware/c_board/app/src/spi/spi.hpp index e2e69d1..af5e0b0 100644 --- a/firmware/c_board/src/spi/spi.hpp +++ b/firmware/c_board/app/src/spi/spi.hpp @@ -11,7 +11,7 @@ #include "core/src/utility/assert.hpp" #include "core/src/utility/immovable.hpp" -#include "firmware/c_board/src/utility/lazy.hpp" +#include "firmware/c_board/app/src/utility/lazy.hpp" namespace librmcs::firmware::spi { diff --git a/firmware/c_board/src/timer/delay.cpp b/firmware/c_board/app/src/timer/delay.cpp similarity index 87% rename from firmware/c_board/src/timer/delay.cpp rename to firmware/c_board/app/src/timer/delay.cpp index 343d91e..8bfc418 100644 --- a/firmware/c_board/src/timer/delay.cpp +++ b/firmware/c_board/app/src/timer/delay.cpp @@ -1,11 +1,11 @@ -#include "firmware/c_board/src/timer/delay.hpp" +#include "firmware/c_board/app/src/timer/delay.hpp" #include #include #include -#include "firmware/c_board/src/led/led.hpp" +#include "firmware/c_board/app/src/led/led.hpp" namespace librmcs::firmware::timer { diff --git a/firmware/c_board/src/timer/delay.hpp b/firmware/c_board/app/src/timer/delay.hpp similarity index 100% rename from firmware/c_board/src/timer/delay.hpp rename to firmware/c_board/app/src/timer/delay.hpp diff --git a/firmware/c_board/src/uart/uart.cpp b/firmware/c_board/app/src/uart/uart.cpp similarity index 90% rename from firmware/c_board/src/uart/uart.cpp rename to firmware/c_board/app/src/uart/uart.cpp index 21cc71a..5da4b57 100644 --- a/firmware/c_board/src/uart/uart.cpp +++ b/firmware/c_board/app/src/uart/uart.cpp @@ -1,11 +1,11 @@ -#include "firmware/c_board/src/uart/uart.hpp" +#include "firmware/c_board/app/src/uart/uart.hpp" #include #include #include "core/include/librmcs/data/datas.hpp" -#include "firmware/c_board/src/usb/helper.hpp" +#include "firmware/c_board/app/src/usb/helper.hpp" namespace librmcs::firmware::uart { diff --git a/firmware/c_board/src/uart/uart.hpp b/firmware/c_board/app/src/uart/uart.hpp similarity index 97% rename from firmware/c_board/src/uart/uart.hpp rename to firmware/c_board/app/src/uart/uart.hpp index 8bf16fc..7b1df3f 100644 --- a/firmware/c_board/src/uart/uart.hpp +++ b/firmware/c_board/app/src/uart/uart.hpp @@ -13,8 +13,8 @@ #include "core/include/librmcs/data/datas.hpp" #include "core/src/protocol/serializer.hpp" #include "core/src/utility/assert.hpp" -#include "firmware/c_board/src/led/led.hpp" -#include "firmware/c_board/src/utility/lazy.hpp" +#include "firmware/c_board/app/src/led/led.hpp" +#include "firmware/c_board/app/src/utility/lazy.hpp" namespace librmcs::firmware::uart { diff --git a/firmware/c_board/src/usb/helper.hpp b/firmware/c_board/app/src/usb/helper.hpp similarity index 100% rename from firmware/c_board/src/usb/helper.hpp rename to firmware/c_board/app/src/usb/helper.hpp diff --git a/firmware/c_board/src/usb/interrupt_safe_buffer.hpp b/firmware/c_board/app/src/usb/interrupt_safe_buffer.hpp similarity index 98% rename from firmware/c_board/src/usb/interrupt_safe_buffer.hpp rename to firmware/c_board/app/src/usb/interrupt_safe_buffer.hpp index 974bc10..d45ea36 100644 --- a/firmware/c_board/src/usb/interrupt_safe_buffer.hpp +++ b/firmware/c_board/app/src/usb/interrupt_safe_buffer.hpp @@ -10,7 +10,7 @@ #include "core/src/protocol/serializer.hpp" #include "core/src/utility/assert.hpp" #include "core/src/utility/immovable.hpp" -#include "firmware/c_board/src/led/led.hpp" +#include "firmware/c_board/app/src/led/led.hpp" namespace librmcs::firmware::usb { diff --git a/firmware/c_board/src/usb/usb_descriptors.cpp b/firmware/c_board/app/src/usb/usb_descriptors.cpp similarity index 89% rename from firmware/c_board/src/usb/usb_descriptors.cpp rename to firmware/c_board/app/src/usb/usb_descriptors.cpp index fe277b7..f68b192 100644 --- a/firmware/c_board/src/usb/usb_descriptors.cpp +++ b/firmware/c_board/app/src/usb/usb_descriptors.cpp @@ -1,4 +1,4 @@ -#include "firmware/c_board/src/usb/usb_descriptors.hpp" +#include "firmware/c_board/app/src/usb/usb_descriptors.hpp" #include diff --git a/firmware/c_board/src/usb/usb_descriptors.hpp b/firmware/c_board/app/src/usb/usb_descriptors.hpp similarity index 98% rename from firmware/c_board/src/usb/usb_descriptors.hpp rename to firmware/c_board/app/src/usb/usb_descriptors.hpp index f06bfa9..ae07078 100644 --- a/firmware/c_board/src/usb/usb_descriptors.hpp +++ b/firmware/c_board/app/src/usb/usb_descriptors.hpp @@ -15,7 +15,7 @@ #include #include "core/src/utility/assert.hpp" -#include "firmware/c_board/src/utility/lazy.hpp" +#include "firmware/c_board/app/src/utility/lazy.hpp" namespace librmcs::firmware::usb { diff --git a/firmware/c_board/src/usb/vendor.cpp b/firmware/c_board/app/src/usb/vendor.cpp similarity index 87% rename from firmware/c_board/src/usb/vendor.cpp rename to firmware/c_board/app/src/usb/vendor.cpp index e61acb1..1639a8f 100644 --- a/firmware/c_board/src/usb/vendor.cpp +++ b/firmware/c_board/app/src/usb/vendor.cpp @@ -1,10 +1,10 @@ -#include "firmware/c_board/src/usb/vendor.hpp" +#include "firmware/c_board/app/src/usb/vendor.hpp" #include #include #include "core/src/protocol/serializer.hpp" -#include "firmware/c_board/src/usb/helper.hpp" +#include "firmware/c_board/app/src/usb/helper.hpp" namespace librmcs::firmware::usb { diff --git a/firmware/c_board/src/usb/vendor.hpp b/firmware/c_board/app/src/usb/vendor.hpp similarity index 93% rename from firmware/c_board/src/usb/vendor.hpp rename to firmware/c_board/app/src/usb/vendor.hpp index 4016372..de05346 100644 --- a/firmware/c_board/src/usb/vendor.hpp +++ b/firmware/c_board/app/src/usb/vendor.hpp @@ -15,11 +15,11 @@ #include "core/src/protocol/serializer.hpp" #include "core/src/utility/assert.hpp" #include "core/src/utility/immovable.hpp" -#include "firmware/c_board/src/can/can.hpp" -#include "firmware/c_board/src/uart/uart.hpp" -#include "firmware/c_board/src/usb/interrupt_safe_buffer.hpp" -#include "firmware/c_board/src/usb/usb_descriptors.hpp" -#include "firmware/c_board/src/utility/lazy.hpp" +#include "firmware/c_board/app/src/can/can.hpp" +#include "firmware/c_board/app/src/uart/uart.hpp" +#include "firmware/c_board/app/src/usb/interrupt_safe_buffer.hpp" +#include "firmware/c_board/app/src/usb/usb_descriptors.hpp" +#include "firmware/c_board/app/src/utility/lazy.hpp" namespace librmcs::firmware::usb { diff --git a/firmware/c_board/src/utility/assert.cpp b/firmware/c_board/app/src/utility/assert.cpp similarity index 94% rename from firmware/c_board/src/utility/assert.cpp rename to firmware/c_board/app/src/utility/assert.cpp index ed3f7b0..24214e0 100644 --- a/firmware/c_board/src/utility/assert.cpp +++ b/firmware/c_board/app/src/utility/assert.cpp @@ -4,7 +4,7 @@ #include -#include "firmware/c_board/src/utility/interrupt_lock.hpp" +#include "firmware/c_board/app/src/utility/interrupt_lock.hpp" namespace librmcs::core::utility { diff --git a/firmware/c_board/src/utility/interrupt_lock.hpp b/firmware/c_board/app/src/utility/interrupt_lock.hpp similarity index 86% rename from firmware/c_board/src/utility/interrupt_lock.hpp rename to firmware/c_board/app/src/utility/interrupt_lock.hpp index 1dee8e6..0ef0f94 100644 --- a/firmware/c_board/src/utility/interrupt_lock.hpp +++ b/firmware/c_board/app/src/utility/interrupt_lock.hpp @@ -24,9 +24,7 @@ class InterruptMutex { } private: - // Interrupts are disabled during the initialization. - // See firmware/c_board/cubemx/startup_stm32f407xx.s:62. - static inline int lock_count_ = 1; + static inline int lock_count_ = 0; }; class InterruptLockGuard : private core::utility::Immovable { diff --git a/firmware/c_board/src/utility/lazy.hpp b/firmware/c_board/app/src/utility/lazy.hpp similarity index 97% rename from firmware/c_board/src/utility/lazy.hpp rename to firmware/c_board/app/src/utility/lazy.hpp index fdc00b6..ae54b20 100644 --- a/firmware/c_board/src/utility/lazy.hpp +++ b/firmware/c_board/app/src/utility/lazy.hpp @@ -7,7 +7,7 @@ #include #include "core/src/utility/assert.hpp" -#include "firmware/c_board/src/utility/interrupt_lock.hpp" +#include "firmware/c_board/app/src/utility/interrupt_lock.hpp" namespace librmcs::firmware::utility { diff --git a/firmware/c_board/src/utility/ring_buffer.hpp b/firmware/c_board/app/src/utility/ring_buffer.hpp similarity index 100% rename from firmware/c_board/src/utility/ring_buffer.hpp rename to firmware/c_board/app/src/utility/ring_buffer.hpp diff --git a/firmware/c_board/cubemx/.gitignore b/firmware/c_board/bsp/cubemx/.gitignore similarity index 73% rename from firmware/c_board/cubemx/.gitignore rename to firmware/c_board/bsp/cubemx/.gitignore index d45a067..ac35e2a 100644 --- a/firmware/c_board/cubemx/.gitignore +++ b/firmware/c_board/bsp/cubemx/.gitignore @@ -2,4 +2,6 @@ /.mxproject /CMakeLists.txt /CMakePresets.json +/STM32F407XX_FLASH.ld cmake/starm-clang.cmake +cmake/gcc-arm-none-eabi.cmake diff --git a/firmware/c_board/cubemx/Core/Inc/can.h b/firmware/c_board/bsp/cubemx/Core/Inc/can.h similarity index 100% rename from firmware/c_board/cubemx/Core/Inc/can.h rename to firmware/c_board/bsp/cubemx/Core/Inc/can.h diff --git a/firmware/c_board/cubemx/Core/Inc/dma.h b/firmware/c_board/bsp/cubemx/Core/Inc/dma.h similarity index 100% rename from firmware/c_board/cubemx/Core/Inc/dma.h rename to firmware/c_board/bsp/cubemx/Core/Inc/dma.h diff --git a/firmware/c_board/cubemx/Core/Inc/gpio.h b/firmware/c_board/bsp/cubemx/Core/Inc/gpio.h similarity index 100% rename from firmware/c_board/cubemx/Core/Inc/gpio.h rename to firmware/c_board/bsp/cubemx/Core/Inc/gpio.h diff --git a/firmware/c_board/cubemx/Core/Inc/main.h b/firmware/c_board/bsp/cubemx/Core/Inc/main.h similarity index 95% rename from firmware/c_board/cubemx/Core/Inc/main.h rename to firmware/c_board/bsp/cubemx/Core/Inc/main.h index 3616f0a..218d4a1 100644 --- a/firmware/c_board/cubemx/Core/Inc/main.h +++ b/firmware/c_board/bsp/cubemx/Core/Inc/main.h @@ -258,7 +258,7 @@ extern "C" { void Error_Handler(void); /* USER CODE BEGIN EFP */ -void AppEntry(void); +void SystemClock_Config(void); /* USER CODE END EFP */ /* Private defines -----------------------------------------------------------*/ diff --git a/firmware/c_board/cubemx/Core/Inc/spi.h b/firmware/c_board/bsp/cubemx/Core/Inc/spi.h similarity index 100% rename from firmware/c_board/cubemx/Core/Inc/spi.h rename to firmware/c_board/bsp/cubemx/Core/Inc/spi.h diff --git a/firmware/c_board/cubemx/Core/Inc/stm32f4xx_hal_conf.h b/firmware/c_board/bsp/cubemx/Core/Inc/stm32f4xx_hal_conf.h similarity index 100% rename from firmware/c_board/cubemx/Core/Inc/stm32f4xx_hal_conf.h rename to firmware/c_board/bsp/cubemx/Core/Inc/stm32f4xx_hal_conf.h diff --git a/firmware/c_board/cubemx/Core/Inc/stm32f4xx_it.h b/firmware/c_board/bsp/cubemx/Core/Inc/stm32f4xx_it.h similarity index 100% rename from firmware/c_board/cubemx/Core/Inc/stm32f4xx_it.h rename to firmware/c_board/bsp/cubemx/Core/Inc/stm32f4xx_it.h diff --git a/firmware/c_board/cubemx/Core/Inc/tim.h b/firmware/c_board/bsp/cubemx/Core/Inc/tim.h similarity index 100% rename from firmware/c_board/cubemx/Core/Inc/tim.h rename to firmware/c_board/bsp/cubemx/Core/Inc/tim.h diff --git a/firmware/c_board/cubemx/Core/Inc/usart.h b/firmware/c_board/bsp/cubemx/Core/Inc/usart.h similarity index 100% rename from firmware/c_board/cubemx/Core/Inc/usart.h rename to firmware/c_board/bsp/cubemx/Core/Inc/usart.h diff --git a/firmware/c_board/cubemx/Core/Inc/usb_otg.h b/firmware/c_board/bsp/cubemx/Core/Inc/usb_otg.h similarity index 100% rename from firmware/c_board/cubemx/Core/Inc/usb_otg.h rename to firmware/c_board/bsp/cubemx/Core/Inc/usb_otg.h diff --git a/firmware/c_board/cubemx/Core/Src/can.c b/firmware/c_board/bsp/cubemx/Core/Src/can.c similarity index 100% rename from firmware/c_board/cubemx/Core/Src/can.c rename to firmware/c_board/bsp/cubemx/Core/Src/can.c diff --git a/firmware/c_board/cubemx/Core/Src/dma.c b/firmware/c_board/bsp/cubemx/Core/Src/dma.c similarity index 100% rename from firmware/c_board/cubemx/Core/Src/dma.c rename to firmware/c_board/bsp/cubemx/Core/Src/dma.c diff --git a/firmware/c_board/cubemx/Core/Src/gpio.c b/firmware/c_board/bsp/cubemx/Core/Src/gpio.c similarity index 100% rename from firmware/c_board/cubemx/Core/Src/gpio.c rename to firmware/c_board/bsp/cubemx/Core/Src/gpio.c diff --git a/firmware/c_board/cubemx/Core/Src/main.c b/firmware/c_board/bsp/cubemx/Core/Src/main.c similarity index 76% rename from firmware/c_board/cubemx/Core/Src/main.c rename to firmware/c_board/bsp/cubemx/Core/Src/main.c index 057d6f3..0e2cd0b 100644 --- a/firmware/c_board/cubemx/Core/Src/main.c +++ b/firmware/c_board/bsp/cubemx/Core/Src/main.c @@ -67,62 +67,6 @@ void SystemClock_Config(void); * @brief The application entry point. * @retval int */ -int main(void) -{ - - /* USER CODE BEGIN 1 */ - - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - - // Enable DWT (Data Watchpoint and Trace) for delay - CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; - DWT->CYCCNT = 0; - DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; - - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_DMA_Init(); - MX_SPI1_Init(); - MX_CAN1_Init(); - MX_CAN2_Init(); - MX_USART1_UART_Init(); - MX_USART3_UART_Init(); - MX_USART6_UART_Init(); - MX_TIM5_Init(); - MX_USB_OTG_FS_PCD_Init(); - /* USER CODE BEGIN 2 */ - - AppEntry(); - __builtin_trap(); - - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} /** * @brief System Clock Configuration diff --git a/firmware/c_board/cubemx/Core/Src/spi.c b/firmware/c_board/bsp/cubemx/Core/Src/spi.c similarity index 100% rename from firmware/c_board/cubemx/Core/Src/spi.c rename to firmware/c_board/bsp/cubemx/Core/Src/spi.c diff --git a/firmware/c_board/cubemx/Core/Src/stm32f4xx_hal_msp.c b/firmware/c_board/bsp/cubemx/Core/Src/stm32f4xx_hal_msp.c similarity index 100% rename from firmware/c_board/cubemx/Core/Src/stm32f4xx_hal_msp.c rename to firmware/c_board/bsp/cubemx/Core/Src/stm32f4xx_hal_msp.c diff --git a/firmware/c_board/cubemx/Core/Src/stm32f4xx_it.c b/firmware/c_board/bsp/cubemx/Core/Src/stm32f4xx_it.c similarity index 94% rename from firmware/c_board/cubemx/Core/Src/stm32f4xx_it.c rename to firmware/c_board/bsp/cubemx/Core/Src/stm32f4xx_it.c index c369aef..5046ed7 100644 --- a/firmware/c_board/cubemx/Core/Src/stm32f4xx_it.c +++ b/firmware/c_board/bsp/cubemx/Core/Src/stm32f4xx_it.c @@ -22,7 +22,10 @@ #include "stm32f4xx_it.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ -#include +#include +#include + +void tusb_int_handler(uint8_t rhport, bool in_isr); /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ diff --git a/firmware/c_board/cubemx/Core/Src/syscalls.c b/firmware/c_board/bsp/cubemx/Core/Src/syscalls.c similarity index 100% rename from firmware/c_board/cubemx/Core/Src/syscalls.c rename to firmware/c_board/bsp/cubemx/Core/Src/syscalls.c diff --git a/firmware/c_board/cubemx/Core/Src/sysmem.c b/firmware/c_board/bsp/cubemx/Core/Src/sysmem.c similarity index 100% rename from firmware/c_board/cubemx/Core/Src/sysmem.c rename to firmware/c_board/bsp/cubemx/Core/Src/sysmem.c diff --git a/firmware/c_board/cubemx/Core/Src/system_stm32f4xx.c b/firmware/c_board/bsp/cubemx/Core/Src/system_stm32f4xx.c similarity index 100% rename from firmware/c_board/cubemx/Core/Src/system_stm32f4xx.c rename to firmware/c_board/bsp/cubemx/Core/Src/system_stm32f4xx.c diff --git a/firmware/c_board/cubemx/Core/Src/tim.c b/firmware/c_board/bsp/cubemx/Core/Src/tim.c similarity index 100% rename from firmware/c_board/cubemx/Core/Src/tim.c rename to firmware/c_board/bsp/cubemx/Core/Src/tim.c diff --git a/firmware/c_board/cubemx/Core/Src/usart.c b/firmware/c_board/bsp/cubemx/Core/Src/usart.c similarity index 100% rename from firmware/c_board/cubemx/Core/Src/usart.c rename to firmware/c_board/bsp/cubemx/Core/Src/usart.c diff --git a/firmware/c_board/cubemx/Core/Src/usb_otg.c b/firmware/c_board/bsp/cubemx/Core/Src/usb_otg.c similarity index 100% rename from firmware/c_board/cubemx/Core/Src/usb_otg.c rename to firmware/c_board/bsp/cubemx/Core/Src/usb_otg.c diff --git a/firmware/c_board/cubemx/STM32F407XX_FLASH.ld b/firmware/c_board/bsp/cubemx/STM32F407XX_APP.ld similarity index 100% rename from firmware/c_board/cubemx/STM32F407XX_FLASH.ld rename to firmware/c_board/bsp/cubemx/STM32F407XX_APP.ld diff --git a/firmware/c_board/cubemx/cmake/stm32cubemx/CMakeLists.txt b/firmware/c_board/bsp/cubemx/cmake/stm32cubemx/CMakeLists.txt similarity index 67% rename from firmware/c_board/cubemx/cmake/stm32cubemx/CMakeLists.txt rename to firmware/c_board/bsp/cubemx/cmake/stm32cubemx/CMakeLists.txt index 9788cc1..2851212 100644 --- a/firmware/c_board/cubemx/cmake/stm32cubemx/CMakeLists.txt +++ b/firmware/c_board/bsp/cubemx/cmake/stm32cubemx/CMakeLists.txt @@ -14,7 +14,7 @@ set(MX_Include_Dirs ${LIBRMCS_STM32_HAL_DRIVER_ROOT}/Inc ${LIBRMCS_STM32_HAL_DRIVER_ROOT}/Inc/Legacy ${LIBRMCS_STM32_DEVICE_ROOT}/Include - ${LIBRMCS_CMSIS_CORE_INCLUDE_DIR} + ${LIBRMCS_CMSIS_CORE_ROOT}/Core/Include ) # STM32CubeMX generated application sources @@ -60,44 +60,9 @@ set(STM32_Drivers_Src ${LIBRMCS_STM32_HAL_DRIVER_ROOT}/Src/stm32f4xx_ll_usb.c ) -# Drivers Midllewares - - - -# Link directories setup -set(MX_LINK_DIRS - -) -# Project static libraries -set(MX_LINK_LIBS - STM32_Drivers - ${TOOLCHAIN_LINK_LIBRARIES} - -) -# Interface library for includes and symbols -add_library(stm32cubemx INTERFACE) -target_include_directories(stm32cubemx INTERFACE ${MX_Include_Dirs}) -target_compile_definitions(stm32cubemx INTERFACE ${MX_Defines_Syms}) - -# Create STM32_Drivers static library -add_library(STM32_Drivers OBJECT) -target_sources(STM32_Drivers PRIVATE ${STM32_Drivers_Src}) -target_link_libraries(STM32_Drivers PUBLIC stm32cubemx) - - -# Add STM32CubeMX generated application sources to the project -target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${MX_Application_Src}) - -# Link directories setup -target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ${MX_LINK_DIRS}) - -# Add libraries to the project -target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${MX_LINK_LIBS}) - -# Add the map file to the list of files to be removed with 'clean' target -set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES ADDITIONAL_CLEAN_FILES ${CMAKE_PROJECT_NAME}.map) - -# Validate that STM32CubeMX code is compatible with C standard -if((CMAKE_C_STANDARD EQUAL 90) OR (CMAKE_C_STANDARD EQUAL 99)) - message(ERROR "Generated code requires C11 or higher") -endif() +# Create stm32cubemx static library +add_library(stm32cubemx OBJECT) +target_sources(stm32cubemx PRIVATE ${STM32_Drivers_Src}) +target_sources(stm32cubemx PRIVATE ${MX_Application_Src}) +target_include_directories(stm32cubemx PUBLIC ${MX_Include_Dirs}) +target_compile_definitions(stm32cubemx PUBLIC ${MX_Defines_Syms}) diff --git a/firmware/c_board/cubemx/rmcs_slave.ioc b/firmware/c_board/bsp/cubemx/rmcs_slave.ioc similarity index 99% rename from firmware/c_board/cubemx/rmcs_slave.ioc rename to firmware/c_board/bsp/cubemx/rmcs_slave.ioc index b0fd388..a9709d4 100644 --- a/firmware/c_board/cubemx/rmcs_slave.ioc +++ b/firmware/c_board/bsp/cubemx/rmcs_slave.ioc @@ -244,7 +244,7 @@ ProjectManager.KeepUserCode=true ProjectManager.LastFirmware=true ProjectManager.LibraryCopy=2 ProjectManager.MainLocation=Core/Src -ProjectManager.NoMain=false +ProjectManager.NoMain=true ProjectManager.PreviousToolchain= ProjectManager.ProjectBuild=false ProjectManager.ProjectFileName=rmcs_slave.ioc diff --git a/firmware/c_board/cubemx/startup_stm32f407xx.s b/firmware/c_board/bsp/cubemx/startup_stm32f407xx.s similarity index 99% rename from firmware/c_board/cubemx/startup_stm32f407xx.s rename to firmware/c_board/bsp/cubemx/startup_stm32f407xx.s index c209bf3..cc5f27e 100644 --- a/firmware/c_board/cubemx/startup_stm32f407xx.s +++ b/firmware/c_board/bsp/cubemx/startup_stm32f407xx.s @@ -59,7 +59,6 @@ defined in linker script */ .type Reset_Handler, %function Reset_Handler: ldr sp, =_estack /* set stack pointer */ - cpsid i /* disable interrupt */ /* Call the clock system initialization function.*/ bl SystemInit diff --git a/firmware/c_board/cmake/gcc-arm-none-eabi.cmake b/firmware/c_board/cmake/gcc-arm-none-eabi.cmake new file mode 100644 index 0000000..ec1b5c6 --- /dev/null +++ b/firmware/c_board/cmake/gcc-arm-none-eabi.cmake @@ -0,0 +1,40 @@ +# Cross-compilation toolchain (arm-none-eabi) +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR arm) + +set(CMAKE_C_COMPILER_ID GNU) +set(CMAKE_CXX_COMPILER_ID GNU) + +set(TOOLCHAIN_PREFIX arm-none-eabi-) + +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) +set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++) +set(CMAKE_LINKER ${TOOLCHAIN_PREFIX}g++) +set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy) +set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size) + +set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf") +set(CMAKE_EXECUTABLE_SUFFIX_C ".elf") +set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf") + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +# MCU specific flags +set(TARGET_FLAGS "-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard") + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TARGET_FLAGS}") +set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp -MMD -MP") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fdata-sections -ffunction-sections") + +set(CMAKE_C_FLAGS_DEBUG "-Og -g3") +set(CMAKE_C_FLAGS_RELEASE "-O3 -g0") +set(CMAKE_CXX_FLAGS_DEBUG "-Og -g3") +set(CMAKE_CXX_FLAGS_RELEASE "-O3 -g0") + +set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -fno-rtti -fno-exceptions -fno-threadsafe-statics") + +set(CMAKE_EXE_LINKER_FLAGS "${TARGET_FLAGS}") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --specs=nano.specs") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--print-memory-usage") diff --git a/firmware/c_board/cubemx/cmake/gcc-arm-none-eabi.cmake b/firmware/c_board/cubemx/cmake/gcc-arm-none-eabi.cmake deleted file mode 100644 index 5ba7c85..0000000 --- a/firmware/c_board/cubemx/cmake/gcc-arm-none-eabi.cmake +++ /dev/null @@ -1,43 +0,0 @@ -set(CMAKE_SYSTEM_NAME Generic) -set(CMAKE_SYSTEM_PROCESSOR arm) - -set(CMAKE_C_COMPILER_ID GNU) -set(CMAKE_CXX_COMPILER_ID GNU) - -# Some default GCC settings -# arm-none-eabi- must be part of path environment -set(TOOLCHAIN_PREFIX arm-none-eabi-) - -set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) -set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) -set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++) -set(CMAKE_LINKER ${TOOLCHAIN_PREFIX}g++) -set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy) -set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size) - -set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf") -set(CMAKE_EXECUTABLE_SUFFIX_C ".elf") -set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf") - -set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) - -# MCU specific flags -set(TARGET_FLAGS "-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard") - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TARGET_FLAGS}") -set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp -MMD -MP") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fdata-sections -ffunction-sections") - -set(CMAKE_C_FLAGS_DEBUG "-O0 -g3") -set(CMAKE_C_FLAGS_RELEASE "-Os -g0") -set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3") -set(CMAKE_CXX_FLAGS_RELEASE "-Os -g0") - -set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -fno-rtti -fno-exceptions -fno-threadsafe-statics") - -set(CMAKE_EXE_LINKER_FLAGS "${TARGET_FLAGS}") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -T \"${CMAKE_CURRENT_LIST_DIR}/../STM32F407XX_FLASH.ld\"") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --specs=nano.specs") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Map=${CMAKE_PROJECT_NAME}.map -Wl,--gc-sections") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--print-memory-usage") -set(TOOLCHAIN_LINK_LIBRARIES "m") diff --git a/firmware/c_board/src/app.cpp b/firmware/c_board/src/app.cpp deleted file mode 100644 index 9a89af4..0000000 --- a/firmware/c_board/src/app.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include "firmware/c_board/src/app.hpp" - -#include -#include - -#include "firmware/c_board/src/can/can.hpp" -#include "firmware/c_board/src/led/led.hpp" -#include "firmware/c_board/src/spi/bmi088/accel.hpp" -#include "firmware/c_board/src/spi/bmi088/gyro.hpp" -#include "firmware/c_board/src/spi/spi.hpp" -#include "firmware/c_board/src/uart/uart.hpp" -#include "firmware/c_board/src/usb/vendor.hpp" -#include "firmware/c_board/src/utility/interrupt_lock.hpp" - -extern "C" { -void AppEntry() { librmcs::firmware::app.init().run(); } -} - -namespace librmcs::firmware { - -App::App() { - led::led.init(); - usb::vendor.init(); - can::can1.init(); - can::can2.init(); - uart::uart1.init(); - uart::uart2.init(); - uart::uart_dbus.init(); - spi::bmi088::accelerometer.init(); - spi::bmi088::gyroscope.init(); - utility::InterruptMutex::unlock(); -} - -// Non-static to ensure instantiation -// NOLINTNEXTLINE(readability-convert-member-functions-to-static) -[[noreturn]] void App::run() { - while (true) { - tud_task(); - - usb::vendor->try_transmit(); - can::can1->try_transmit(); - usb::vendor->try_transmit(); - can::can2->try_transmit(); - usb::vendor->try_transmit(); - spi::spi1->update(); - usb::vendor->try_transmit(); - uart::uart1->try_transmit(); - usb::vendor->try_transmit(); - uart::uart2->try_transmit(); - usb::vendor->try_transmit(); - uart::uart_dbus->try_transmit(); - } -} - -} // namespace librmcs::firmware From 02faa5635756db57a450b5b73732ac1288acdbf1 Mon Sep 17 00:00:00 2001 From: qzhhhi Date: Mon, 2 Mar 2026 18:11:11 +0000 Subject: [PATCH 2/3] fix --- .scripts/patch_cubemx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scripts/patch_cubemx b/.scripts/patch_cubemx index c9c321f..d06d6e2 100755 --- a/.scripts/patch_cubemx +++ b/.scripts/patch_cubemx @@ -39,7 +39,7 @@ DRIVERS_MIDDLEWARES_TO_EOF_PATTERN = re.compile( r"^# Drivers Midllewares[\s\S]*\Z", re.MULTILINE, ) -STM32CUBEMX_TAIL = """# Create stm32cubemx static library +STM32CUBEMX_TAIL = """# Create stm32cubemx object library add_library(stm32cubemx OBJECT) target_sources(stm32cubemx PRIVATE ${STM32_Drivers_Src}) target_sources(stm32cubemx PRIVATE ${MX_Application_Src}) From a8a2f25ca3f131bd321d6ade80040860cbb715ae Mon Sep 17 00:00:00 2001 From: qzhhhi Date: Mon, 2 Mar 2026 18:20:02 +0000 Subject: [PATCH 3/3] fix2 --- .scripts/patch_cubemx | 2 +- firmware/c_board/bsp/cubemx/cmake/stm32cubemx/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.scripts/patch_cubemx b/.scripts/patch_cubemx index d06d6e2..b331e3a 100755 --- a/.scripts/patch_cubemx +++ b/.scripts/patch_cubemx @@ -46,7 +46,7 @@ target_sources(stm32cubemx PRIVATE ${MX_Application_Src}) target_include_directories(stm32cubemx PUBLIC ${MX_Include_Dirs}) target_compile_definitions(stm32cubemx PUBLIC ${MX_Defines_Syms}) """ -STM32CUBEMX_TAIL_ANCHOR = "# Create stm32cubemx static library" +STM32CUBEMX_TAIL_ANCHOR = "# Create stm32cubemx object library" def parse_args() -> argparse.Namespace: diff --git a/firmware/c_board/bsp/cubemx/cmake/stm32cubemx/CMakeLists.txt b/firmware/c_board/bsp/cubemx/cmake/stm32cubemx/CMakeLists.txt index 2851212..88575a9 100644 --- a/firmware/c_board/bsp/cubemx/cmake/stm32cubemx/CMakeLists.txt +++ b/firmware/c_board/bsp/cubemx/cmake/stm32cubemx/CMakeLists.txt @@ -60,7 +60,7 @@ set(STM32_Drivers_Src ${LIBRMCS_STM32_HAL_DRIVER_ROOT}/Src/stm32f4xx_ll_usb.c ) -# Create stm32cubemx static library +# Create stm32cubemx object library add_library(stm32cubemx OBJECT) target_sources(stm32cubemx PRIVATE ${STM32_Drivers_Src}) target_sources(stm32cubemx PRIVATE ${MX_Application_Src})