Changelog¶
What changed in the library, newest first.
All notable changes to hf-utils-rtos-wrap. The library has no releases yet; changes are listed by the date they
reached main.
Unreleased¶
- Integration docs state the HardFOC timing assumption: FreeRTOS at 1 kHz or faster for millisecond-precise delays and timeouts, and rounding to at least one tick for a non-zero value otherwise.
os_convert_msec_to_delay_ticks()returns at least one tick for a non-zero millisecond value (it still rounds down otherwise, and 0 ms is still 0 ticks), on every backend. Soos_delay_msec()and every timeout that goes through it (OsQueue,OsEventFlags,FlagsSaver,SeqlockSnapshot,Mutex,MutexGuard,PeriodicTimer) never turns a 1 ms delay into a zero-tick wait on a slow tick: at 100 Hz, 1 to 19 ms is one tick.os_convert_hz_to_delay_ticks()likewise gives at least one tick for a frequency above the tick rate, and 0 for 0 Hz instead of dividing by zero. Host tests check both at the shim's 100 Hz tick.- Documentation moved to the HardFOC MkDocs site, with the code on the pages compiled in CI.
- FreeRTOS:
OsQueuecreates its queue withxQueueCreateStatic()in the object's inline storage, withNitems ofsizeof(T)rounded up to words. It usedxQueueCreate()on the kernel heap with the storage size in bytes as the length. Items are copied through a word buffer, so aTwhose size is not a multiple of 4 is no longer read or written past its end on any backend. On ThreadX the queue storage is now sized forNitems. os_event_group_get()returns success only when the wait condition was met, soOsEventFlags::Wait()returns false on a timeout (FreeRTOS always reported success). No backend clears bits unless the newOS_EVENT_CLEARoption is given: FreeRTOS no longer clears them on anOS_ANDwait, and CMSIS-RTOS2 no longer clears them on every wait.FlagsSaver::WaitForChange()andSeqlockSnapshot::WaitForChange()consume the change signal and convert the timeout from milliseconds to ticks.- FreeRTOS: millisecond conversions use
configTICK_RATE_HZinstead of assuming 1 kHz, in 64-bit arithmetic. - The C++ classes build with
HF_RTOS_CMSIS(HF_RTOS_CMSIS_TICK_RATE_HZsets the tick rate, default 1000). - Host tests: the FreeRTOS backend on a kernel shim, and a CMSIS-RTOS2 compile check (
tests/host/run.sh).
2026-11-01¶
- The no-RTOS backend takes time and delays from the integrator with
HF_RTOS_NONE_EXTERNAL_CLOCK(hf_os_none_clock_us(),hf_os_none_delay_us()), andBaseThread.cppbuilds next toBaseThreadHostStub.cppwithout an RTOS.
2026-10-31¶
RtosMutexandRtosSharedMutexbodies moved intosrc/RtosMutex.cpp.
2026-08 and 2026-09¶
- CMSIS-RTOS2 backend (
os/os_cmsis.h) and yield helpers; clean under-Wpedantic -Werror. - ThreadX backend (
os/os_threadx.h) and tick conversion for the no-RTOS backend. - FreeRTOS included through
OsAbstraction.hinstead of a fixed include prefix.
2026-05¶
- Modernised API:
uint32_tmillisecond timeouts,WaitMode, eagerOsQueueandOsEventFlags. - Generic templates
hf::FlagsSaver,hf::SeqlockSnapshot,hf::ErrorHistory. - Host-only
BaseThreadstub forHF_RTOS_NONEbuilds.
2026-04¶
BaseThreadcore-pinning overload,os_thread_create_pinnedandos_get_current_core_id.PeriodicTimer::Destroy()safe when the timer was never created.