diff options
Diffstat (limited to 'examples/cfg.rs')
-rw-r--r-- | examples/cfg.rs | 58 |
1 files changed, 38 insertions, 20 deletions
diff --git a/examples/cfg.rs b/examples/cfg.rs index 3f4ca904..d49f54c7 100644 --- a/examples/cfg.rs +++ b/examples/cfg.rs @@ -5,40 +5,55 @@ #![no_main] #![no_std] -extern crate panic_semihosting; - +use cortex_m_semihosting::debug; #[cfg(debug_assertions)] use cortex_m_semihosting::hprintln; -use rtfm::app; +use panic_semihosting as _; + +#[rtic::app(device = lm3s6965)] +mod app { + #[resources] + struct Resources { + #[cfg(debug_assertions)] // <- `true` when using the `dev` profile + #[init(0)] + count: u32, + } -#[app(device = lm3s6965)] -const APP: () = { - #[cfg(debug_assertions)] // <- `true` when using the `dev` profile - static mut COUNT: u32 = 0; + #[init(spawn = [foo])] + fn init(cx: init::Context) -> init::LateResources { + cx.spawn.foo().unwrap(); + cx.spawn.foo().unwrap(); - #[init] - fn init() { - // .. + init::LateResources {} + } + + #[idle] + fn idle(_: idle::Context) -> ! { + debug::exit(debug::EXIT_SUCCESS); + + loop { + cortex_m::asm::nop(); + } } - #[task(priority = 3, resources = [COUNT], spawn = [log])] - fn foo() { + #[task(capacity = 2, resources = [count], spawn = [log])] + fn foo(_cx: foo::Context) { #[cfg(debug_assertions)] { - *resources.COUNT += 1; + *_cx.resources.count += 1; - spawn.log(*resources.COUNT).ok(); + _cx.spawn.log(*_cx.resources.count).unwrap(); } // this wouldn't compile in `release` mode - // *resources.COUNT += 1; + // *_cx.resources.count += 1; // .. } #[cfg(debug_assertions)] - #[task] - fn log(n: u32) { + #[task(capacity = 2)] + fn log(_: log::Context, n: u32) { hprintln!( "foo has been called {} time{}", n, @@ -47,8 +62,11 @@ const APP: () = { .ok(); } + // RTIC requires that unused interrupts are declared in an extern block when + // using software tasks; these free interrupts will be used to dispatch the + // software tasks. extern "C" { - fn UART0(); - fn UART1(); + fn SSI0(); + fn QEI0(); } -}; +} |