Skip to main content

RawMutex

Struct RawMutex 

Source
pub struct RawMutex(/* private fields */);
Expand description

Mutex types and guards for mutual exclusion. Low-level recursive mutex wrapper for FreeRTOS.

This is the underlying implementation of the mutex that directly interfaces with FreeRTOS semaphore APIs. It’s recursive, meaning the same thread can lock it multiple times.

§Note

Users should typically use Mutex<T> instead, which provides type-safe data protection. This type is exposed for advanced use cases.

Implementations§

Source§

impl RawMutex

Source

pub fn new() -> Result<Self>

Creates a new raw recursive mutex.

§Returns
  • Ok(RawMutex) - Successfully created
  • Err(Error::OutOf Memory) - Failed to allocate mutex resources

Trait Implementations§

Source§

impl Debug for RawMutex

Source§

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

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

impl Deref for RawMutex

Allows dereferencing to the underlying FreeRTOS mutex handle.

Source§

type Target = *const c_void

The resulting type after dereferencing.
Source§

fn deref(&self) -> &MutexHandle

Dereferences the value.
Source§

impl Display for RawMutex

Source§

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

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

impl Drop for RawMutex

Automatically deletes the mutex when it goes out of scope.

This ensures proper cleanup of FreeRTOS resources.

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl RawMutex for RawMutex

Source§

fn lock(&self) -> OsalRsBool

Attempts to acquire the mutex, blocking until it becomes available.

This function will block the calling thread until the mutex can be acquired. Since this is a recursive mutex, the same thread can lock it multiple times.

§Returns
  • OsalRsBool::True - Successfully acquired the mutex
  • OsalRsBool::False - Failed to acquire (should not happen with MAX_DELAY)
§Examples
use osal_rs::os::RawMutex;
use osal_rs::traits::RawMutexFn;
 
let mutex = RawMutex::new().unwrap();
if mutex.lock() == OsalRsBool::True {
    // Critical section
    mutex.unlock();
}
Source§

fn lock_from_isr(&self) -> OsalRsBool

Attempts to acquire the mutex from an interrupt service routine (ISR).

This is the ISR-safe version of lock(). It attempts to acquire the mutex without blocking. If a higher priority task is woken, a context switch is triggered.

§Returns
  • OsalRsBool::True - Successfully acquired the mutex
  • OsalRsBool::False - Mutex is already locked
§Safety

Must only be called from ISR context.

§Examples
// In interrupt handler
use osal_rs::os::RawMutex;
use osal_rs::traits::RawMutexFn;
 
fn irq_handler(mutex: &RawMutex) {
    if mutex.lock_from_isr() == OsalRsBool::True {
        // Critical section
        mutex.unlock_from_isr();
    }
}
Source§

fn unlock(&self) -> OsalRsBool

Releases the mutex.

For recursive mutexes, this must be called as many times as lock() was called to fully release the mutex.

§Returns
  • OsalRsBool::True - Successfully released the mutex
  • OsalRsBool::False - Failed to release (e.g., not locked by current thread)
§Examples
use osal_rs::os::RawMutex;
use osal_rs::traits::RawMutexFn;
 
let mutex = RawMutex::new().unwrap();
mutex.lock();
// Critical section
mutex.unlock();
Source§

fn unlock_from_isr(&self) -> OsalRsBool

Releases the mutex from an interrupt service routine (ISR).

This is the ISR-safe version of unlock(). If a higher priority task is woken by releasing the mutex, a context switch is triggered.

§Returns
  • OsalRsBool::True - Successfully released the mutex
  • OsalRsBool::False - Failed to release
§Safety

Must only be called from ISR context.

§Examples
// In interrupt handler
use osal_rs::os::RawMutex;
use osal_rs::traits::RawMutexFn;
 
fn irq_handler(mutex: &RawMutex) {
    if mutex.lock_from_isr() == OsalRsBool::True {
        // Critical section
        mutex.unlock_from_isr();
    }
}
Source§

fn delete(&mut self)

Deletes the mutex and frees its resources.

This function destroys the mutex and releases any memory allocated for it. After calling this, the mutex should not be used. The handle is set to null.

§Safety

Ensure no threads are waiting on or holding this mutex before deleting it.

§Examples
use osal_rs::os::RawMutex;
use osal_rs::traits::RawMutexFn;
 
let mut mutex = RawMutex::new().unwrap();
// Use the mutex...
mutex.delete();
Source§

impl Send for RawMutex

Source§

impl Sync for RawMutex

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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.