aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Per Lindgren <per.lindgren@ltu.se> 2020-10-26 17:16:51 +0100
committerGravatar Per Lindgren <per.lindgren@ltu.se> 2020-10-26 17:16:51 +0100
commit5b1c0dbb0aa0f4a3cb0f21ee7531c21558f4a7c3 (patch)
tree983c8b4baa8e7e94fa409e246291c5133cc87c32
parent5df1f59f47e612d99be42984df99796d8e8590c8 (diff)
downloadrtic-5b1c0dbb0aa0f4a3cb0f21ee7531c21558f4a7c3.tar.gz
rtic-5b1c0dbb0aa0f4a3cb0f21ee7531c21558f4a7c3.tar.zst
rtic-5b1c0dbb0aa0f4a3cb0f21ee7531c21558f4a7c3.zip
async_util
-rw-r--r--Cargo.toml2
-rw-r--r--examples/async_systick2.rs10
-rw-r--r--src/lib.rs7
3 files changed, 15 insertions, 4 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 6fe5fce3..95219983 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -82,6 +82,8 @@ version = "0.5.2"
trybuild = "1"
[features]
+# experimental support for async/await
+async = []
# used for testing this crate; do not use in applications
__v7 =[]
__min_r1_43 =[]
diff --git a/examples/async_systick2.rs b/examples/async_systick2.rs
index 3f124533..618baf61 100644
--- a/examples/async_systick2.rs
+++ b/examples/async_systick2.rs
@@ -91,8 +91,10 @@ mod app {
async fn task(mut cx: foo::Context<'static>) {
hprintln!("foo task").ok();
- hprintln!("delay long time").ok();
- timer_delay(&mut cx.resources.systick, 5000000).await;
+ hprintln!("prepare two futures").ok();
+ let d1 = timer_delay(&mut cx.resources.systick, 5000000);
+ let d2 = timer_delay(&mut cx.resources.systick, 1000000);
+
hprintln!("foo task resumed").ok();
hprintln!("delay short time").ok();
@@ -182,6 +184,7 @@ impl<F: Future + 'static> Task<F> {
use core::cmp::Ordering;
use heapless::binary_heap::{BinaryHeap, Max};
use heapless::consts::U8;
+use heapless::Vec;
pub enum State {
Started,
@@ -217,7 +220,6 @@ pub struct Systick {
syst: cortex_m::peripheral::SYST,
state: State,
queue: BinaryHeap<Timeout, U8, Max>,
- // waker: Option<Waker>,
}
//=============
@@ -260,7 +262,7 @@ impl<'a, T: Mutex<T = Systick>> Future for Timer<'a, T> {
fn timer_delay<'a, T: Mutex<T = Systick>>(systick: &'a mut T, t: u32) -> Timer<'a, T> {
hprintln!("timer_delay {}", t);
Timer {
- request: Some(t),
+ request: heapless,
systick,
}
}
diff --git a/src/lib.rs b/src/lib.rs
index a7d399cd..5a17c9c5 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -34,9 +34,16 @@
#![deny(rust_2018_idioms)]
#![deny(warnings)]
#![no_std]
+// async currently requires nightly
+#![cfg_attr(feature = "async", feature(const_fn))]
+#![cfg_attr(feature = "async", feature(type_alias_impl_trait))]
use core::ops::Sub;
+// currently requires nightly
+#[cfg(feature = "async")]
+pub mod async_util;
+
use cortex_m::{
interrupt::Nr,
peripheral::{CBP, CPUID, DCB, DWT, FPB, FPU, ITM, MPU, NVIC, SCB, TPIU},