diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/full-syntax.rs | 1 | ||||
-rw-r--r-- | examples/nested.rs | 14 | ||||
-rw-r--r-- | examples/one-task.rs | 19 | ||||
-rw-r--r-- | examples/preemption.rs | 8 | ||||
-rw-r--r-- | examples/two-tasks.rs | 4 |
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) { // .. } |