diff options
author | 2021-04-07 12:01:18 +0000 | |
---|---|---|
committer | 2021-04-07 12:01:18 +0000 | |
commit | 6c8257bb73de0f68072467447692a1f7dff555f9 (patch) | |
tree | 815ee7267e0661532f9c3ad13021b5293efd994f /examples | |
parent | 3c86d713a6f8fdb052de80380a17468090e42624 (diff) | |
parent | ae691952c328757113047bf696e934316789b844 (diff) | |
download | rtic-6c8257bb73de0f68072467447692a1f7dff555f9.tar.gz rtic-6c8257bb73de0f68072467447692a1f7dff555f9.tar.zst rtic-6c8257bb73de0f68072467447692a1f7dff555f9.zip |
Merge #456
456: Cancel/reschedule support for monotonics r=AfoHT a=korken89
Design document: https://hackmd.io/lhUCzrKBS-66aadO4KsSzw?view
Co-authored-by: Emil Fresk <emil.fresk@gmail.com>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/double_schedule.rs | 7 | ||||
-rw-r--r-- | examples/periodic.rs | 7 | ||||
-rw-r--r-- | examples/schedule.rs | 7 | ||||
-rw-r--r-- | examples/t-schedule.rs | 95 | ||||
-rw-r--r-- | examples/types.rs | 7 |
5 files changed, 91 insertions, 32 deletions
diff --git a/examples/double_schedule.rs b/examples/double_schedule.rs index 403f3583..9da57ae5 100644 --- a/examples/double_schedule.rs +++ b/examples/double_schedule.rs @@ -9,14 +9,11 @@ use panic_semihosting as _; #[rtic::app(device = lm3s6965, dispatchers = [SSI0])] mod app { - use dwt_systick_monotonic::{ - consts::{U0, U8}, - DwtSystick, - }; + use dwt_systick_monotonic::DwtSystick; use rtic::time::duration::Seconds; #[monotonic(binds = SysTick, default = true)] - type MyMono = DwtSystick<U8, U0, U0>; // 8 MHz + type MyMono = DwtSystick<8_000_000>; // 8 MHz #[init] fn init(cx: init::Context) -> (init::LateResources, init::Monotonics) { diff --git a/examples/periodic.rs b/examples/periodic.rs index 82c21280..01061c9f 100644 --- a/examples/periodic.rs +++ b/examples/periodic.rs @@ -10,14 +10,11 @@ use panic_semihosting as _; // NOTE: does NOT work on QEMU! #[rtic::app(device = lm3s6965, dispatchers = [SSI0])] mod app { - use dwt_systick_monotonic::{ - consts::{U0, U8}, - DwtSystick, - }; + use dwt_systick_monotonic::DwtSystick; use rtic::time::duration::Seconds; #[monotonic(binds = SysTick, default = true)] - type MyMono = DwtSystick<U8, U0, U0>; // 8 MHz + type MyMono = DwtSystick<8_000_000>; // 8 MHz #[init] fn init(cx: init::Context) -> (init::LateResources, init::Monotonics) { diff --git a/examples/schedule.rs b/examples/schedule.rs index d6d44998..b89e5191 100644 --- a/examples/schedule.rs +++ b/examples/schedule.rs @@ -11,14 +11,11 @@ use panic_semihosting as _; #[rtic::app(device = lm3s6965, dispatchers = [SSI0])] mod app { use cortex_m_semihosting::hprintln; - use dwt_systick_monotonic::{ - consts::{U0, U8}, - DwtSystick, - }; + use dwt_systick_monotonic::DwtSystick; use rtic::time::duration::Seconds; #[monotonic(binds = SysTick, default = true)] - type MyMono = DwtSystick<U8, U0, U0>; // 8 MHz + type MyMono = DwtSystick<8_000_000>; // 8 MHz #[init()] fn init(cx: init::Context) -> (init::LateResources, init::Monotonics) { diff --git a/examples/t-schedule.rs b/examples/t-schedule.rs index bd0ab668..ef04c451 100644 --- a/examples/t-schedule.rs +++ b/examples/t-schedule.rs @@ -9,14 +9,11 @@ use panic_semihosting as _; #[rtic::app(device = lm3s6965, dispatchers = [SSI0])] mod app { - use dwt_systick_monotonic::{ - consts::{U0, U8}, - DwtSystick, - }; + use dwt_systick_monotonic::DwtSystick; use rtic::time::duration::Seconds; #[monotonic(binds = SysTick, default = true)] - type MyMono = DwtSystick<U8, U0, U0>; // 8 MHz + type MyMono = DwtSystick<8_000_000>; // 8 MHz #[init] fn init(cx: init::Context) -> (init::LateResources, init::Monotonics) { @@ -26,19 +23,93 @@ mod app { let mono = DwtSystick::new(&mut dcb, dwt, systick, 8_000_000); - let _: Result<(), ()> = foo::spawn_after(Seconds(1_u32)); - let _: Result<(), u32> = bar::spawn_after(Seconds(2_u32), 0); - let _: Result<(), (u32, u32)> = baz::spawn_after(Seconds(3_u32), 0, 1); + // Task without message passing + + // Not default + let _: Result<foo::MyMono::SpawnHandle, ()> = foo::MyMono::spawn_at(MyMono::now()); + let handle: Result<foo::MyMono::SpawnHandle, ()> = foo::MyMono::spawn_after(Seconds(1_u32)); + let _: Result<foo::MyMono::SpawnHandle, ()> = + handle.unwrap().reschedule_after(Seconds(1_u32)); + + let handle: Result<foo::MyMono::SpawnHandle, ()> = foo::MyMono::spawn_after(Seconds(1_u32)); + let _: Result<foo::MyMono::SpawnHandle, ()> = handle.unwrap().reschedule_at(MyMono::now()); + + let handle: Result<foo::MyMono::SpawnHandle, ()> = foo::MyMono::spawn_after(Seconds(1_u32)); + let _: Result<(), ()> = handle.unwrap().cancel(); + + // Using default + let _: Result<foo::SpawnHandle, ()> = foo::spawn_at(MyMono::now()); + let handle: Result<foo::SpawnHandle, ()> = foo::spawn_after(Seconds(1_u32)); + let _: Result<foo::SpawnHandle, ()> = handle.unwrap().reschedule_after(Seconds(1_u32)); + + let handle: Result<foo::SpawnHandle, ()> = foo::spawn_after(Seconds(1_u32)); + let _: Result<foo::SpawnHandle, ()> = handle.unwrap().reschedule_at(MyMono::now()); + + let handle: Result<foo::SpawnHandle, ()> = foo::spawn_after(Seconds(1_u32)); + let _: Result<(), ()> = handle.unwrap().cancel(); + + // Task with single message passing + + // Not default + let _: Result<bar::MyMono::SpawnHandle, u32> = bar::MyMono::spawn_at(MyMono::now(), 0); + let handle: Result<bar::MyMono::SpawnHandle, u32> = + bar::MyMono::spawn_after(Seconds(1_u32), 0); + let _: Result<bar::MyMono::SpawnHandle, ()> = + handle.unwrap().reschedule_after(Seconds(1_u32)); + + let handle: Result<bar::MyMono::SpawnHandle, u32> = + bar::MyMono::spawn_after(Seconds(1_u32), 0); + let _: Result<bar::MyMono::SpawnHandle, ()> = handle.unwrap().reschedule_at(MyMono::now()); + + let handle: Result<bar::MyMono::SpawnHandle, u32> = + bar::MyMono::spawn_after(Seconds(1_u32), 0); + let _: Result<u32, ()> = handle.unwrap().cancel(); + + // Using default + let _: Result<bar::SpawnHandle, u32> = bar::spawn_at(MyMono::now(), 0); + let handle: Result<bar::SpawnHandle, u32> = bar::spawn_after(Seconds(1_u32), 0); + let _: Result<bar::SpawnHandle, ()> = handle.unwrap().reschedule_after(Seconds(1_u32)); + + let handle: Result<bar::SpawnHandle, u32> = bar::spawn_after(Seconds(1_u32), 0); + let _: Result<bar::SpawnHandle, ()> = handle.unwrap().reschedule_at(MyMono::now()); + + let handle: Result<bar::SpawnHandle, u32> = bar::spawn_after(Seconds(1_u32), 0); + let _: Result<u32, ()> = handle.unwrap().cancel(); + + // Task with multiple message passing + + // Not default + let _: Result<baz::MyMono::SpawnHandle, (u32, u32)> = + baz::MyMono::spawn_at(MyMono::now(), 0, 1); + let handle: Result<baz::MyMono::SpawnHandle, (u32, u32)> = + baz::MyMono::spawn_after(Seconds(1_u32), 0, 1); + let _: Result<baz::MyMono::SpawnHandle, ()> = + handle.unwrap().reschedule_after(Seconds(1_u32)); + + let handle: Result<baz::MyMono::SpawnHandle, (u32, u32)> = + baz::MyMono::spawn_after(Seconds(1_u32), 0, 1); + let _: Result<baz::MyMono::SpawnHandle, ()> = handle.unwrap().reschedule_at(MyMono::now()); + + let handle: Result<baz::MyMono::SpawnHandle, (u32, u32)> = + baz::MyMono::spawn_after(Seconds(1_u32), 0, 1); + let _: Result<(u32, u32), ()> = handle.unwrap().cancel(); + + // Using default + let _: Result<baz::SpawnHandle, (u32, u32)> = baz::spawn_at(MyMono::now(), 0, 1); + let handle: Result<baz::SpawnHandle, (u32, u32)> = baz::spawn_after(Seconds(1_u32), 0, 1); + let _: Result<baz::SpawnHandle, ()> = handle.unwrap().reschedule_after(Seconds(1_u32)); + + let handle: Result<baz::SpawnHandle, (u32, u32)> = baz::spawn_after(Seconds(1_u32), 0, 1); + let _: Result<baz::SpawnHandle, ()> = handle.unwrap().reschedule_at(MyMono::now()); + + let handle: Result<baz::SpawnHandle, (u32, u32)> = baz::spawn_after(Seconds(1_u32), 0, 1); + let _: Result<(u32, u32), ()> = handle.unwrap().cancel(); (init::LateResources {}, init::Monotonics(mono)) } #[idle] fn idle(_: idle::Context) -> ! { - let _: Result<(), ()> = foo::spawn_at(MyMono::now() + Seconds(3_u32)); - let _: Result<(), u32> = bar::spawn_at(MyMono::now() + Seconds(4_u32), 0); - let _: Result<(), (u32, u32)> = baz::spawn_at(MyMono::now() + Seconds(5_u32), 0, 1); - loop { cortex_m::asm::nop(); } diff --git a/examples/types.rs b/examples/types.rs index ff7deb84..cdcf80c2 100644 --- a/examples/types.rs +++ b/examples/types.rs @@ -10,13 +10,10 @@ use panic_semihosting as _; #[rtic::app(device = lm3s6965, peripherals = true, dispatchers = [SSI0])] mod app { use cortex_m_semihosting::debug; - use dwt_systick_monotonic::{ - consts::{U0, U8}, - DwtSystick, - }; + use dwt_systick_monotonic::DwtSystick; #[monotonic(binds = SysTick, default = true)] - type MyMono = DwtSystick<U8, U0, U0>; // 8 MHz + type MyMono = DwtSystick<8_000_000>; // 8 MHz #[resources] struct Resources { |