Tracked divergences on the k_timer API, post-#17:
k_timer_remaining_get() return type: Boreas int64_t, upstream uint32_t ms. Consumer code doing uint32_t r = k_timer_remaining_get(...) silently truncates today. Widening is the safer divergence but should either match upstream or carry an explicit @note.
k_timer_status_sync() busy-polls: a sem-based implementation was attempted and reverted — the embedded stack-local struct k_sem blocking on K_FOREVER corrupts FreeRTOS scheduler state on ESP32-S3 (see the k_sem corruption issue). Doxygen documents the busy-poll. Re-attempt once the k_sem issue is fixed.
- Callback context visibility: with
CONFIG_K_TIMER_DISPATCH_ISR=y (default) expiry runs in ISR context matching upstream; the task-context fallback path deserves a louder callout in the zkernel README for consumers porting Zephyr code.
Tracked divergences on the k_timer API, post-#17:
k_timer_remaining_get()return type: Boreasint64_t, upstreamuint32_tms. Consumer code doinguint32_t r = k_timer_remaining_get(...)silently truncates today. Widening is the safer divergence but should either match upstream or carry an explicit@note.k_timer_status_sync()busy-polls: a sem-based implementation was attempted and reverted — the embedded stack-localstruct k_semblocking onK_FOREVERcorrupts FreeRTOS scheduler state on ESP32-S3 (see the k_sem corruption issue). Doxygen documents the busy-poll. Re-attempt once the k_sem issue is fixed.CONFIG_K_TIMER_DISPATCH_ISR=y(default) expiry runs in ISR context matching upstream; the task-context fallback path deserves a louder callout in the zkernel README for consumers porting Zephyr code.