#嵌入式设备 #运行时 #小型 #nrf52840 #异步 #事件 #唤醒

嵌入式运行时-nrf52840

一个用于嵌入式设备的轻量级异步运行时,为nrf52840提供了预定义的运行时钩子

2个不稳定版本

0.3.0 2024年5月24日
0.2.0 2023年8月23日

#2152 in 嵌入式开发

Download history 174/week @ 2024-05-19 17/week @ 2024-05-26 6/week @ 2024-06-02 17/week @ 2024-06-30

89 每月下载量

BSD-2-Clause OR MIT

23KB
184

License BSD-2-Clause License MIT AppVeyor CI docs.rs crates.io Download numbers dependency status

嵌入式运行时-nrf52840

这个包提供了一个轻量级的异步运行时,旨在嵌入式设备上使用。因此,它提供了一个单线程的执行器以及用于装箱未来的堆栈分配的盒子。这个包基于wfe/sevnrf52840注入了硬件实现。

示例

# use core::{
#     future::Future,
#     pin::Pin,
#     task::{Poll, Context}
# };
#
# /// Blocks until an event occurs (may wake spuriously)
# #[no_mangle]
# #[allow(non_snake_case)]
# pub fn _runtime_waitforevent_TBFzxdKN() {
#     // No-op
# }
# 
# /// Raises an event
# #[no_mangle]
# #[allow(non_snake_case)]
# pub fn _runtime_sendevent_3YSaPmB7() {
#     // No-op
# }
use embedded_runtime::run;

/// A countdown future that resolves to pending until the poll-countdown becomes zero
struct CountdownFuture {
    /// The current countdown value
    countdown: usize
}
impl CountdownFuture {
    /// Creates a new countdown future
    pub const fn new(countdown: usize) -> Self {
        Self { countdown }
    }
}
impl Future for CountdownFuture {
    type Output = ();

    fn poll(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output> {
        // Decrement the value if we are still pending
        if self.countdown > 0 {
            // Print the countdown
            println!("{}!", self.countdown);

            // Decrement the future, wake the executor and return pending
            *self = Self::new(self.countdown - 1);
            cx.waker().wake_by_ref();
            return Poll::Pending;
        }

        // Return ready
        println!("Liftoff 🚀");
        Poll::Ready(())
    }
}

// This creates a new runtime and executes the given futures in an async context
run!(async {
    CountdownFuture::new(3).await;
    CountdownFuture::new(7).await;
}).expect("failed to perform countdowns");

依赖

~575KB