pub struct IsrCriticalSection(/* private fields */);

Implementations§

source§

impl IsrCriticalSection

source

#[link_section = ".iram1.interrupt_cs_new"]
pub const fn new() -> Self

Constructs a new IsrCriticalSection instance

source

#[link_section = ".iram1.interrupt_cs_enter"]
pub fn enter(&self) -> IsrCriticalSectionGuard<'_>

Disables all interrupts for the lifetime of the returned guard instance. This method supports nesting in that is safe to be called multiple times. This method is also safe to call from ISR routines.

NOTE: On dual-core esp32* chips, interrupts will be disabled only on one of the cores (the one where IsrCriticalSection::enter is called), while the other core will continue its execution. Moreover, if the same IsrCriticalSection instance is shared across multiple threads, where some of these happen to be scheduled on the second core (which has its interrupts enabled), the second core will then spinlock (busy-wait) in IsrCriticalSection::enter, until the first CPU releases the critical section and re-enables its interrupts. The second core will then - in turn - disable its interrupts and own the spinlock.

For more information, refer to https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/freertos-smp.html#critical-sections

Trait Implementations§

source§

impl Default for IsrCriticalSection

source§

#[link_section = ".iram1.interrupt_cs_default"]
fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl Send for IsrCriticalSection

source§

impl Sync for IsrCriticalSection

Auto Trait Implementations§

§

impl RefUnwindSafe for IsrCriticalSection

§

impl Unpin for IsrCriticalSection

§

impl UnwindSafe for IsrCriticalSection

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.

§

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.