From 2068eae9280881e34b5cc2d76b0b1a61402223e7 Mon Sep 17 00:00:00 2001 From: Emil Fresk Date: Wed, 7 Apr 2021 11:06:57 +0200 Subject: Type aliases now work in the app module --- examples/t-schedule.rs | 33 +++++++++++++++++++++------------ examples/type-usage.rs | 15 +++++++++++++++ 2 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 examples/type-usage.rs (limited to 'examples') diff --git a/examples/t-schedule.rs b/examples/t-schedule.rs index ef04c45..5e38dba 100644 --- a/examples/t-schedule.rs +++ b/examples/t-schedule.rs @@ -26,24 +26,27 @@ mod app { // Task without message passing // Not default - let _: Result = foo::MyMono::spawn_at(MyMono::now()); + let _: Result = + foo::MyMono::spawn_at(monotonics::MyMono::now()); let handle: Result = foo::MyMono::spawn_after(Seconds(1_u32)); let _: Result = handle.unwrap().reschedule_after(Seconds(1_u32)); let handle: Result = foo::MyMono::spawn_after(Seconds(1_u32)); - let _: Result = handle.unwrap().reschedule_at(MyMono::now()); + let _: Result = + handle.unwrap().reschedule_at(monotonics::MyMono::now()); let handle: Result = foo::MyMono::spawn_after(Seconds(1_u32)); let _: Result<(), ()> = handle.unwrap().cancel(); // Using default - let _: Result = foo::spawn_at(MyMono::now()); + let _: Result = foo::spawn_at(monotonics::MyMono::now()); let handle: Result = foo::spawn_after(Seconds(1_u32)); let _: Result = handle.unwrap().reschedule_after(Seconds(1_u32)); let handle: Result = foo::spawn_after(Seconds(1_u32)); - let _: Result = handle.unwrap().reschedule_at(MyMono::now()); + let _: Result = + handle.unwrap().reschedule_at(monotonics::MyMono::now()); let handle: Result = foo::spawn_after(Seconds(1_u32)); let _: Result<(), ()> = handle.unwrap().cancel(); @@ -51,7 +54,8 @@ mod app { // Task with single message passing // Not default - let _: Result = bar::MyMono::spawn_at(MyMono::now(), 0); + let _: Result = + bar::MyMono::spawn_at(monotonics::MyMono::now(), 0); let handle: Result = bar::MyMono::spawn_after(Seconds(1_u32), 0); let _: Result = @@ -59,19 +63,21 @@ mod app { let handle: Result = bar::MyMono::spawn_after(Seconds(1_u32), 0); - let _: Result = handle.unwrap().reschedule_at(MyMono::now()); + let _: Result = + handle.unwrap().reschedule_at(monotonics::MyMono::now()); let handle: Result = bar::MyMono::spawn_after(Seconds(1_u32), 0); let _: Result = handle.unwrap().cancel(); // Using default - let _: Result = bar::spawn_at(MyMono::now(), 0); + let _: Result = bar::spawn_at(monotonics::MyMono::now(), 0); let handle: Result = bar::spawn_after(Seconds(1_u32), 0); let _: Result = handle.unwrap().reschedule_after(Seconds(1_u32)); let handle: Result = bar::spawn_after(Seconds(1_u32), 0); - let _: Result = handle.unwrap().reschedule_at(MyMono::now()); + let _: Result = + handle.unwrap().reschedule_at(monotonics::MyMono::now()); let handle: Result = bar::spawn_after(Seconds(1_u32), 0); let _: Result = handle.unwrap().cancel(); @@ -80,7 +86,7 @@ mod app { // Not default let _: Result = - baz::MyMono::spawn_at(MyMono::now(), 0, 1); + baz::MyMono::spawn_at(monotonics::MyMono::now(), 0, 1); let handle: Result = baz::MyMono::spawn_after(Seconds(1_u32), 0, 1); let _: Result = @@ -88,19 +94,22 @@ mod app { let handle: Result = baz::MyMono::spawn_after(Seconds(1_u32), 0, 1); - let _: Result = handle.unwrap().reschedule_at(MyMono::now()); + let _: Result = + handle.unwrap().reschedule_at(monotonics::MyMono::now()); let handle: Result = baz::MyMono::spawn_after(Seconds(1_u32), 0, 1); let _: Result<(u32, u32), ()> = handle.unwrap().cancel(); // Using default - let _: Result = baz::spawn_at(MyMono::now(), 0, 1); + let _: Result = + baz::spawn_at(monotonics::MyMono::now(), 0, 1); let handle: Result = baz::spawn_after(Seconds(1_u32), 0, 1); let _: Result = handle.unwrap().reschedule_after(Seconds(1_u32)); let handle: Result = baz::spawn_after(Seconds(1_u32), 0, 1); - let _: Result = handle.unwrap().reschedule_at(MyMono::now()); + let _: Result = + handle.unwrap().reschedule_at(monotonics::MyMono::now()); let handle: Result = baz::spawn_after(Seconds(1_u32), 0, 1); let _: Result<(u32, u32), ()> = handle.unwrap().cancel(); diff --git a/examples/type-usage.rs b/examples/type-usage.rs new file mode 100644 index 0000000..a7a0d41 --- /dev/null +++ b/examples/type-usage.rs @@ -0,0 +1,15 @@ +//! examples/smallest.rs + +#![no_main] +#![no_std] + +use panic_semihosting as _; // panic handler +use rtic::app; + +#[app(device = lm3s6965, dispatchers = [SSI0])] +mod app { + type Test = u32; + + #[task] + fn t1(_: t1::Context, _val: Test) {} +} -- cgit v1.2.3 From 51500a1d7096395be9162599fae647ec121db91d Mon Sep 17 00:00:00 2001 From: Emil Fresk Date: Thu, 8 Apr 2021 09:12:08 +0200 Subject: Fixed UB in `spawn_at` --- examples/type-usage.rs | 2 +- macros/Cargo.toml | 4 +--- macros/src/codegen/module.rs | 16 +++++----------- src/tq.rs | 6 ++++-- 4 files changed, 11 insertions(+), 17 deletions(-) (limited to 'examples') diff --git a/examples/type-usage.rs b/examples/type-usage.rs index a7a0d41..9bb7eb8 100644 --- a/examples/type-usage.rs +++ b/examples/type-usage.rs @@ -1,4 +1,4 @@ -//! examples/smallest.rs +//! examples/type-usage.rs #![no_main] #![no_std] diff --git a/macros/Cargo.toml b/macros/Cargo.toml index 8607ce5..203a2bb 100644 --- a/macros/Cargo.toml +++ b/macros/Cargo.toml @@ -22,6 +22,4 @@ proc-macro2 = "1" proc-macro-error = "1" quote = "1" syn = "1" -# rtic-syntax = "0.5.0-alpha.2" -rtic-syntax = { path = "../../rtic-syntax", version = "0.5.0-alpha.2" } - +rtic-syntax = "0.5.0-alpha.2" diff --git a/macros/src/codegen/module.rs b/macros/src/codegen/module.rs index ac69a80..50146c0 100644 --- a/macros/src/codegen/module.rs +++ b/macros/src/codegen/module.rs @@ -414,17 +414,11 @@ pub fn codegen( let tq = unsafe { &mut *#app_path::#tq.as_mut_ptr() }; - if let Some(mono) = #app_path::#m_ident.as_mut() { - tq.enqueue_unchecked( - nr, - || #enable_interrupt, - || #pend, - mono) - } else { - // We can only use the timer queue if `init` has returned, and it - // writes the `Some(monotonic)` we are accessing here. - core::hint::unreachable_unchecked() - } + tq.enqueue_unchecked( + nr, + || #enable_interrupt, + || #pend, + #app_path::#m_ident.as_mut()); Ok(SpawnHandle { marker }) }) diff --git a/src/tq.rs b/src/tq.rs index 3864025..985e0f8 100644 --- a/src/tq.rs +++ b/src/tq.rs @@ -42,7 +42,7 @@ where nr: NotReady, enable_interrupt: F1, pend_handler: F2, - mono: &mut Mono, + mono: Option<&mut Mono>, ) where F1: FnOnce(), F2: FnOnce(), @@ -57,7 +57,9 @@ where if if_heap_max_greater_than_nr { if Mono::DISABLE_INTERRUPT_ON_EMPTY_QUEUE && self.0.is_empty() { - mono.enable_timer(); + if let Some(mono) = mono { + mono.enable_timer(); + } enable_interrupt(); } -- cgit v1.2.3