aboutsummaryrefslogtreecommitdiff
path: root/src/examples/_2_two_tasks.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/examples/_2_two_tasks.rs')
-rw-r--r--src/examples/_2_two_tasks.rs79
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.