diff options
Diffstat (limited to 'src/examples/_2_two_tasks.rs')
-rw-r--r-- | src/examples/_2_two_tasks.rs | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/examples/_2_two_tasks.rs b/src/examples/_2_two_tasks.rs new file mode 100644 index 00000000..9eb61b18 --- /dev/null +++ b/src/examples/_2_two_tasks.rs @@ -0,0 +1,79 @@ +//! Two tasks running at the same priority with access to the same resource +//! +//! ``` +//! +//! #![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, Threshold}; +//! +//! app! { +//! device: stm32f103xx, +//! +//! // Resources that are plain data, not peripherals +//! resources: { +//! // Declaration of resources looks like the declaration of `static` +//! // variables +//! static COUNTER: u64 = 0; +//! }, +//! +//! tasks: { +//! SYS_TICK: { +//! priority: 1, +//! // Both this task and TIM2 have access to the `COUNTER` resource +//! resources: [COUNTER], +//! }, +//! +//! // An interrupt as a task +//! TIM2: { +//! // For interrupts the `enabled` field must be specified. It +//! // indicates if the interrupt will be enabled or disabled once +//! // `idle` starts +//! enabled: true, +//! priority: 1, +//! resources: [COUNTER], +//! }, +//! }, +//! } +//! +//! // when data resources are declared in the top `resources` field, `init` will +//! // have full access to them +//! fn init(_p: init::Peripherals, _r: init::Resources) { +//! // .. +//! } +//! +//! fn idle() -> ! { +//! loop { +//! rtfm::wfi(); +//! } +//! } +//! +//! task!(SYS_TICK, sys_tick); +//! +//! // As both tasks are running at the same priority one can't preempt the other. +//! // Thus both tasks have direct access to the resource +//! fn sys_tick(_t: &mut Threshold, r: SYS_TICK::Resources) { +//! // .. +//! +//! **r.COUNTER += 1; +//! +//! // .. +//! } +//! +//! task!(TIM2, tim2); +//! +//! fn tim2(_t: &mut Threshold, r: TIM2::Resources) { +//! // .. +//! +//! **r.COUNTER += 1; +//! +//! // .. +//! } +//! ``` +// Auto-generated. Do not modify. |