aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/modules.rs93
1 files changed, 93 insertions, 0 deletions
diff --git a/examples/modules.rs b/examples/modules.rs
new file mode 100644
index 00000000..5b23d0e0
--- /dev/null
+++ b/examples/modules.rs
@@ -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;
+ }
+}