feat(stm32): FreeRTOS board config — first bootable G474RE binary#418
Draft
nhuvaoanh123 wants to merge 7 commits into
Draft
feat(stm32): FreeRTOS board config — first bootable G474RE binary#418nhuvaoanh123 wants to merge 7 commits into
nhuvaoanh123 wants to merge 7 commits into
Conversation
nhuvaoanh123
added a commit
to nhuvaoanh123/openbsw
that referenced
this pull request
Mar 30, 2026
Add ThreadX RTOS support as an alternative to FreeRTOS for STM32 platforms: - ThreadX Cortex-M4 GNU port (context save/restore, scheduler, timer ISR) - tx_port.h and tx_user.h configuration for G474RE - ThreadX core configuration module for NUCLEO-G474RE - Updated platform CMakeLists for dual-RTOS selection Build with: `cmake --preset nucleo-g474re-threadx-gcc` The main/ directory (PR 6) already contains ThreadX-specific hooks (tx_initialize_low_level.S, tx_execution_initialize.c, osHooks/threadx/). Milestone: `cmake --preset nucleo-g474re-threadx-gcc` configures successfully. Depends on eclipse-openbsw#418 (PR 6: FreeRTOS board config). PR 7 of 10.
This was referenced Mar 30, 2026
c421f80 to
cd8d7c7
Compare
nhuvaoanh123
pushed a commit
to nhuvaoanh123/openbsw
that referenced
this pull request
Mar 30, 2026
Add ThreadX RTOS support as an alternative to FreeRTOS for STM32 platforms: - ThreadX Cortex-M4 GNU port (context save/restore, scheduler, timer ISR) - tx_port.h and tx_user.h configuration for G474RE - ThreadX core configuration module for NUCLEO-G474RE - Updated platform CMakeLists for dual-RTOS selection Build with: `cmake --preset nucleo-g474re-threadx-gcc` The main/ directory (PR 6) already contains ThreadX-specific hooks (tx_initialize_low_level.S, tx_execution_initialize.c, osHooks/threadx/). Milestone: `cmake --preset nucleo-g474re-threadx-gcc` configures successfully. Depends on eclipse-openbsw#418 (PR 6: FreeRTOS board config). PR 7 of 10.
…ker scripts Add the STM32 platform skeleton for OpenBSW, supporting both STM32F4 (bxCAN) and STM32G4 (FDCAN) families via chip selection cmake variables. Contents: - ARM CMSIS-Core headers (Cortex-M4) with Apache-2.0 license - ST device headers for STM32F413ZH and STM32G474RE - GNU AS startup files and linker scripts for both chips - Chip-selection cmake modules (stm32f413zh.cmake, stm32g474re.cmake) - CMakePresets for NUCLEO-G474RE and NUCLEO-F413ZH (FreeRTOS + ThreadX) - Platform integration in root CMakeLists.txt Milestone: `cmake --preset nucleo-g474re-freertos-gcc` configures successfully. This is PR 1 of 10 — subsequent PRs add BSP drivers, RTOS config, and UDS services.
cd8d7c7 to
e8eec9d
Compare
nhuvaoanh123
added a commit
to nhuvaoanh123/openbsw
that referenced
this pull request
Mar 30, 2026
Add ThreadX RTOS support as an alternative to FreeRTOS for STM32 platforms: - ThreadX Cortex-M4 GNU port (context save/restore, scheduler, timer ISR) - tx_port.h and tx_user.h configuration for G474RE - ThreadX core configuration module for NUCLEO-G474RE - Updated platform CMakeLists for dual-RTOS selection Build with: `cmake --preset nucleo-g474re-threadx-gcc` The main/ directory (PR 6) already contains ThreadX-specific hooks (tx_initialize_low_level.S, tx_execution_initialize.c, osHooks/threadx/). Milestone: `cmake --preset nucleo-g474re-threadx-gcc` configures successfully. Depends on eclipse-openbsw#418 (PR 6: FreeRTOS board config). PR 7 of 10.
e8eec9d to
2fc5895
Compare
nhuvaoanh123
added a commit
to nhuvaoanh123/openbsw
that referenced
this pull request
Mar 31, 2026
Add ThreadX RTOS support as an alternative to FreeRTOS for STM32 platforms: - ThreadX Cortex-M4 GNU port (context save/restore, scheduler, timer ISR) - tx_port.h and tx_user.h configuration for G474RE - ThreadX core configuration module for NUCLEO-G474RE - Updated platform CMakeLists for dual-RTOS selection Build with: `cmake --preset nucleo-g474re-threadx-gcc` The main/ directory (PR 6) already contains ThreadX-specific hooks (tx_initialize_low_level.S, tx_execution_initialize.c, osHooks/threadx/). Milestone: `cmake --preset nucleo-g474re-threadx-gcc` configures successfully. Depends on eclipse-openbsw#418 (PR 6: FreeRTOS board config). PR 7 of 10.
- Change .fpu softvfp → fpv4-sp-d16 in both startup files to match the toolchain's -mfloat-abi=hard -mfpu=fpv4-sp-d16 flags. The mismatch produced conflicting ELF float ABI attributes. - Add FPU CP10/CP11 enable block to F413 startup (was only in G474). Both are Cortex-M4F; ThreadX needs early FPU access since it does not enable the FPU in its port (unlike FreeRTOS port.c). - Add OPENBSW_PLATFORM=stm32 branch to root CMakeLists.txt so the tests-stm32-debug preset no longer hits FATAL_ERROR at configure. Add platforms/stm32/unitTest/ stub (mirrors s32k1xx pattern). - Add ST BSD-3-Clause LICENSE file under 3rdparty/st/ for vendor header compliance — the headers reference a LICENSE file that was missing. - Remove dead bspMcu/linker/ scripts and STM32_LINKER_SCRIPT cmake variables. The real linker scripts live in each board's referenceApp/platforms/*/main/linkerscript/application.ld, wired via PROP_LINKER_SCRIPT on the startUp INTERFACE library. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add the complete low-level BSP layer for STM32F4/G4 platforms: - bspClock: Clock configuration for F4 (100 MHz HSE) and G4 (170 MHz PLL) - bspUart: USART2 driver with DMA-ready ring buffer, VCP console output - bspIo: GPIO driver with pin configuration (AF, push-pull, speed) - bspTimer: SysTick-based system timer for RTOS tick and delays - bspInterruptsImpl: NVIC interrupt enable/disable (FreeRTOS + ThreadX variants) - bspAdc: ADC driver for analog inputs - bspEepromDriver: Flash-based EEPROM emulation - etlImpl: ETL clock and print backends for STM32 - bspConfiguration: NUCLEO-G474RE board pin mappings (UART, LED, etc.) Milestone: cmake configures with all BSP modules. Boots to UART console with PR 6 (RTOS). Depends on PR 1 (MCU foundation). PR 2 of 10.
Add CAN peripheral drivers for both STM32 CAN controller variants: - BxCanDevice: Basic Extended CAN controller (STM32F4 family) - FdCanDevice: Flexible Data-rate CAN controller (STM32G4 family) - BxCanTransceiver: OpenBSW CAN transceiver adapter for bxCAN - Unit test infrastructure (unitTest CMakeLists, mock device headers) The bspCan module uses compile-time chip selection (CAN_TYPE=BXCAN|FDCAN) to build only the relevant driver. Tests use mock register headers for host-based verification. Milestone: `cmake --preset tests-stm32-debug` configures. Tests run in CI Docker. Depends on eclipse-openbsw#414 (PR 2: BSP drivers). PR 3 of 10.
Add the FdCanTransceiver module — OpenBSW ICanTransceiver adapter for STM32G4 FDCAN peripheral. Mirrors the bxCAN transceiver from PR 3 but supports FD frames (up to 64-byte payload) and extended filter banks. - FdCanTransceiver: ICanTransceiver implementation for FDCAN - Unit tests with mock FdCanDevice headers for host verification - Updated bsp/CMakeLists.txt for CAN_TYPE-based transceiver selection Milestone: `cmake --preset tests-stm32-debug` configures with both transceivers. Depends on eclipse-openbsw#415 (PR 3: bxCAN/FDCAN drivers). PR 4 of 10.
Add fault handling and watchdog safety infrastructure: - hardFaultHandler: ARM Cortex-M4 HardFault handler in assembly — captures register state (R0-R12, LR, PC, PSR) for post-mortem analysis - safeBspMcuWatchdog: IWDG (Independent Watchdog) driver with configurable timeout, kick interface, and reset-reason detection - SafetyManager: Board-level safety lifecycle integration for G474RE Milestone: cmake configures with safety modules. Watchdog activates with PR 6 (RTOS). Depends on eclipse-openbsw#416 (PR 4: FDCAN transceiver). PR 5 of 10.
Add FreeRTOS Cortex-M4 port and NUCLEO-G474RE board configuration, producing the first bootable reference app binary for STM32. - FreeRTOS CM4 SysTick port (port.c, portmacro.h) for Cortex-M4F - FreeRTOS core configuration (FreeRTOSConfig.h for G474RE) - Board main: startup, clock init, UART console, task creation - StaticBsp: lifecycle hooks for BSP init/shutdown - CAN system integration (ISR handlers, CanSystem task) - Application linker script for G474RE (512 KB Flash, 128 KB SRAM) - Full Options.cmake with platform feature flags OpenBSW now supports dual-RTOS design: FreeRTOS (this PR) and ThreadX (PR 7), selectable at configure time via BUILD_TARGET_RTOS. Milestone: `cmake --build --preset nucleo-g474re-freertos-gcc` produces bootable ELF. Reference app boots on NUCLEO-G474RE with UART console output. Depends on eclipse-openbsw#417 (PR 5: safety). PR 6 of 10.
2fc5895 to
5f537d3
Compare
nhuvaoanh123
added a commit
to nhuvaoanh123/openbsw
that referenced
this pull request
Mar 31, 2026
Add ThreadX RTOS support as an alternative to FreeRTOS for STM32 platforms: - ThreadX Cortex-M4 GNU port (context save/restore, scheduler, timer ISR) - tx_port.h and tx_user.h configuration for G474RE - ThreadX core configuration module for NUCLEO-G474RE - Updated platform CMakeLists for dual-RTOS selection Build with: `cmake --preset nucleo-g474re-threadx-gcc` The main/ directory (PR 6) already contains ThreadX-specific hooks (tx_initialize_low_level.S, tx_execution_initialize.c, osHooks/threadx/). Milestone: `cmake --preset nucleo-g474re-threadx-gcc` configures successfully. Depends on eclipse-openbsw#418 (PR 6: FreeRTOS board config). PR 7 of 10.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose of this PR
Description
Sixth PR in the STM32 platform series. This is the key integration PR — it produces the first bootable reference app binary for NUCLEO-G474RE.
What's included
port.c,portmacro.h)FreeRTOSConfig.htuned for G474RE (170 MHz, 128 KB SRAM)main.cpp): clock init → UART console → FreeRTOS scheduler startDual-RTOS architecture
OpenBSW supports both FreeRTOS and ThreadX on STM32, selectable at configure time via
BUILD_TARGET_RTOS. This PR adds FreeRTOS; PR 7 adds ThreadX. Themain/directory contains RTOS-specific hooks in separate subdirectories (osHooks/freertos/,osHooks/threadx/).Milestone
cmake --build --preset nucleo-g474re-freertos-gccproduces a bootable ELF (6.5 MB with debug info). Reference app boots on NUCLEO-G474RE with UART console output at 115200 baud.Depends on #417 (PR 5: safety). PR 6 of 10.
Related Issues
Part of STM32 platform port — see #413 for series overview.
Breaking Changes
Test Plan
CC=arm-none-eabi-gcc CXX=arm-none-eabi-g++ cmake --preset nucleo-g474re-freertos-gcc && cmake --build --preset nucleo-g474re-freertos-gccRegression Tests
Have tests been added/updated? [ ] Yes [x] No — this PR enables on-target testing; HIL tests in PR 10