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§
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