1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
//! Minimal example with zero tasks //! //! ``` //! #![deny(unsafe_code)] //! #![deny(warnings)] //! // IMPORTANT always include this feature gate //! #![feature(proc_macro)] //! #![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 the 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.core.SYST; //! p.device.GPIOA; //! p.device.RCC; //! // .. //! } //! //! // The idle loop. //! // //! // This runs after `init` 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() -> ! { //! loop { //! // This puts the processor to sleep until there's a task to service //! rtfm::wfi(); //! } //! } //! ``` // Auto-generated. Do not modify.