From f29b08190d426baee864c2caf2adf8da002b5179 Mon Sep 17 00:00:00 2001 From: Per Lindgren Date: Thu, 11 Mar 2021 12:42:08 +0100 Subject: [PATCH] added spawn_at --- examples/spawn_at.rs | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 examples/spawn_at.rs diff --git a/examples/spawn_at.rs b/examples/spawn_at.rs new file mode 100644 index 0000000000..233c53faf2 --- /dev/null +++ b/examples/spawn_at.rs @@ -0,0 +1,53 @@ +//! examples/schedule.rs + +#![deny(unsafe_code)] +#![deny(warnings)] +#![no_main] +#![no_std] + +use panic_semihosting as _; + +// NOTE: does NOT work on QEMU! +#[rtic::app(device = lm3s6965, dispatchers = [SSI0])] +mod app { + use cortex_m_semihosting::hprintln; + use dwt_systick_monotonic::{ + consts::{U0, U8}, + DwtSystick, + }; + use rtic::time::duration::Seconds; + + #[monotonic(binds = SysTick, default = true)] + type MyMono = DwtSystick; // 8 MHz + + #[init()] + fn init(cx: init::Context) -> (init::LateResources, init::Monotonics) { + let mut dcb = cx.core.DCB; + let dwt = cx.core.DWT; + let systick = cx.core.SYST; + + let mono = DwtSystick::new(&mut dcb, dwt, systick, 8_000_000); + + hprintln!("init").unwrap(); + + // Schedule `foo` to run 1 second in the future + foo::spawn_after(Seconds(1_u32)).unwrap(); + + // Schedule `bar` to run 2 seconds in the future + bar::spawn_after(Seconds(2_u32)).unwrap(); + + (init::LateResources {}, init::Monotonics(mono)) + } + + #[task] + fn foo(_: foo::Context) { + let now = MyMono::now(); + bar::spawn_at(now + Seconds(1_u32)).unwrap(); + hprintln!("foo").unwrap(); + } + + #[task] + fn bar(_: bar::Context) { + hprintln!("bar").unwrap(); + } +}