Skip to main content

Executor

Struct Executor 

Source
pub struct Executor { /* private fields */ }
Expand description

Thread-mode executor: runs tasks on the main context, and idles the core in wfe when none are ready.

wfe parks the core until an event or an interrupt arrives, so an idle program draws no more power than a wfi loop — unlike a spinning executor. Interrupts wake it regardless of the event register, which is what lets the timer interrupt drive embassy-time deadlines.

There is no lost-wake-up race between polling and sleeping. sev sets a sticky per-core event register, so a wake-up that lands in the window after the last poll and before the wfe makes that wfe return immediately rather than sleeping through it.

Implementations§

Source§

impl Executor

Source

pub fn new() -> Self

Creates an executor with no tasks.

Source

pub fn run(&'static mut self, init: impl FnOnce(Spawner)) -> !

Spawns the initial tasks and then runs them forever.

init receives a Spawner for this executor and is called once, before the first poll; keep a copy of the Spawner (it is Copy) to spawn more later from inside a task.

Never returns. Between polls the core sits in wfe, so anything that should wake it — including the embassy-time deadline interrupt — must be enabled before this is called.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.