Implementing a Monotonic
timer for scheduling
The framework is flexible because it can use any timer which has compare-match and optionally
supporting overflow interrupts for scheduling.
The single requirement to make a timer usable with RTIC is implementing the
rtic_monotonic::Monotonic
trait.
Implementing time counting that supports large time spans is generally difficult, in RTIC 0.5 implementing time handling was a common problem. Moreover, the relation between time and timers used for scheduling was difficult to understand.
For RTIC 1.0 we instead assume the user has a time library, e.g. fugit
or embedded_time
,
as the basis for all time-based operations when implementing Monotonic
.
These libraries make it much easier to correctly implement the Monotonic
trait, allowing the use of
almost any timer in the system for scheduling.
The trait documents the requirements for each method,
and for inspiration here is a list of Monotonic
implementations:
STM32F411 series
, implemented for the 32-bit timersNordic nRF52 series Timer
, implemented for the 32-bit timersNordic nRF52 series RTC
, implemented for the RTCsSystick based
, runs at a fixed interrupt (tick) rate - with some overhead but simple and with support for large time spansDWT and Systick based
, a more efficient (tickless) implementation - requires bothSysTick
andDWT
, supports both high resolution and large time spans
If you know of more implementations feel free to add them to this list.