diff options
Diffstat (limited to 'examples/t-late-not-send.rs')
-rw-r--r-- | examples/t-late-not-send.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/examples/t-late-not-send.rs b/examples/t-late-not-send.rs new file mode 100644 index 00000000..345d9aef --- /dev/null +++ b/examples/t-late-not-send.rs @@ -0,0 +1,41 @@ +//! [compile-pass] late resources don't need to be `Send` if they are owned by `idle` + +#![no_main] +#![no_std] + +use core::marker::PhantomData; + +use panic_halt as _; + +pub struct NotSend { + _0: PhantomData<*const ()>, +} + +#[rtic::app(device = lm3s6965)] +mod app { + use super::NotSend; + + #[resources] + struct Resources { + x: NotSend, + #[init(None)] + y: Option<NotSend>, + } + + #[init(resources = [y])] + fn init(c: init::Context) -> init::LateResources { + // equivalent to late resource initialization + *c.resources.y = Some(NotSend { _0: PhantomData }); + + init::LateResources { + x: NotSend { _0: PhantomData }, + } + } + + #[idle(resources = [x, y])] + fn idle(_: idle::Context) -> ! { + loop { + cortex_m::asm::nop(); + } + } +} |