| Crates.io | ruspiro-channel |
| lib.rs | ruspiro-channel |
| version | 0.1.1 |
| created_at | 2021-01-31 10:04:20.917868+00 |
| updated_at | 2021-04-27 11:18:33.054749+00 |
| description | Bare Metal Channel implementations for `no-std` environments, only requiring an allocator to be provided. |
| homepage | |
| repository | https://github.com/RusPiRo/ruspiro-channel/tree/v0.1.1 |
| max_upload_size | |
| id | 348812 |
| size | 39,999 |
To use this crate simply add the dependency to your Cargo.toml file:
[dependencies]
ruspiro-channel = "0.1.1"
The crate actually implements a multi producer - multi consumer (mpmc) channel only. The channel itself is non blocking but uses atomic operations. When used in a bare metal Raspberry Pi project it has to ensured that atomic operations can be used (configured and enabled MMU - see ruspiro-mmu crate).
The creation of a channel provides the sender and the receiver part of it. Both can be cloned if required.
use ruspiro_channel::mpmc;
fn main() {
let (tx, rx) = mpmc::channel();
tx.send(50u32);
// this is non-blocking and returns `Err` if the channel has no more data
if let Ok(value) = tx.recv() {
assert_eq!(value, 50);
}
}
With the async feature activated an async-channel can be created and the receiver is able to await available messages.
// it's assumed the crate is compiled with features = ["async"]
use ruspiro_channel::mpmc;
async fn foo() {
let (tx, mut rx) = mpmc::async_channel();
tx.send(42u32);
while let Some(value) = rx.next().await {
assert_eq!(value, 42);
}
}
| Feature | Description |
|---|
async | Enables the async version of the channel implementation.