diff options
Diffstat (limited to 'examples/zero-tasks.rs')
-rw-r--r-- | examples/zero-tasks.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/examples/zero-tasks.rs b/examples/zero-tasks.rs new file mode 100644 index 00000000..13201677 --- /dev/null +++ b/examples/zero-tasks.rs @@ -0,0 +1,49 @@ +//! Minimal example with zero tasks + +#![deny(unsafe_code)] +#![feature(proc_macro)] // IMPORTANT always include this feature gate +#![no_std] + +extern crate cortex_m_rtfm as rtfm; // IMPORTANT always do this rename +extern crate stm32f103xx; // the device crate + +// import the procedural macro +use rtfm::app; + +// This macro call indicates that this is a RTFM application +// +// This macro will expand to a `main` function so you don't need to supply +// `main` yourself. +app! { + // this is a path to the device crate + device: stm32f103xx, +} + +// The initialization phase. +// +// This runs first and within a *global* critical section. Nothing can preempt +// this function. +fn init(p: init::Peripherals) { + // This function has access to all the peripherals of the device + p.GPIOA; + p.RCC; + // .. + + // You'll hit this breakpoint first + rtfm::bkpt(); +} + +// The idle loop. +// +// This runs afterwards and has a priority of 0. All tasks can preempt this +// function. This function can never return so it must contain some sort of +// endless loop. +fn idle() -> ! { + // And then this breakpoint + rtfm::bkpt(); + + loop { + // This puts the processor to sleep until there's a task to service + rtfm::wfi(); + } +} |