aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/full-syntax.rs1
-rw-r--r--examples/nested.rs14
-rw-r--r--examples/one-task.rs19
-rw-r--r--examples/preemption.rs8
-rw-r--r--examples/two-tasks.rs4
5 files changed, 17 insertions, 29 deletions
diff --git a/examples/full-syntax.rs b/examples/full-syntax.rs
index 20e8dfbc..9b6b394e 100644
--- a/examples/full-syntax.rs
+++ b/examples/full-syntax.rs
@@ -1,6 +1,5 @@
//! A showcase of the `app!` macro syntax
#![deny(unsafe_code)]
-#![feature(const_fn)]
#![feature(proc_macro)]
#![no_std]
diff --git a/examples/nested.rs b/examples/nested.rs
index 70131709..1c164f86 100644
--- a/examples/nested.rs
+++ b/examples/nested.rs
@@ -3,7 +3,6 @@
//! If you run this program you'll hit the breakpoints as indicated by the
//! letters in the comments: A, then B, then C, etc.
#![deny(unsafe_code)]
-#![feature(const_fn)]
#![feature(proc_macro)]
#![no_std]
@@ -59,13 +58,14 @@ fn idle() -> ! {
}
}
-fn exti0(t: &mut Threshold, r: EXTI0::Resources) {
+#[allow(non_snake_case)]
+fn exti0(
+ t: &mut Threshold,
+ EXTI0::Resources { mut LOW, mut HIGH }: EXTI0::Resources,
+) {
// Because this task has a priority of 1 the preemption threshold `t` also
// starts at 1
- let mut low = r.LOW;
- let mut high = r.HIGH;
-
// B
rtfm::bkpt();
@@ -73,7 +73,7 @@ fn exti0(t: &mut Threshold, r: EXTI0::Resources) {
rtfm::set_pending(Interrupt::EXTI1); // ~> exti1
// A claim creates a critical section
- low.claim_mut(t, |_low, t| {
+ LOW.claim_mut(t, |_low, t| {
// This claim increases the preemption threshold to 2
//
// 2 is just high enough to not race with task `exti1` for access to the
@@ -94,7 +94,7 @@ fn exti0(t: &mut Threshold, r: EXTI0::Resources) {
rtfm::bkpt();
// Claims can be nested
- high.claim_mut(t, |_high, _| {
+ HIGH.claim_mut(t, |_high, _| {
// This claim increases the preemption threshold to 3
// Now `exti2` can't preempt this task
diff --git a/examples/one-task.rs b/examples/one-task.rs
index 556177d0..e58d9fcd 100644
--- a/examples/one-task.rs
+++ b/examples/one-task.rs
@@ -1,6 +1,5 @@
//! An application with one task
#![deny(unsafe_code)]
-#![feature(const_fn)]
#![feature(proc_macro)]
#![no_std]
@@ -34,17 +33,6 @@ app! {
// Path to the task handler
path: sys_tick,
- // This is the priority of the task.
- //
- // 1 is the lowest priority a task can have, and the maximum
- // priority is determined by the number of priority bits the device
- // has. `stm32f103xx` has 4 priority bits so 16 is the maximum valid
- // value.
- //
- // You can omit this field. If you do the priority is assumed to be
- // 1.
- priority: 1,
-
// These are the resources this task has access to.
//
// A resource can be a peripheral like `GPIOC` or a static variable
@@ -54,7 +42,10 @@ app! {
}
}
-fn init(p: init::Peripherals, _r: init::Resources) {
+fn init(p: init::Peripherals, r: init::Resources) {
+ // `init` can modify all the `resources` declared in `app!`
+ r.ON;
+
// power on GPIOC
p.RCC.apb2enr.modify(|_, w| w.iopcen().enabled());
@@ -81,7 +72,7 @@ fn idle() -> ! {
//
// `_t` is the preemption threshold token. We won't use it in this program.
//
-// `r` is the set of resources this task has access to. `TIMER0_A1::Resources`
+// `r` is the set of resources this task has access to. `SYS_TICK::Resources`
// has one field per resource declared in `app!`.
fn sys_tick(_t: &mut Threshold, r: SYS_TICK::Resources) {
// toggle state
diff --git a/examples/preemption.rs b/examples/preemption.rs
index 256b9bdd..5fda37d5 100644
--- a/examples/preemption.rs
+++ b/examples/preemption.rs
@@ -1,6 +1,5 @@
//! Two tasks running at *different* priorities with access to the same resource
#![deny(unsafe_code)]
-#![feature(const_fn)]
#![feature(proc_macro)]
#![no_std]
@@ -58,8 +57,11 @@ fn tim2(t: &mut Threshold, mut r: TIM2::Resources) {
// As this task runs at lower priority it needs a critical section to
// prevent `sys_tick` from preempting it while it modifies this resource
// data. The critical section is required to prevent data races which can
- // lead to undefined behavior
- r.COUNTER.claim_mut(t, |counter, _t| { **counter += 1; });
+ // lead to undefined behavior.
+ r.COUNTER.claim_mut(t, |counter, _t| {
+ // `claim_mut` creates a critical section
+ **counter += 1;
+ });
// ..
}
diff --git a/examples/two-tasks.rs b/examples/two-tasks.rs
index ea059a02..2200e5ba 100644
--- a/examples/two-tasks.rs
+++ b/examples/two-tasks.rs
@@ -1,7 +1,5 @@
//! Two tasks running at the *same* priority with access to the same resource
-
#![deny(unsafe_code)]
-#![feature(const_fn)]
#![feature(proc_macro)]
#![no_std]
@@ -31,8 +29,6 @@ app! {
},
}
-// 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) {
// ..
}