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

late-resources.rs

Blame
  • modules.rs 1.48 KiB
    //! Using paths and modules
    #![deny(unsafe_code)]
    #![feature(const_fn)]
    #![feature(proc_macro)]
    #![no_std]
    
    extern crate cortex_m_rtfm as rtfm;
    extern crate stm32f103xx;
    
    use rtfm::app;
    
    app! {
        device: stm32f103xx,
    
        resources: {
            static CO_OWNED: u32 = 0;
            static ON: bool = false;
            static OWNED: bool = false;
            static SHARED: bool = false;
        },
    
        init: {
            path: main::init,
        },
    
        idle: {
            path: main::idle,
            resources: [OWNED, SHARED],
        },
    
        tasks: {
            SYS_TICK: {
                path: tasks::sys_tick,
                resources: [CO_OWNED, ON, SHARED],
            },
    
            TIM2: {
                path: tasks::tim2,
                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 {
                    r.SHARED.claim_mut(t, |shared, _| **shared = !**shared);
                }
            }
        }
    }
    
    pub mod tasks {
        use rtfm::Threshold;
    
        pub fn sys_tick(_t: &mut Threshold, r: ::SYS_TICK::Resources) {
            **r.ON = !**r.ON;
    
            **r.CO_OWNED += 1;
        }
    
        pub fn tim2(_t: &mut Threshold, r: ::TIM2::Resources) {
            **r.CO_OWNED += 1;
        }
    }