aboutsummaryrefslogtreecommitdiff
path: root/examples/types.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/types.rs')
-rw-r--r--examples/types.rs75
1 files changed, 43 insertions, 32 deletions
diff --git a/examples/types.rs b/examples/types.rs
index c1b8cd6..251d004 100644
--- a/examples/types.rs
+++ b/examples/types.rs
@@ -5,51 +5,62 @@
#![no_main]
#![no_std]
-extern crate panic_semihosting;
-
use cortex_m_semihosting::debug;
-use rtfm::{app, Exclusive, Instant};
+use panic_semihosting as _;
+use rtic::cyccnt;
-#[app(device = lm3s6965)]
-const APP: () = {
- static mut SHARED: u32 = 0;
+#[rtic::app(device = lm3s6965, peripherals = true, monotonic = rtic::cyccnt::CYCCNT)]
+mod app {
+ #[resources]
+ struct Resources {
+ #[init(0)]
+ shared: u32,
+ }
#[init(schedule = [foo], spawn = [foo])]
- fn init() {
- let _: Instant = start;
- let _: rtfm::Peripherals = core;
- let _: lm3s6965::Peripherals = device;
- let _: init::Schedule = schedule;
- let _: init::Spawn = spawn;
+ fn init(cx: init::Context) -> init::LateResources {
+ let _: cyccnt::Instant = cx.start;
+ let _: rtic::Peripherals = cx.core;
+ let _: lm3s6965::Peripherals = cx.device;
+ let _: init::Schedule = cx.schedule;
+ let _: init::Spawn = cx.spawn;
debug::exit(debug::EXIT_SUCCESS);
+
+ init::LateResources {}
}
- #[exception(schedule = [foo], spawn = [foo])]
- fn SVCall() {
- let _: Instant = start;
- let _: SVCall::Schedule = schedule;
- let _: SVCall::Spawn = spawn;
+ #[idle(schedule = [foo], spawn = [foo])]
+ fn idle(cx: idle::Context) -> ! {
+ let _: idle::Schedule = cx.schedule;
+ let _: idle::Spawn = cx.spawn;
+
+ loop {
+ cortex_m::asm::nop();
+ }
}
- #[interrupt(resources = [SHARED], schedule = [foo], spawn = [foo])]
- fn UART0() {
- let _: Instant = start;
- let _: resources::SHARED = resources.SHARED;
- let _: UART0::Schedule = schedule;
- let _: UART0::Spawn = spawn;
+ #[task(binds = UART0, resources = [shared], schedule = [foo], spawn = [foo])]
+ fn uart0(cx: uart0::Context) {
+ let _: cyccnt::Instant = cx.start;
+ let _: resources::shared = cx.resources.shared;
+ let _: uart0::Schedule = cx.schedule;
+ let _: uart0::Spawn = cx.spawn;
}
- #[task(priority = 2, resources = [SHARED], schedule = [foo], spawn = [foo])]
- fn foo() {
- let _: Instant = scheduled;
- let _: Exclusive<u32> = resources.SHARED;
- let _: foo::Resources = resources;
- let _: foo::Schedule = schedule;
- let _: foo::Spawn = spawn;
+ #[task(priority = 2, resources = [shared], schedule = [foo], spawn = [foo])]
+ fn foo(cx: foo::Context) {
+ let _: cyccnt::Instant = cx.scheduled;
+ let _: &mut u32 = cx.resources.shared;
+ let _: foo::Resources = cx.resources;
+ let _: foo::Schedule = cx.schedule;
+ let _: foo::Spawn = cx.spawn;
}
+ // 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 UART1();
+ fn SSI0();
}
-};
+}