MTIMER_ERR_ABI from mtimer_init_sized() indicates the caller and library were built with different mtimer_t layouts or resolved MTIMER_MAX_TIMERS values.
Values below 1 or above 255 intentionally fail compilation through mtimer_config.h.
Use the explicit status-plus-output query functions. mtimer_tick(NULL) now returns MTIMER_ERR_NULL, not 0.
Only MTIMER_ONESHOT and MTIMER_PERIODIC are accepted.
Non-NULL names must be unique per manager.
Destroy invalidates the slot immediately. A later create may reuse the same numeric ID for a different timer.
mtimer_create() only allocates and configures a timer. Call mtimer_start() separately.
Pause is valid only from MTIMER_RUNNING. Resume is valid only from MTIMER_PAUSED.
mtimer_create() and mtimer_set_interval() reject 0.
Paused timers stay paused and adopt the full new interval as remaining time, regardless of whether the new interval is smaller or larger.
Same-manager mtimer_tick() and mutating APIs return MTIMER_ERR_BUSY while a callback from that manager is active.
Unsupported. It may leave the active-tick guard set and the manager unusable.
Unsupported while timers are active. Only natural unsigned wraparound is supported.
One full uint32_t cycle is the maximum distinguishable elapsed time window.
Pass the install prefix through CMAKE_PREFIX_PATH or microtimer_DIR.
The Makefiles honor caller-provided CC, CPPFLAGS, CFLAGS, and LDFLAGS. Inject platform flags there instead of editing the files.
Compile-fail wording may vary slightly across GCC, Clang, and MSVC, but the tests target the intended project diagnostic class.
Some CI jobs are conditional on tool availability. Missing tools should be reported as skipped, not as passed.