mirror of
https://github.com/rtic-rs/rtic.git
synced 2024-11-27 14:04:56 +01:00
49 lines
1.2 KiB
Rust
49 lines
1.2 KiB
Rust
//! 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();
|
|
}
|
|
}
|