Skip to content
Snippets Groups Projects
Select Git revision
  • 2d80f3631bc3bf382ae24c25dbf8ff33af2ad430
  • master default
  • dma
  • v0.2.0
  • v0.1.1
  • v0.1.0
6 results

_6_full_syntax.rs

Blame
  • _6_full_syntax.rs 2.30 KiB
    //! A showcase of the `app!` macro syntax
    //!
    //! ```
    //! #![deny(unsafe_code)]
    //! #![feature(proc_macro)]
    //! #![no_std]
    //! 
    //! extern crate cortex_m_rtfm as rtfm;
    //! extern crate stm32f103xx;
    //! 
    //! use rtfm::{app, Threshold};
    //! 
    //! app! {
    //!     device: stm32f103xx,
    //! 
    //!     resources: {
    //!         static CO_OWNED: u32 = 0;
    //!         static ON: bool = false;
    //!         static OWNED: bool = false;
    //!         static SHARED: bool = false;
    //!     },
    //! 
    //!     init: {
    //!         // This is the path to the `init` function
    //!         //
    //!         // `init` doesn't necessarily has to be in the root of the crate
    //!         path: main::init,
    //!     },
    //! 
    //!     idle: {
    //!         // This is a path to the `idle` function
    //!         //
    //!         // `idle` doesn't necessarily has to be in the root of the crate
    //!         path: main::idle,
    //!         resources: [OWNED, SHARED],
    //!     },
    //! 
    //!     tasks: {
    //!         SYS_TICK: {
    //!             path: sys_tick,
    //!             // If omitted priority is assumed to be 1
    //!             // priority: 1,
    //!             resources: [CO_OWNED, ON, SHARED],
    //!         },
    //! 
    //!         TIM2: {
    //!             // Tasks are enabled, between `init` and `idle`, by default but they
    //!             // can start disabled if `false` is specified here
    //!             enabled: false,
    //!             path: tim2,
    //!             priority: 1,
    //!             resources: [CO_OWNED],
    //!         },
    //!     },
    //! }
    //! 
    //! mod main {
    //!     use rtfm::{self, Resource, Threshold};
    //! 
    //!     pub fn init(_p: ::init::Peripherals, _r: ::init::Resources) {}
    //! 
    //!     pub fn idle(t: &mut Threshold, mut r: ::idle::Resources) -> ! {
    //!         loop {
    //!             *r.OWNED != *r.OWNED;
    //! 
    //!             if *r.OWNED {
    //!                 if r.SHARED.claim(t, |shared, _| **shared) {
    //!                     rtfm::wfi();
    //!                 }
    //!             } else {