Skip to content

Configure

oveRTOS uses Kconfig for build configuration, processed by the ove CLI. All configuration is stored in .config in the project root.

Interactive Configuration

make menuconfig

This opens the Kconfig TUI. Use arrow keys to navigate, space to toggle options, and ? to read help text. Save with S and exit with Q.

The top-level menu is organised into:

  • RTOS Selection — choose the backend
  • Hardware Target — choose the board
  • Toolchain — ARM cross-compiler source and settings
  • oveRTOS Modules — enable or disable individual API modules
  • Debug Options — log level, debug builds, stack canaries

Selecting the RTOS Backend

Under RTOS Selection > RTOS backend, choose one of:

Option Backend
FreeRTOS FreeRTOS via STM32CubeF7 SDK
Zephyr RTOS Zephyr Project via West
Apache NuttX Apache NuttX RTOS
POSIX/SDL2 (native host) pthreads + SDL2, no cross-compilation

Enabling and Disabling Modules

Under oveRTOS Modules, each subsystem can be toggled independently. Two modules are always enabled (thread management and application lifecycle). The remaining modules are optional:

Module Config symbol Default
Synchronization primitives OVE_SYNC enabled
Audio streaming OVE_AUDIO enabled
Filesystem OVE_FS enabled
Console I/O OVE_CONSOLE enabled
Logging OVE_LOG enabled
Time and delays OVE_TIME enabled
Board descriptor OVE_BOARD enabled
GPIO OVE_GPIO enabled
LED control OVE_LED enabled
BSP compatibility shim OVE_BSP enabled
LVGL UI framework OVE_LVGL enabled
Message queues OVE_QUEUE enabled
Software timers OVE_TIMER enabled
Event groups OVE_EVENTGROUP enabled
Interactive shell OVE_SHELL enabled
Non-volatile storage OVE_NVS enabled
Watchdog timer OVE_WATCHDOG enabled
Work queues OVE_WORKQUEUE disabled
Stream I/O OVE_STREAM disabled

Zero-Heap Mode

At the bottom of oveRTOS Modules, enable Zero-heap build (OVE_ZERO_HEAP) to switch _create()/_destroy() from heap-backed functions to GCC statement-expression macros that auto-generate per-call-site static storage. Application code using _create()/_destroy() continues to work unchanged. Use _init()/_deinit() when you need explicit storage control (arrays, loops, structs). In zero-heap mode, size parameters must be compile-time constants and each _create() call site produces one static object.

Backend-Specific Submenus

After selecting a backend, a dedicated menu appears with source method and kernel configuration options. For advanced NuttX or Zephyr kernel tuning, use the dedicated targets:

make nuttx-menuconfig   # NuttX native kernel config TUI
make zephyr-menuconfig  # Zephyr native kernel config TUI

Loading a Defconfig

Defconfigs are pre-made configurations for specific board and RTOS combinations. Load one to get a working starting point:

make <name>_defconfig

For example:

make qemu_freertos_example_c_defconfig
make stm32f746_zephyr_example_cpp_defconfig
make host_posix_example_rust_defconfig

Available Defconfigs

host (POSIX native)

Defconfig Description
host_posix_example_c_defconfig C example, POSIX backend
host_posix_example_c_zeroheap_defconfig C example, POSIX, zero-heap
host_posix_example_cpp_defconfig C++ example, POSIX backend
host_posix_example_cpp_zeroheap_defconfig C++ example, POSIX, zero-heap
host_posix_example_rust_defconfig Rust example, POSIX backend
host_posix_example_rust_zeroheap_defconfig Rust example, POSIX, zero-heap
host_posix_example_zig_defconfig Zig example, POSIX backend
host_posix_example_zig_zeroheap_defconfig Zig example, POSIX, zero-heap
host_posix_benchmark_defconfig C Benchmark, POSIX backend
host_posix_benchmark_zeroheap_defconfig C Benchmark, POSIX, zero-heap
host_posix_benchmark_cpp_defconfig C++ Benchmark, POSIX backend
host_posix_benchmark_rust_defconfig Rust Benchmark, POSIX backend
host_posix_benchmark_zig_defconfig Zig Benchmark, POSIX backend

qemu (QEMU MPS2-AN500 Cortex-M7)

