#channel #raspberry-pi #bare-metal #async #ruspiro

no-std ruspiro-channel

为无std环境提供的裸金属通道实现,只需要提供一个分配器

2个版本

0.1.1 2021年4月27日
0.1.0 2021年1月31日

#2235嵌入式开发

每月41次下载
5 个包中使用(通过 ruspiro-interrupt

MIT/Apache

16KB
200

RusPiRo Channel

CI Latest Version Documentation License

用法

要使用此包,只需将其依赖项添加到您的 Cargo.toml 文件中

[dependencies]
ruspiro-channel = "0.1.1"

该包实际上实现了一个 多生产者 - 多消费者(mpmc)通道。通道本身是非阻塞的,但使用原子操作。在裸金属树莓派项目中使用时,必须确保可以使用原子操作(配置和启用MMU - 请参阅 ruspiro-mmu 包)。

创建通道提供了发送器和接收器部分。如果需要,两者都可以克隆。

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);
  }
}

当激活了 async 功能时,可以创建异步通道,接收器能够 await 可用的消息。

// 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);
  }
}

功能

功能 描述
async 启用通道实现的 async 版本。

依赖项

~84–250KB