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§
Trait Implementations§
Source§impl Queue for Queue
impl Queue for Queue
fn new(size: UBaseType, message_size: UBaseType) -> Result<Self>
fn fetch(&self, buffer: &mut [u8], time: TickType) -> Result<()>
fn fetch_from_isr(&self, buffer: &mut [u8]) -> Result<()>
fn post(&self, item: &[u8], time: TickType) -> Result<()>
fn post_from_isr(&self, item: &[u8]) -> Result<()>
fn delete(&mut self)
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