diff options
| author | Jorge Aparicio <jorge@japaric.io> | 2017-07-23 22:11:07 -0500 |
|---|---|---|
| committer | Jorge Aparicio <jorge@japaric.io> | 2017-07-23 22:18:44 -0500 |
| commit | 4139b47d4bb63f997ccd6890e61677b073071344 (patch) | |
| tree | 6eeb7d915587596b24efe5f2eb014b1a523499da /tests/cfail | |
| parent | 749ce810d5525dbbe3c7b2750a9413203112ccf3 (diff) | |
add cfail test: borrow can't escape critical sections
Diffstat (limited to 'tests/cfail')
| -rw-r--r-- | tests/cfail/critical-section.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/cfail/critical-section.rs b/tests/cfail/critical-section.rs new file mode 100644 index 0000000..3c8f0a9 --- /dev/null +++ b/tests/cfail/critical-section.rs @@ -0,0 +1,50 @@ +#![deny(warnings)] +#![feature(const_fn)] +#![feature(proc_macro)] +#![no_std] + +#[macro_use(task)] +extern crate cortex_m_rtfm as rtfm; +extern crate stm32f103xx; + +use rtfm::{app, Resource, Threshold}; + +app! { + device: stm32f103xx, + + resources: { + static STATE: bool = false; + }, + + idle: { + resources: [STATE], + }, + + tasks: { + EXTI0: { + enabled: true, + priority: 1, + resources: [STATE], + }, + }, +} + +fn init(_p: init::Peripherals, _r: init::Resources) {} + +fn idle(t: &mut Threshold, r: idle::Resources) -> ! { + let state = rtfm::atomic(|cs| { + // ERROR borrow can't escape this *global* critical section + r.STATE.borrow(cs) //~ error cannot infer an appropriate lifetime + }); + + let state = r.STATE.claim(t, |state, _t| { + // ERROR borrow can't escape this critical section + state //~ error cannot infer an appropriate lifetime + }); + + loop {} +} + +task!(EXTI0, exti0); + +fn exti0(_t: &mut Threshold, _r: EXTI0::Resources) {} |
