logo
pub trait Monotonic {
    type Instant: Ord + Copy + Add<Self::Duration> + Sub<Self::Duration> + Sub<Self::Instant>;
    type Duration;

    const DISABLE_INTERRUPT_ON_EMPTY_QUEUE: bool;

    fn now(&mut self) -> Self::Instant;
fn set_compare(&mut self, instant: Self::Instant);
fn clear_compare_flag(&mut self);
fn zero() -> Self::Instant;
unsafe fn reset(&mut self); fn on_interrupt(&mut self) { ... }
fn enable_timer(&mut self) { ... }
fn disable_timer(&mut self) { ... } }
Expand description

A monotonic clock / counter definition.

Correctness

The trait enforces that proper time-math is implemented between Instant and Duration. This is a requirement on the time library that the user chooses to use.

Associated Types

The type for instant, defining an instant in time.

Note: In all APIs in RTIC that use instants from this monotonic, this type will be used.

The type for duration, defining an duration of time.

Note: In all APIs in RTIC that use duration from this monotonic, this type will be used.

Associated Constants

This tells RTIC if it should disable the interrupt bound to the monotonic if there are no scheduled tasks. One may want to set this to false if one is using the on_interrupt method to perform housekeeping and need overflow interrupts to happen, such as when extending a 16 bit timer to 32/64 bits, even if there are no scheduled tasks.

Required methods

Get the current time.

Set the compare value of the timer interrupt.

Note: This method does not need to handle race conditions of the monotonic, the timer queue in RTIC checks this.

Clear the compare interrupt flag.

The time at time zero. Used by RTIC before the monotonic has been initialized.

Optionally resets the counter to zero for a fixed baseline in a system.

This method will be called exactly once by the RTIC runtime after #[init] returns and before tasks start.

Safety
Correctness

The user may not call this method.

Provided methods

Optional. Commonly used for performing housekeeping of a timer when it has been extended, e.g. a 16 bit timer extended to 32/64 bits. This will be called at the end of the interrupt handler after all other operations have finished.

Optional. This is used to save power, this is called when the Monotonic interrupt is enabled.

Optional. This is used to save power, this is called when the Monotonic interrupt is disabled.

Implementors