pub struct Queue(/* private fields */);Expand description
A FIFO queue for byte-based message passing.
Provides a thread-safe queue implementation for sending and receiving raw byte slices between threads. Supports both blocking and ISR-safe operations.
§Examples
§Basic queue usage
ⓘ
use osal_rs::os::{Queue, QueueFn};
use core::time::Duration;
// Create a queue with 10 slots, each 32 bytes
let queue = Queue::new(10, 32).unwrap();
// Send data
let data = [1u8, 2, 3, 4];
queue.post_with_to_tick(&data, Duration::from_millis(100)).unwrap();
// Receive data
let mut buffer = [0u8; 4];
queue.fetch_with_to_tick(&mut buffer, Duration::from_millis(100)).unwrap();
assert_eq!(buffer, [1, 2, 3, 4]);§Producer-consumer pattern
ⓘ
use osal_rs::os::{Queue, QueueFn, Thread};
use alloc::sync::Arc;
use core::time::Duration;
let queue = Arc::new(Queue::new(5, 4).unwrap());
let queue_clone = queue.clone();
// Consumer thread
let consumer = Thread::new("consumer", 2048, 5, move || {
let mut buffer = [0u8; 4];
loop {
if queue_clone.fetch(&mut buffer, 1000).is_ok() {
println!("Received: {:?}", buffer);
}
}
}).unwrap();
consumer.start().unwrap();
// Producer
let data = [0xAA, 0xBB, 0xCC, 0xDD];
queue.post(&data, 1000).unwrap();Implementations§
Source§impl Queue
impl Queue
Sourcepub fn new(size: UBaseType, message_size: UBaseType) -> Result<Self>
pub fn new(size: UBaseType, message_size: UBaseType) -> Result<Self>
Creates a new queue.
§Parameters
size- Maximum number of messages the queue can holdmessage_size- Size in bytes of each message
§Returns
Ok(Self)- Successfully created queueErr(Error)- Creation failed (insufficient memory, etc.)
§Examples
ⓘ
use osal_rs::os::{Queue, QueueFn};
// Queue for 5 messages of 16 bytes each
let queue = Queue::new(5, 16).unwrap();pub fn fetch_with_to_tick( &self, buffer: &mut [u8], time: impl ToTick, ) -> Result<()>
pub fn post_with_to_tick(&self, item: &[u8], time: impl ToTick) -> Result<()>
Trait Implementations§
Source§impl Queue for Queue
impl Queue for Queue
Source§fn fetch(&self, buffer: &mut [u8], time: TickType) -> Result<()>
fn fetch(&self, buffer: &mut [u8], time: TickType) -> Result<()>
Fetches a message from the queue (blocking). Read more
Source§fn fetch_from_isr(&self, buffer: &mut [u8]) -> Result<()>
fn fetch_from_isr(&self, buffer: &mut [u8]) -> Result<()>
Fetches a message from ISR context (non-blocking). Read more
Source§fn post(&self, item: &[u8], time: TickType) -> Result<()>
fn post(&self, item: &[u8], time: TickType) -> Result<()>
Posts a message to the queue (blocking). Read more
impl Send for Queue
impl Sync for Queue
Auto Trait Implementations§
impl Freeze for Queue
impl RefUnwindSafe for Queue
impl Unpin for Queue
impl UnsafeUnpin for Queue
impl UnwindSafe for Queue
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more