diff options
| author | Jorge Aparicio <jorge@japaric.io> | 2017-07-18 15:14:39 -0500 |
|---|---|---|
| committer | Jorge Aparicio <jorge@japaric.io> | 2017-07-18 15:14:39 -0500 |
| commit | 1f1cf84ab41ec26ac58c31260667f97507def0d0 (patch) | |
| tree | 66c402bd045e1741d3b613dbab2b526d8e49f7c7 /tests/cfail/lock.rs | |
| parent | e9788ff9b69a3725f39db4aa31c36946b53bea64 (diff) | |
add cfail tests
Diffstat (limited to 'tests/cfail/lock.rs')
| -rw-r--r-- | tests/cfail/lock.rs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/cfail/lock.rs b/tests/cfail/lock.rs new file mode 100644 index 0000000..f93b79a --- /dev/null +++ b/tests/cfail/lock.rs @@ -0,0 +1,67 @@ +#![deny(warnings)] +#![feature(const_fn)] +#![feature(proc_macro)] + +#[macro_use(task)] +extern crate cortex_m_rtfm as rtfm; +extern crate stm32f103xx; + +use rtfm::{app, Threshold}; + +app! { + device: stm32f103xx, + + resources: { + STATE: bool = false; + MAX: u8 = 0; + }, + + tasks: { + EXTI0: { + enabled: true, + priority: 1, + resources: [MAX, STATE], + }, + + EXTI1: { + enabled: true, + priority: 2, + resources: [STATE], + }, + + EXTI2: { + enabled: true, + priority: 16, + resources: [MAX], + }, + }, +} + +fn init(_p: init::Peripherals, _r: init::Resources) {} + +fn idle() -> ! { + loop {} +} + +task!(EXTI0, exti0); + +fn exti0(mut t: Threshold, r: EXTI0::Resources) { + // OK need to lock to access the resource + if r.STATE.claim(&mut t, |state, _| **state) {} + + // OK can claim a resource with maximum ceiling + r.MAX.claim_mut(&mut t, |max, _| **max += 1); +} + +task!(EXTI1, exti1); + +fn exti1(mut t: Threshold, r: EXTI1::Resources) { + // ERROR no need to lock. Has direct access because priority == ceiling + if r.STATE.claim(&mut t, |state, _| **state) { + //~^ error no method named `claim` found for type + } + + if **r.STATE { + // OK + } +} |
