Struct Async

Source
#[non_exhaustive]
pub struct Async(/* private fields */);
Expand description

Marker type signalling that a driver is initialized in async mode.

Drivers are constructed in blocking mode by default. To set up an async driver, a Blocking driver must be converted to an Async driver using the into_async method. Drivers can be converted back to blocking mode using the into_blocking method.

Async mode drivers offer most of the same features as blocking drivers, but with the addition of async APIs. Interrupt-related functions are not available in async mode, as they are handled by the driver’s interrupt handlers.

Note that async functions usually take up more space than their blocking counterparts, and they are generally slower. This is because async functions are implemented using a state machine that is driven by interrupts and is polled by a runtime. For short operations, the overhead of the state machine can be significant. Consider using the blocking functions on the async driver for small transfers.

When initializing an async driver, the driver disables user-specified interrupt handlers, and sets up internal interrupt handlers that drive the driver’s async API. The driver’s interrupt handlers run on the same core as the driver was initialized on. This means that the driver can not be sent across threads, to prevent incorrect concurrent access to the peripheral.

Switching back to blocking mode will disable the interrupt handlers and return the driver to a state where it can be sent across threads.

Trait Implementations§

Source§

impl Debug for Async

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl DriverMode for Async

Source§

impl Sync for Async

Auto Trait Implementations§

§

impl Freeze for Async

§

impl RefUnwindSafe for Async

§

impl !Send for Async

§

impl Unpin for Async

§

impl UnwindSafe for Async

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

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> Same for T

Source§

type Output = T

Should always be Self
§

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

§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

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

§

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

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

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

Performs the conversion.