|
oveRTOS C API
Embedded RTOS framework — build system, configuration, and portable C API
|
Convenience header that pulls in the complete oveRTOS public API.
Convenience header that pulls in the complete oveRTOS public API.
Including this single header gives access to every oveRTOS subsystem:
| Header | Subsystem |
|---|---|
| ove/types.h | Common types and error codes |
| ove/irq.h | Critical sections and ISR-context detection |
| ove/log.h | Logging |
| ove/thread.h | Thread management |
| ove/sync.h | Mutexes, semaphores, events, condvars |
| ove/audio.h | Audio graph engine |
| ove/audio_device.h | Audio transport / device nodes |
| ove/fs.h | Filesystem abstraction |
| ove/queue.h | Message queues |
| ove/timer.h | Software timers |
| ove/console.h | Console / serial output |
| ove/time.h | Monotonic clock and delays |
| ove/board.h | Board initialisation and identification |
| ove/gpio.h | General-purpose I/O |
| ove/led.h | On-board LED control |
| ove/bsp.h | Legacy BSP compatibility shim |
| ove/lvgl_internal.h | LVGL display integration |
| ove/eventgroup.h | Event groups (multi-bit flags) |
| ove/workqueue.h | Deferred work queues |
| ove/stream.h | Stream buffers |
| ove/watchdog.h | Hardware watchdog timer |
| ove/nvs.h | Non-volatile storage |
| ove/shell.h | Interactive shell |
| ove/app.h | Application lifecycle hooks |
| ove/infer.h | ML inference (TFLM) |
| ove/net.h | TCP/UDP sockets, DNS, network interfaces |
| ove/net_tls.h | TLS sessions over sockets |
| ove/net_http.h | HTTP client |
| ove/net_mqtt.h | MQTT client |
| ove/net_sntp.h | SNTP time synchronization |
| ove/net_httpd.h | HTTP server |
| ove/uart.h | UART serial bus driver |
| ove/spi.h | SPI bus master driver |
| ove/i2c.h | I2C bus master driver |
| ove/i2s.h | I2S / SAI audio bus driver |
| ove/pm.h | Power management framework |
Application code that prefers fine-grained includes may include individual subsystem headers directly instead.
The C API IS the substrate every higher-level binding (Rust / Zig / C++) wraps over. The discipline ported back from the higher bindings — and codified in this header — is:
<ove/types.h> carries a _Static_assert block validating every OVE_ERR_* numeric value. Mirrors _assert_codes_match (Rust), the comptime block (Zig), and the static_assert block (C++). A future re-numbering of an error code fails to compile in every TU that includes this header.scripts/zero_overhead_audit.py gate enforces that no ove_*_{ops,dispatch,vtable,jumptable,funcs,callbacks} data symbol is emitted in any final ELF — every backend selection happens at link time, not via a runtime jump table.CONFIG_OVE_ZERO_HEAP), <ove/heap_assert.h> redeclares the libc allocators with __attribute__((error(...))), turning accidental malloc / calloc / realloc reachability into compile-time failure.make c-analyze runs GCC's -fanalyzer over the C source tree (Miri analog for C); filtered to ove paths so third-party noise is suppressed.make test-stub-sanitize runs the C stub tests under UBSan + ASan; mirrors the cpp-sanitize and rust-miri CI jobs for binding parity.OVE_CROSS_LTO=ON (declared in cmake/OveCommon.cmake) wires -flto=thin on the C and C++ sides, -Clinker-plugin-lto on Rust, and -flto on Zig. Off by default — see Gale's "three quiet barriers" note in the option comment for when to flip it.Use these properties when reasoning about binary size, fault surface, and what guarantees flow through to higher-level bindings.