diff options
Diffstat (limited to 'examples/t-resource.rs')
-rw-r--r-- | examples/t-resource.rs | 62 |
1 files changed, 33 insertions, 29 deletions
diff --git a/examples/t-resource.rs b/examples/t-resource.rs index 6e83069d..27324910 100644 --- a/examples/t-resource.rs +++ b/examples/t-resource.rs @@ -1,4 +1,4 @@ -//! [compile-pass] Check code generation of resources +//! [compile-pass] Check code generation of shared resources #![deny(unsafe_code)] #![deny(warnings)] @@ -9,73 +9,77 @@ use panic_semihosting as _; #[rtic::app(device = lm3s6965)] mod app { - #[resources] - struct Resources { - #[init(0)] - o1: u32, // init - #[init(0)] + #[shared] + struct Shared { o2: u32, // idle - #[init(0)] o3: u32, // EXTI0 - #[init(0)] o4: u32, // idle - #[init(0)] o5: u32, // EXTI1 - #[init(0)] - o6: u32, // init - #[init(0)] s1: u32, // idle & uart0 - #[init(0)] s2: u32, // uart0 & uart1 - #[init(0)] s3: u32, // idle & uart0 } + #[local] + struct Local {} + #[init] - fn init(_: init::Context) -> (init::LateResources, init::Monotonics) { - (init::LateResources {}, init::Monotonics()) + fn init(_: init::Context) -> (Shared, Local, init::Monotonics) { + ( + Shared { + o2: 0, + o3: 0, + o4: 0, + o5: 0, + s1: 0, + s2: 0, + s3: 0, + }, + Local {}, + init::Monotonics(), + ) } - #[idle(resources = [o2, &o4, s1, &s3])] + #[idle(shared = [o2, &o4, s1, &s3])] fn idle(mut c: idle::Context) -> ! { // owned by `idle` == `&'static mut` - let _: resources::o2 = c.resources.o2; + let _: shared_resources::o2 = c.shared.o2; // owned by `idle` == `&'static` if read-only - let _: &u32 = c.resources.o4; + let _: &u32 = c.shared.o4; // shared with `idle` == `Mutex` - c.resources.s1.lock(|_| {}); + c.shared.s1.lock(|_| {}); // `&` if read-only - let _: &u32 = c.resources.s3; + let _: &u32 = c.shared.s3; loop { cortex_m::asm::nop(); } } - #[task(binds = UART0, resources = [o3, s1, s2, &s3])] + #[task(binds = UART0, shared = [o3, s1, s2, &s3])] fn uart0(c: uart0::Context) { // owned by interrupt == `&mut` - let _: resources::o3 = c.resources.o3; + let _: shared_resources::o3 = c.shared.o3; // no `Mutex` proxy when access from highest priority task - let _: resources::s1 = c.resources.s1; + let _: shared_resources::s1 = c.shared.s1; // no `Mutex` proxy when co-owned by cooperative (same priority) tasks - let _: resources::s2 = c.resources.s2; + let _: shared_resources::s2 = c.shared.s2; // `&` if read-only - let _: &u32 = c.resources.s3; + let _: &u32 = c.shared.s3; } - #[task(binds = UART1, resources = [s2, &o5])] + #[task(binds = UART1, shared = [s2, &o5])] fn uart1(c: uart1::Context) { // owned by interrupt == `&` if read-only - let _: &u32 = c.resources.o5; + let _: &u32 = c.shared.o5; // no `Mutex` proxy when co-owned by cooperative (same priority) tasks - let _: resources::s2 = c.resources.s2; + let _: shared_resources::s2 = c.shared.s2; } } |