Defconfig Description
qemu_freertos_example_c_defconfig C example, FreeRTOS
qemu_freertos_example_c_zeroheap_defconfig C example, FreeRTOS, zero-heap
qemu_freertos_example_cpp_defconfig C++ example, FreeRTOS
qemu_freertos_example_cpp_zeroheap_defconfig C++ example, FreeRTOS, zero-heap
qemu_freertos_example_rust_defconfig Rust example, FreeRTOS
qemu_freertos_example_rust_zeroheap_defconfig Rust example, FreeRTOS, zero-heap
qemu_freertos_example_zig_defconfig Zig example, FreeRTOS
qemu_freertos_example_zig_zeroheap_defconfig Zig example, FreeRTOS, zero-heap
qemu_freertos_benchmark_defconfig Benchmark, FreeRTOS
qemu_freertos_benchmark_zeroheap_defconfig Benchmark, FreeRTOS, zero-heap
qemu_nuttx_example_c_defconfig C example, NuttX
qemu_nuttx_example_c_zeroheap_defconfig C example, NuttX, zero-heap
qemu_nuttx_example_cpp_defconfig C++ example, NuttX
qemu_nuttx_example_cpp_zeroheap_defconfig C++ example, NuttX, zero-heap
qemu_nuttx_example_rust_defconfig Rust example, NuttX
qemu_nuttx_example_rust_zeroheap_defconfig Rust example, NuttX, zero-heap
qemu_nuttx_example_zig_defconfig Zig example, NuttX
qemu_nuttx_example_zig_zeroheap_defconfig Zig example, NuttX, zero-heap
qemu_nuttx_benchmark_defconfig Benchmark, NuttX
qemu_nuttx_benchmark_zeroheap_defconfig Benchmark, NuttX, zero-heap
qemu_zephyr_example_c_defconfig C example, Zephyr
qemu_zephyr_example_c_zeroheap_defconfig C example, Zephyr, zero-heap
qemu_zephyr_example_cpp_defconfig C++ example, Zephyr
qemu_zephyr_example_cpp_zeroheap_defconfig C++ example, Zephyr, zero-heap
qemu_zephyr_example_rust_defconfig Rust example, Zephyr
qemu_zephyr_example_rust_zeroheap_defconfig Rust example, Zephyr, zero-heap
qemu_zephyr_example_zig_defconfig Zig example, Zephyr
qemu_zephyr_example_zig_zeroheap_defconfig Zig example, Zephyr, zero-heap
qemu_zephyr_benchmark_defconfig Benchmark, Zephyr
qemu_zephyr_benchmark_zeroheap_defconfig Benchmark, Zephyr, zero-heap

stm32f746 (STM32F746G-Discovery)

Defconfig Description
stm32f746_freertos_example_c_defconfig C example, FreeRTOS
stm32f746_freertos_example_c_zeroheap_defconfig C example, FreeRTOS, zero-heap
stm32f746_freertos_example_cpp_defconfig C++ example, FreeRTOS
stm32f746_freertos_example_cpp_zeroheap_defconfig C++ example, FreeRTOS, zero-heap
stm32f746_freertos_example_rust_defconfig Rust example, FreeRTOS
stm32f746_freertos_example_rust_zeroheap_defconfig Rust example, FreeRTOS, zero-heap
stm32f746_freertos_example_zig_defconfig Zig example, FreeRTOS
stm32f746_freertos_example_zig_zeroheap_defconfig Zig example, FreeRTOS, zero-heap
stm32f746_freertos_benchmark_defconfig Benchmark, FreeRTOS
stm32f746_freertos_benchmark_zeroheap_defconfig Benchmark, FreeRTOS, zero-heap
stm32f746_nuttx_example_c_defconfig C example, NuttX
stm32f746_nuttx_example_c_zeroheap_defconfig C example, NuttX, zero-heap
stm32f746_nuttx_example_cpp_defconfig C++ example, NuttX
stm32f746_nuttx_example_cpp_zeroheap_defconfig C++ example, NuttX, zero-heap
stm32f746_nuttx_example_rust_defconfig Rust example, NuttX
stm32f746_nuttx_example_rust_zeroheap_defconfig Rust example, NuttX, zero-heap
stm32f746_nuttx_example_zig_defconfig Zig example, NuttX
stm32f746_nuttx_example_zig_zeroheap_defconfig Zig example, NuttX, zero-heap
stm32f746_nuttx_benchmark_defconfig Benchmark, NuttX
stm32f746_zephyr_example_c_defconfig C example, Zephyr
stm32f746_zephyr_example_c_zeroheap_defconfig C example, Zephyr, zero-heap
stm32f746_zephyr_example_cpp_defconfig C++ example, Zephyr
stm32f746_zephyr_example_cpp_zeroheap_defconfig C++ example, Zephyr, zero-heap
stm32f746_zephyr_example_rust_defconfig Rust example, Zephyr
stm32f746_zephyr_example_rust_zeroheap_defconfig Rust example, Zephyr, zero-heap
stm32f746_zephyr_example_zig_defconfig Zig example, Zephyr
stm32f746_zephyr_example_zig_zeroheap_defconfig Zig example, Zephyr, zero-heap
stm32f746_zephyr_benchmark_defconfig Benchmark, Zephyr
stm32f746_zephyr_benchmark_zeroheap_defconfig Benchmark, Zephyr, zero-heap

Run make help to see the list at any time.

Saving a Modified Configuration

After customising settings in menuconfig, save the minimal diff as a new defconfig:

make savedefconfig