## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# 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 timers
- `Nordic nRF52 series Timer`, implemented for the 32-bit timers
- `Nordic nRF52 series RTC`, implemented for the RTCs
- `Systick based`, runs at a fixed interrupt (tick) rate - with some overhead but simple and with support for large time spans
- `DWT and Systick based`, a more efficient (tickless) implementation - requires both `SysTick` and `DWT`, supports both high resolution and large time spans

If you know of more implementations feel free to add them to this list.