aboutsummaryrefslogtreecommitdiff
path: root/examples/one-task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/one-task.rs')
-rw-r--r--examples/one-task.rs38
1 files changed, 19 insertions, 19 deletions
diff --git a/examples/one-task.rs b/examples/one-task.rs
index 8cfe089c..e1d598dd 100644
--- a/examples/one-task.rs
+++ b/examples/one-task.rs
@@ -1,12 +1,10 @@
//! An application with one task
-
#![deny(unsafe_code)]
#![feature(const_fn)]
#![feature(proc_macro)]
#![no_std]
extern crate cortex_m;
-#[macro_use(task)]
extern crate cortex_m_rtfm as rtfm;
extern crate stm32f103xx;
@@ -16,6 +14,15 @@ use rtfm::{app, Threshold};
app! {
device: stm32f103xx,
+ // Here resources are declared
+ //
+ // Resources are static variables that are safe to share across tasks
+ resources: {
+ // declaration of resources looks exactly like declaration of static
+ // variables
+ static ON: bool = false;
+ },
+
// Here tasks are declared
//
// Each task corresponds to an interrupt or an exception. Every time the
@@ -24,7 +31,11 @@ app! {
tasks: {
// Here we declare that we'll use the SYS_TICK exception as a task
SYS_TICK: {
+ // Path to the task *handler*
+ path: sys_tick,
+
// This is the priority of the task.
+ //
// 1 is the lowest priority a task can have.
// The maximum priority is determined by the number of priority bits
// the device has. This device has 4 priority bits so 16 is the
@@ -34,12 +45,12 @@ app! {
// These are the *resources* associated with this task
//
// The peripherals that the task needs can be listed here
- resources: [GPIOC],
+ resources: [GPIOC, ON],
},
}
}
-fn init(p: init::Peripherals) {
+fn init(p: init::Peripherals, _r: init::Resources) {
// power on GPIOC
p.RCC.apb2enr.modify(|_, w| w.iopcen().enabled());
@@ -62,26 +73,15 @@ fn idle() -> ! {
}
}
-// This binds the `sys_tick` handler to the `SYS_TICK` task
-//
-// This particular handler has local state associated to it. The value of the
-// `STATE` variable will be preserved across invocations of this handler
-task!(SYS_TICK, sys_tick, Locals {
- static STATE: bool = false;
-});
-
// This is the task handler of the SYS_TICK exception
//
-// `t` is the preemption threshold token. We won't use it this time.
-// `l` is the data local to this task. The type here must match the one declared
-// in `task!`.
// `r` is the resources this task has access to. `SYS_TICK::Resources` has one
-// field per resource declared in `app!`.
-fn sys_tick(_t: &mut Threshold, l: &mut Locals, r: SYS_TICK::Resources) {
+// field per every resource declared in `app!`.
+fn sys_tick(_t: &mut Threshold, r: SYS_TICK::Resources) {
// toggle state
- *l.STATE = !*l.STATE;
+ **r.ON = !**r.ON;
- if *l.STATE {
+ if **r.ON {
// set the pin PC13 high
r.GPIOC.bsrr.write(|w| w.bs13().set());
} else {