Skip to main content

ThreadNotification

Enum ThreadNotification 

Source
pub enum ThreadNotification {
    NoAction,
    SetBits(u32),
    Increment,
    SetValueWithOverwrite(u32),
    SetValueWithoutOverwrite(u32),
}
Expand description

Thread notification actions.

Defines different ways to notify a thread using the FreeRTOS task notification mechanism. Task notifications provide a lightweight alternative to semaphores and queues for simple signaling between threads or from ISRs to threads.

§Performance

Task notifications are faster and use less memory than semaphores or queues, but each thread has only one notification value (32 bits).

§Common Patterns

  • Event Signaling: Use Increment or SetBits to signal events
  • Value Passing: Use SetValueWithOverwrite to pass a value
  • Non-Blocking Updates: Use SetValueWithoutOverwrite to avoid data races

§Examples

use osal_rs::os::{Thread, ThreadNotification};
 
let thread = Thread::current();
 
// Increment notification counter
thread.notify(ThreadNotification::Increment);
 
// Set specific bits (can combine multiple events)
thread.notify(ThreadNotification::SetBits(0b1010));
 
// Set value, overwriting any existing value
thread.notify(ThreadNotification::SetValueWithOverwrite(42));
 
// Set value only if no pending notifications
thread.notify(ThreadNotification::SetValueWithoutOverwrite(100));

Variants§

§

NoAction

Don’t update the notification value.

Can be used to just query whether a task has been notified.

§

SetBits(u32)

Bitwise OR the notification value with the specified bits.

Useful for setting multiple event flags that accumulate.

§

Increment

Increment the notification value by one.

Useful for counting events or implementing a lightweight counting semaphore.

§

SetValueWithOverwrite(u32)

Set the notification value, overwriting any existing value.

Use when you want to send a value and don’t care if it overwrites a previous unread value.

§

SetValueWithoutOverwrite(u32)

Set the notification value only if the receiving thread has no pending notifications.

Use when you want to avoid overwriting an unread value. Returns an error if a notification is already pending.

Trait Implementations§

Source§

impl Clone for ThreadNotification

Source§

fn clone(&self) -> ThreadNotification

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ThreadNotification

Source§

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

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

impl Into<(u32, u32)> for ThreadNotification

Source§

fn into(self) -> (u32, u32)

Converts this type into the (usually inferred) input type.
Source§

impl Copy for ThreadNotification

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

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

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

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.