pub struct Timer<H: Handler, const HZ: u32> {
timer: ztimer_periodic_t,
handler: H,
_phantom: PhantomPinned,
}
riot_module_ztimer
and riot_module_ztimer_periodic
only.Expand description
A periodic timer
This periodic timer is built on a clock and configured with a frequency and tick handler.
It contains the handler and a ztimer_periodic_t
C struct that then contains the actual timer
as well as a reference to the clock. Being self-referential by nature, it is mainly used in
pinned form. It can be started and stopped, and stops automatically when dropped.
Fields§
§timer: ztimer_periodic_t
§handler: H
§_phantom: PhantomPinned
Implementations§
Source§impl<H: Handler, const HZ: u32> Timer<H, HZ>
impl<H: Handler, const HZ: u32> Timer<H, HZ>
pub fn new(clock: Clock<HZ>, handler: H, ticks: Ticks<HZ>) -> Self
fn restore_internal_references(&mut self)
pub fn stop(&mut self)
extern "C" fn callback(arg: *mut c_void) -> bool
Sourcepub fn alter<R, F: FnOnce(&mut H) -> R>(self: &mut Pin<&mut Self>, f: F) -> R
pub fn alter<R, F: FnOnce(&mut H) -> R>(self: &mut Pin<&mut Self>, f: F) -> R
Obtain a mutable reference to the handler.
This can be used, for example, to feed data into a handler that is sent out whenever the timer triggers.
This is relatively invasive to the system as it creates a critical section (ie. possibly delaying the execution of the next timer, or even other interrupts). In many cases, the preferable way to send data to the timer is to use a lock-free data structure.
Source§impl<H: Handler + 'static, const HZ: u32> Timer<H, HZ>
impl<H: Handler + 'static, const HZ: u32> Timer<H, HZ>
Sourcepub fn start(self: &mut Pin<&mut Self>)
pub fn start(self: &mut Pin<&mut Self>)
Start the timer, calling the handler at every interval.
This requires a Handler + 'static
because it relies on the timer’s drop to stop the
process, and only a static handler can still safely be called if that drop never happens.
(For non-static handlers, a scoped version might be introduced later).
Trait Implementations§
Auto Trait Implementations§
impl<H, const HZ: u32> Freeze for Timer<H, HZ>where
H: Freeze,
impl<H, const HZ: u32> RefUnwindSafe for Timer<H, HZ>where
H: RefUnwindSafe,
impl<H, const HZ: u32> !Send for Timer<H, HZ>
impl<H, const HZ: u32> !Sync for Timer<H, HZ>
impl<H, const HZ: u32> !Unpin for Timer<H, HZ>
impl<H, const HZ: u32> UnwindSafe for Timer<H, HZ>where
H: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoSwitch for T
impl<T> IntoSwitch for T
Source§fn into_switch<ActiveLevel>(self) -> Switch<T, ActiveLevel>
fn into_switch<ActiveLevel>(self) -> Switch<T, ActiveLevel>
Source§fn into_active_high_switch(self) -> Switch<Self, ActiveHigh>where
Self: Sized,
fn into_active_high_switch(self) -> Switch<Self, ActiveHigh>where
Self: Sized,
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.