mirror of
https://github.com/rtic-rs/rtic.git
synced 2024-12-25 03:19:34 +01:00
add example about placing init, idle and tasks in modules
This commit is contained in:
parent
bf4eabf287
commit
e56ab1334e
1 changed files with 93 additions and 0 deletions
93
examples/modules.rs
Normal file
93
examples/modules.rs
Normal file
|
@ -0,0 +1,93 @@
|
|||
//! Using paths and modules
|
||||
|
||||
#![deny(unsafe_code)]
|
||||
#![feature(const_fn)]
|
||||
#![feature(proc_macro)]
|
||||
#![no_std]
|
||||
|
||||
#[macro_use(task)]
|
||||
extern crate cortex_m_rtfm as rtfm;
|
||||
extern crate stm32f103xx;
|
||||
|
||||
use rtfm::app;
|
||||
|
||||
app! {
|
||||
device: stm32f103xx,
|
||||
|
||||
resources: {
|
||||
static CO_OWNED: u32 = 0;
|
||||
static OWNED: bool = false;
|
||||
static SHARED: bool = false;
|
||||
},
|
||||
|
||||
init: {
|
||||
path: main::init,
|
||||
},
|
||||
|
||||
idle: {
|
||||
locals: {
|
||||
static COUNTER: u32 = 0;
|
||||
},
|
||||
path: main::idle,
|
||||
resources: [OWNED, SHARED],
|
||||
},
|
||||
|
||||
tasks: {
|
||||
SYS_TICK: {
|
||||
priority: 1,
|
||||
resources: [CO_OWNED, SHARED],
|
||||
},
|
||||
|
||||
TIM2: {
|
||||
enabled: true,
|
||||
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,
|
||||
l: &mut ::idle::Locals,
|
||||
mut r: ::idle::Resources,
|
||||
) -> ! {
|
||||
loop {
|
||||
*l.COUNTER += 1;
|
||||
|
||||
**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;
|
||||
|
||||
task!(SYS_TICK, sys_tick, Locals {
|
||||
static STATE: bool = true;
|
||||
});
|
||||
|
||||
fn sys_tick(_t: &mut Threshold, l: &mut Locals, r: ::SYS_TICK::Resources) {
|
||||
*l.STATE = !*l.STATE;
|
||||
|
||||
**r.CO_OWNED += 1;
|
||||
}
|
||||
|
||||
task!(TIM2, tim2);
|
||||
|
||||
fn tim2(_t: &mut Threshold, r: ::TIM2::Resources) {
|
||||
**r.CO_OWNED += 1;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue