diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/cfail.rs | 16 | ||||
-rw-r--r-- | tests/cfail/access.rs | 35 | ||||
-rw-r--r-- | tests/cfail/ceiling.rs | 29 | ||||
-rw-r--r-- | tests/cfail/lock.rs | 36 | ||||
-rw-r--r-- | tests/cfail/peripherals-alias-1.rs | 68 | ||||
-rw-r--r-- | tests/cfail/peripherals-alias-2.rs | 74 | ||||
-rw-r--r-- | tests/cfail/race-1.rs | 42 | ||||
-rw-r--r-- | tests/cfail/race-2.rs | 43 | ||||
-rw-r--r-- | tests/cfail/raise.rs | 24 | ||||
-rw-r--r-- | tests/cfail/tasks-p0.rs | 92 | ||||
-rw-r--r-- | tests/cfail/tasks-same-handler.rs | 98 | ||||
-rw-r--r-- | tests/cfail/tasks-wrong-idle.rs | 89 | ||||
-rw-r--r-- | tests/cfail/tasks-wrong-init.rs | 91 | ||||
-rw-r--r-- | tests/cfail/tasks-wrong-priority.rs | 91 | ||||
-rw-r--r-- | tests/cfail/tasks-wrong-task.rs | 91 | ||||
-rw-r--r-- | tests/cfail/tasks-wrong-threshold.rs | 91 | ||||
-rw-r--r-- | tests/cfail/token-transfer.rs | 159 |
17 files changed, 0 insertions, 1169 deletions
diff --git a/tests/cfail.rs b/tests/cfail.rs deleted file mode 100644 index 44c982ce..00000000 --- a/tests/cfail.rs +++ /dev/null @@ -1,16 +0,0 @@ -extern crate compiletest_rs as compiletest; - -use std::path::PathBuf; - -use compiletest::common::Mode; - -#[test] -fn cfail() { - let mut config = compiletest::default_config(); - config.mode = Mode::CompileFail; - config.src_base = PathBuf::from(format!("tests/cfail")); - config.target_rustcflags = - Some("-L target/debug -L target/debug/deps ".to_string()); - - compiletest::run_tests(&config); -} diff --git a/tests/cfail/access.rs b/tests/cfail/access.rs deleted file mode 100644 index b35fb371..00000000 --- a/tests/cfail/access.rs +++ /dev/null @@ -1,35 +0,0 @@ -extern crate cortex_m_rtfm as rtfm; - -use rtfm::{C1, C2, C3, C4, C5, P2, Resource, T2}; - -static R1: Resource<i32, C4> = Resource::new(0); -static R2: Resource<i32, C3> = Resource::new(0); -static R3: Resource<i32, C4> = Resource::new(0); -static R4: Resource<i32, C5> = Resource::new(0); -static R5: Resource<i32, C1> = Resource::new(0); -static R6: Resource<i32, C2> = Resource::new(0); - -fn j1(prio: P2, thr: T2) { - thr.raise( - &R1, |thr| { - // NOTE PT = Preemption Threshold, TP = Task Priority - - // CAN access a resource with ceiling RC when PT > RC - let r2 = R2.access(&prio, thr); - - // CAN access a resource with ceiling RC when PT == RC - let r3 = R3.access(&prio, thr); - - // CAN'T access a resource with ceiling RC when PT < RC - let r4 = R4.access(&prio, thr); - //~^ error - - // CAN'T access a resource with ceiling RC when RC < TP - let r5 = R5.access(&prio, thr); - //~^ error - - // CAN access a resource with ceiling RC when RC == tP - let r6 = R6.access(&prio, thr); - } - ); -} diff --git a/tests/cfail/ceiling.rs b/tests/cfail/ceiling.rs deleted file mode 100644 index 118dbcf6..00000000 --- a/tests/cfail/ceiling.rs +++ /dev/null @@ -1,29 +0,0 @@ -extern crate cortex_m_rtfm as rtfm; - -use rtfm::{C2, C3, P0, P2, Resource, T2}; - -static R1: Resource<(), C3> = Resource::new(()); - -fn j1(prio: P2, thr: T2) { - let t3 = thr.raise( - &R1, |thr| { - // forbidden: ceiling token can't outlive the critical section - thr //~ error - } - ); - - // Would be bad: lockless access to a resource with ceiling = 3 - let r2 = R1.access(&prio, t3); -} - -fn j2(prio: P0) { - let c16 = rtfm::atomic( - |c16| { - // forbidden: ceiling token can't outlive the critical section - c16 //~ error - }, - ); - - // Would be bad: lockless access to a resource with ceiling = 16 - let r1 = R1.access(&prio, c16); -} diff --git a/tests/cfail/lock.rs b/tests/cfail/lock.rs deleted file mode 100644 index 64753ac1..00000000 --- a/tests/cfail/lock.rs +++ /dev/null @@ -1,36 +0,0 @@ -extern crate cortex_m_rtfm as rtfm; - -use rtfm::{CMax, C2, P1, P2, P3, PMax, Resource, T1, T2, T3, TMax}; - -static R1: Resource<i32, C2> = Resource::new(0); - -// You don't need to raise the ceiling to access a resource with ceiling equal -// to the task priority. -fn j1(prio: P2, thr: T2) { - thr.raise(&R1, |_| {}); - //~^ error - - // OK - let r1 = R1.access(&prio, &thr); -} - -// You CAN access a resource with ceiling C from a task with priority P if C > P -// if you raise the preemption threshold first -fn j2(prio: P1, thr: T1) { - // OK - thr.raise(&R1, |thr| { let r1 = R1.access(&prio, thr); }) -} - -static R2: Resource<i32, CMax> = Resource::new(0); - -// Tasks with priority less than P16 can't access a resource with ceiling CMax -fn j4(prio: P1, thr: T1) { - thr.raise(&R2, |thr| {}); - //~^ error -} - -// Only tasks with priority P16 can directly access a resource with ceiling CMax -fn j5(prio: PMax, thr: TMax) { - // OK - let r2 = R2.access(&prio, &thr); -} diff --git a/tests/cfail/peripherals-alias-1.rs b/tests/cfail/peripherals-alias-1.rs deleted file mode 100644 index 124f3510..00000000 --- a/tests/cfail/peripherals-alias-1.rs +++ /dev/null @@ -1,68 +0,0 @@ -// error-pattern: has already been defined - -#![feature(used)] - -#[macro_use] -extern crate cortex_m_rtfm as rtfm; - -use rtfm::{P0, P1, T0, TMax}; -use device::interrupt::Exti0; - -peripherals!(device, { - GPIOA: Peripheral { - register_block: Gpioa, - ceiling: C1, - }, - // WRONG: peripheral alias - GPIOA: Peripheral { - register_block: Gpioa, - ceiling: C2, - }, -}); - -tasks!(device, {}); - -fn init(_: P0, _: &TMax) {} - -fn idle(_: P0, _: T0) -> ! { - loop {} -} - -fn j1(_task: Exti0, _prio: P1) {} - -// fake device crate -extern crate core; -extern crate cortex_m; - -mod device { - use cortex_m::peripheral::Peripheral; - - pub const GPIOA: Peripheral<Gpioa> = unsafe { Peripheral::new(0x0) }; - - pub struct Gpioa; - - pub mod interrupt { - use cortex_m::interrupt::Nr; - - extern "C" fn default_handler<T>(_: T) {} - - pub struct Handlers { - pub Exti0: extern "C" fn(Exti0), - } - - pub struct Exti0; - - pub enum Interrupt { - Exti0, - } - - unsafe impl Nr for Interrupt { - fn nr(&self) -> u8 { - 0 - } - } - - pub const DEFAULT_HANDLERS: Handlers = - Handlers { Exti0: default_handler }; - } -} diff --git a/tests/cfail/peripherals-alias-2.rs b/tests/cfail/peripherals-alias-2.rs deleted file mode 100644 index b50931ee..00000000 --- a/tests/cfail/peripherals-alias-2.rs +++ /dev/null @@ -1,74 +0,0 @@ -// error-pattern: symbol `GPIOA` is already defined - -#![feature(const_fn)] -#![feature(used)] - -#[macro_use] -extern crate cortex_m_rtfm as rtfm; - -use rtfm::{P0, P1, T0, TMax}; -use device::interrupt::Exti0; - -peripherals!(device, { - GPIOA: Peripheral { - register_block: Gpioa, - ceiling: C1, - }, -}); - -mod foo { - // WRONG: peripheral alias - peripherals!(device, { - GPIOA: Peripheral { - register_block: Gpioa, - ceiling: C2, - }, - }); -} - -tasks!(device, {}); - -fn init(_: P0, _: &TMax) {} - -fn idle(_: P0, _: T0) -> ! { - loop {} -} - -fn j1(_task: Exti0, _prio: P1) {} - -// fake device crate -extern crate core; -extern crate cortex_m; - -mod device { - use cortex_m::peripheral::Peripheral; - - pub const GPIOA: Peripheral<Gpioa> = unsafe { Peripheral::new(0x0) }; - - pub struct Gpioa; - - pub mod interrupt { - use cortex_m::interrupt::Nr; - - extern "C" fn default_handler<T>(_: T) {} - - pub struct Handlers { - pub Exti0: extern "C" fn(Exti0), - } - - pub struct Exti0; - - pub enum Interrupt { - Exti0, - } - - unsafe impl Nr for Interrupt { - fn nr(&self) -> u8 { - 0 - } - } - - pub const DEFAULT_HANDLERS: Handlers = - Handlers { Exti0: default_handler }; - } -} diff --git a/tests/cfail/race-1.rs b/tests/cfail/race-1.rs deleted file mode 100644 index 8d32c42e..00000000 --- a/tests/cfail/race-1.rs +++ /dev/null @@ -1,42 +0,0 @@ -extern crate cortex_m_rtfm as rtfm; - -use rtfm::{C2, P1, P3, Resource, T1, T3}; - -static R1: Resource<i32, C2> = Resource::new(0); - -fn j1(prio: P1, thr: T1) { - thr.raise( - &R1, |thr| { - let r1 = R1.access(&prio, thr); - - // `j2` preempts this critical section - rtfm::request(j2); - } - ); -} - -fn j2(_task: Task, prio: P3, thr: T3) { - rtfm::atomic( - |thr| { - // OK C2 (R1's ceiling) <= T16 (preemption threshold) - // BAD C2 (R1's ceiling) < P3 (j2's priority) - let r1 = R1.access(&prio, &thr); - //~^ error - }, - ); -} - -// glue -extern crate cortex_m; - -use cortex_m::ctxt::Context; -use cortex_m::interrupt::Nr; - -struct Task; - -unsafe impl Context for Task {} -unsafe impl Nr for Task { - fn nr(&self) -> u8 { - 0 - } -} diff --git a/tests/cfail/race-2.rs b/tests/cfail/race-2.rs deleted file mode 100644 index f44856e0..00000000 --- a/tests/cfail/race-2.rs +++ /dev/null @@ -1,43 +0,0 @@ -extern crate cortex_m_rtfm as rtfm; - -use rtfm::{C2, C4, P1, P3, Resource, T1, T3}; - -static R1: Resource<i32, C2> = Resource::new(0); -static R2: Resource<i32, C4> = Resource::new(0); - -fn j1(prio: P1, thr: T1) { - thr.raise( - &R1, |thr| { - let r1 = R1.access(&prio, thr); - - // `j2` preempts this critical section - rtfm::request(j2); - } - ); -} - -fn j2(_task: Task, prio: P3, thr: T3) { - thr.raise( - &R2, |thr| { - // OK C2 (R1's ceiling) <= T4 (preemption threshold) - // BAD C2 (R1's ceiling) < P3 (j2's priority) - let r1 = R1.access(&prio, thr); - //~^ error - } - ); -} - -// glue -extern crate cortex_m; - -use cortex_m::ctxt::Context; -use cortex_m::interrupt::Nr; - -struct Task; - -unsafe impl Context for Task {} -unsafe impl Nr for Task { - fn nr(&self) -> u8 { - 0 - } -} diff --git a/tests/cfail/raise.rs b/tests/cfail/raise.rs deleted file mode 100644 index 3d7e5647..00000000 --- a/tests/cfail/raise.rs +++ /dev/null @@ -1,24 +0,0 @@ -extern crate cortex_m_rtfm as rtfm; - -use rtfm::{C2, CMax, P1, P3, Resource, T1, T3}; - -static R1: Resource<i32, C2> = Resource::new(0); - -// You CAN'T use `raise` to lower the preemption level -fn j1(prio: P3, thr: T3) { - thr.raise(&R1, |thr| {}); - //~^ error -} - -static R2: Resource<i32, CMax> = Resource::new(0); - -// You CAN'T `raise` the preemption level to the maximum -fn j2(prio: P1, thr: T1) { - thr.raise(&R2, |thr| {}); - //~^ error - - // Instead use `rtfm::atomic` to access a resource with ceiling C16 - rtfm::atomic(|thr| { - let r2 = R2.access(&prio, thr); - }); -} diff --git a/tests/cfail/tasks-p0.rs b/tests/cfail/tasks-p0.rs deleted file mode 100644 index 588ac5d0..00000000 --- a/tests/cfail/tasks-p0.rs +++ /dev/null @@ -1,92 +0,0 @@ -// error-pattern: expected struct `typenum::Equal`, found struct `typenum::Greater` - -#![feature(used)] - -#[macro_use] -extern crate cortex_m_rtfm as rtfm; - -use rtfm::{P0, P1, T0, T1, TMax}; -use device::interrupt::Exti0; - -// WRONG: Tasks can't have a priority of 0. -// Only idle and init can have a priority of 0. -tasks!(device, { - j1: Task { - interrupt: Exti0, - priority: P0, - enabled: true, - }, -}); - -fn init(_: P0, _: &TMax) {} - -fn idle(_: P0, _: T0) -> ! { - loop {} -} - -fn j1(_task: Exti0, _prio: P1, _thr: T1) {} - -// fake device crate -extern crate core; -extern crate cortex_m; - -mod device { - pub mod interrupt { - use cortex_m::ctxt::Context; - use cortex_m::interrupt::Nr; - - extern "C" fn default_handler<T>(_: T) {} - - pub struct Handlers { - pub Exti0: extern "C" fn(Exti0), - pub Exti1: extern "C" fn(Exti1), - pub Exti2: extern "C" fn(Exti2), - } - - pub struct Exti0; - pub struct Exti1; - pub struct Exti2; - - pub enum Interrupt { - Exti0, - Exti1, - Exti2, - } - - unsafe impl Nr for Interrupt { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti0 {} - - unsafe impl Nr for Exti0 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti1 {} - - unsafe impl Nr for Exti1 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti2 {} - - unsafe impl Nr for Exti2 { - fn nr(&self) -> u8 { - 0 - } - } - - pub const DEFAULT_HANDLERS: Handlers = Handlers { - Exti0: default_handler, - Exti1: default_handler, - Exti2: default_handler, - }; - } -} diff --git a/tests/cfail/tasks-same-handler.rs b/tests/cfail/tasks-same-handler.rs deleted file mode 100644 index fdd8b063..00000000 --- a/tests/cfail/tasks-same-handler.rs +++ /dev/null @@ -1,98 +0,0 @@ -// error-pattern: field `Exti0` specified more than once - -#![feature(used)] - -#[macro_use] -extern crate cortex_m_rtfm as rtfm; - -use rtfm::{P0, P1, P2, T0, T1, T2, TMax}; -use device::interrupt::{Exti0, Exti1}; - -// WRONG: Two tasks mapped to the same interrupt handler -tasks!(device, { - j1: Task { - interrupt: Exti0, - priority: P1, - enabled: true, - }, - j2: Task { - interrupt: Exti0, - priority: P2, - enabled: true, - }, -}); - -fn init(_: P0, _: &TMax) {} - -fn idle(_: P0, _: T0) -> ! { - loop {} -} - -fn j1(_task: Exti0, _prio: P1, _thr: T1) {} - -fn j2(_task: Exti0, _prio: P2, _thr: T2) {} - -// fake device crate -extern crate core; -extern crate cortex_m; - -mod device { - pub mod interrupt { - use cortex_m::ctxt::Context; - use cortex_m::interrupt::Nr; - - extern "C" fn default_handler<T>(_: T) {} - - pub struct Handlers { - pub Exti0: extern "C" fn(Exti0), - pub Exti1: extern "C" fn(Exti1), - pub Exti2: extern "C" fn(Exti2), - } - - pub struct Exti0; - pub struct Exti1; - pub struct Exti2; - - pub enum Interrupt { - Exti0, - Exti1, - Exti2, - } - - unsafe impl Nr for Interrupt { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti0 {} - - unsafe impl Nr for Exti0 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti1 {} - - unsafe impl Nr for Exti1 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti2 {} - - unsafe impl Nr for Exti2 { - fn nr(&self) -> u8 { - 0 - } - } - - pub const DEFAULT_HANDLERS: Handlers = Handlers { - Exti0: default_handler, - Exti1: default_handler, - Exti2: default_handler, - }; - } -} diff --git a/tests/cfail/tasks-wrong-idle.rs b/tests/cfail/tasks-wrong-idle.rs deleted file mode 100644 index e6ff7790..00000000 --- a/tests/cfail/tasks-wrong-idle.rs +++ /dev/null @@ -1,89 +0,0 @@ -// error-pattern: mismatched types - -#![feature(used)] - -#[macro_use] -extern crate cortex_m_rtfm as rtfm; - -use device::interrupt::Exti0; -use rtfm::{P0, P1, T0, T1, TMax}; - -tasks!(device, { - j1: Task { - interrupt: Exti0, - priority: P1, - enabled: true, - }, -}); - -fn init(_: P0, _: &TMax) {} - -// WRONG. `idle` must have signature `fn(P0, C0) -> !` -fn idle(_: P0, _: T0) {} - -fn j1(_task: Exti0, _prio: P1, _thr: T1) {} - -// fake device crate -extern crate core; -extern crate cortex_m; - -mod device { - pub mod interrupt { - use cortex_m::ctxt::Context; - use cortex_m::interrupt::Nr; - - extern "C" fn default_handler<T>(_: T) {} - - pub struct Handlers { - pub Exti0: extern "C" fn(Exti0), - pub Exti1: extern "C" fn(Exti1), - pub Exti2: extern "C" fn(Exti2), - } - - pub struct Exti0; - pub struct Exti1; - pub struct Exti2; - - pub enum Interrupt { - Exti0, - Exti1, - Exti2, - } - - unsafe impl Nr for Interrupt { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti0 {} - - unsafe impl Nr for Exti0 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti1 {} - - unsafe impl Nr for Exti1 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti2 {} - - unsafe impl Nr for Exti2 { - fn nr(&self) -> u8 { - 0 - } - } - - pub const DEFAULT_HANDLERS: Handlers = Handlers { - Exti0: default_handler, - Exti1: default_handler, - Exti2: default_handler, - }; - } -} diff --git a/tests/cfail/tasks-wrong-init.rs b/tests/cfail/tasks-wrong-init.rs deleted file mode 100644 index d12b427d..00000000 --- a/tests/cfail/tasks-wrong-init.rs +++ /dev/null @@ -1,91 +0,0 @@ -// error-pattern: mismatched types - -#![feature(used)] - -#[macro_use] -extern crate cortex_m_rtfm as rtfm; - -use rtfm::{P0, P1, T0, T1, TMax}; -use device::interrupt::Exti0; - -tasks!(device, { - j1: Task { - interrupt: Exti0, - priority: P1, - enabled: true, - }, -}); - -// WRONG. `init` must have signature `fn(P0, &TMax)` -fn init(_: P0, _: &T1) {} - -fn idle(_: P0, _: T0) -> ! { - loop {} -} - -fn j1(_task: Exti0, _prio: P1, _thr: T1) {} - -// fake device crate -extern crate core; -extern crate cortex_m; - -mod device { - pub mod interrupt { - use cortex_m::ctxt::Context; - use cortex_m::interrupt::Nr; - - extern "C" fn default_handler<T>(_: T) {} - - pub struct Handlers { - pub Exti0: extern "C" fn(Exti0), - pub Exti1: extern "C" fn(Exti1), - pub Exti2: extern "C" fn(Exti2), - } - - pub struct Exti0; - pub struct Exti1; - pub struct Exti2; - - pub enum Interrupt { - Exti0, - Exti1, - Exti2, - } - - unsafe impl Nr for Interrupt { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti0 {} - - unsafe impl Nr for Exti0 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti1 {} - - unsafe impl Nr for Exti1 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti2 {} - - unsafe impl Nr for Exti2 { - fn nr(&self) -> u8 { - 0 - } - } - - pub const DEFAULT_HANDLERS: Handlers = Handlers { - Exti0: default_handler, - Exti1: default_handler, - Exti2: default_handler, - }; - } -} diff --git a/tests/cfail/tasks-wrong-priority.rs b/tests/cfail/tasks-wrong-priority.rs deleted file mode 100644 index 4d05d6b0..00000000 --- a/tests/cfail/tasks-wrong-priority.rs +++ /dev/null @@ -1,91 +0,0 @@ -// error-pattern: mismatched types - -#![feature(used)] - -#[macro_use] -extern crate cortex_m_rtfm as rtfm; - -use device::interrupt::Exti0; -use rtfm::{P0, P1, P2, T0, T1, T2, TMax}; - -tasks!(device, { - j1: Task { - interrupt: Exti0, - priority: P1, - enabled: true, - }, -}); - -fn init(_: P0, _: &TMax) {} - -fn idle(_: P0, _: T0) -> ! { - loop {} -} - -// Wrong priority token. Declared P1, got P2 -fn j1(_task: Exti0, _prio: P2, _thr: T2) {} - -// fake device crate -extern crate core; -extern crate cortex_m; - -mod device { - pub mod interrupt { - use cortex_m::ctxt::Context; - use cortex_m::interrupt::Nr; - - extern "C" fn default_handler<T>(_: T) {} - - pub struct Handlers { - pub Exti0: extern "C" fn(Exti0), - pub Exti1: extern "C" fn(Exti1), - pub Exti2: extern "C" fn(Exti2), - } - - pub struct Exti0; - pub struct Exti1; - pub struct Exti2; - - pub enum Interrupt { - Exti0, - Exti1, - Exti2, - } - - unsafe impl Nr for Interrupt { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti0 {} - - unsafe impl Nr for Exti0 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti1 {} - - unsafe impl Nr for Exti1 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti2 {} - - unsafe impl Nr for Exti2 { - fn nr(&self) -> u8 { - 0 - } - } - - pub const DEFAULT_HANDLERS: Handlers = Handlers { - Exti0: default_handler, - Exti1: default_handler, - Exti2: default_handler, - }; - } -} diff --git a/tests/cfail/tasks-wrong-task.rs b/tests/cfail/tasks-wrong-task.rs deleted file mode 100644 index 026290a7..00000000 --- a/tests/cfail/tasks-wrong-task.rs +++ /dev/null @@ -1,91 +0,0 @@ -// error-pattern: mismatched types - -#![feature(used)] - -#[macro_use] -extern crate cortex_m_rtfm as rtfm; - -use device::interrupt::{Exti0, Exti1}; -use rtfm::{P0, P1, T0, T1, TMax}; - -tasks!(device, { - j1: Task { - interrupt: Exti0, - priority: P1, - enabled: true, - }, -}); - -fn init(_: P0, _: &TMax) {} - -fn idle(_: P0, _: T0) -> ! { - loop {} -} - -// Wrong task token. Declared Exti0, got Exti1 -fn j1(_task: Exti1, _prio: P1, _thr: T1) {} - -// fake device crate -extern crate core; -extern crate cortex_m; - -mod device { - pub mod interrupt { - use cortex_m::ctxt::Context; - use cortex_m::interrupt::Nr; - - extern "C" fn default_handler<T>(_: T) {} - - pub struct Handlers { - pub Exti0: extern "C" fn(Exti0), - pub Exti1: extern "C" fn(Exti1), - pub Exti2: extern "C" fn(Exti2), - } - - pub struct Exti0; - pub struct Exti1; - pub struct Exti2; - - pub enum Interrupt { - Exti0, - Exti1, - Exti2, - } - - unsafe impl Nr for Interrupt { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti0 {} - - unsafe impl Nr for Exti0 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti1 {} - - unsafe impl Nr for Exti1 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti2 {} - - unsafe impl Nr for Exti2 { - fn nr(&self) -> u8 { - 0 - } - } - - pub const DEFAULT_HANDLERS: Handlers = Handlers { - Exti0: default_handler, - Exti1: default_handler, - Exti2: default_handler, - }; - } -} diff --git a/tests/cfail/tasks-wrong-threshold.rs b/tests/cfail/tasks-wrong-threshold.rs deleted file mode 100644 index 4fca734e..00000000 --- a/tests/cfail/tasks-wrong-threshold.rs +++ /dev/null @@ -1,91 +0,0 @@ -// error-pattern: mismatched types - -#![feature(used)] - -#[macro_use] -extern crate cortex_m_rtfm as rtfm; - -use rtfm::{C2, P0, P1, T0, T2, TMax}; -use device::interrupt::Exti0; - -tasks!(device, { - j1: Task { - interrupt: Exti0, - priority: P1, - enabled: true, - }, -}); - -fn init(_: P0, _: &TMax) {} - -fn idle(_: P0, _: T0) -> ! { - loop {} -} - -// Wrong ceiling token. `prio` and `thr` must match in levels -fn j1(_task: Exti0, _prio: P1, _thr: T2) {} - -// fake device crate -extern crate core; -extern crate cortex_m; - -mod device { - pub mod interrupt { - use cortex_m::ctxt::Context; - use cortex_m::interrupt::Nr; - - extern "C" fn default_handler<T>(_: T) {} - - pub struct Handlers { - pub Exti0: extern "C" fn(Exti0), - pub Exti1: extern "C" fn(Exti1), - pub Exti2: extern "C" fn(Exti2), - } - - pub struct Exti0; - pub struct Exti1; - pub struct Exti2; - - pub enum Interrupt { - Exti0, - Exti1, - Exti2, - } - - unsafe impl Nr for Interrupt { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti0 {} - - unsafe impl Nr for Exti0 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti1 {} - - unsafe impl Nr for Exti1 { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti2 {} - - unsafe impl Nr for Exti2 { - fn nr(&self) -> u8 { - 0 - } - } - - pub const DEFAULT_HANDLERS: Handlers = Handlers { - Exti0: default_handler, - Exti1: default_handler, - Exti2: default_handler, - }; - } -} diff --git a/tests/cfail/token-transfer.rs b/tests/cfail/token-transfer.rs deleted file mode 100644 index 1d81e8f7..00000000 --- a/tests/cfail/token-transfer.rs +++ /dev/null @@ -1,159 +0,0 @@ -#![feature(const_fn)] -#![feature(optin_builtin_traits)] -#![feature(used)] - -#[macro_use] -extern crate cortex_m_rtfm as rtfm; - -use core::cell::RefCell; - -use rtfm::{C2, Local, P0, P1, P2, Resource, T0, T1, T2, TMax}; -use device::interrupt::{Exti0, Exti1}; - -tasks!(device, { - t1: Task { - interrupt: Exti0, - priority: P1, - enabled: true, - }, - t2: Task { - interrupt: Exti1, - priority: P2, - enabled: true, - }, -}); - -fn init(_: P0, _: &TMax) {} - -fn idle(_: P0, _: T0) -> ! { - rtfm::request(t1); - rtfm::request(t1); - - loop {} -} - -static CHANNEL: Resource<RefCell<Option<Exti0>>, C2> = { - //~^ error: Send - Resource::new(RefCell::new(None)) -}; - -static LOCAL: Local<i32, Exti0> = Local::new(0); - -fn t1(mut task: Exti0, ref priority: P1, ref threshold: T1) { - // First run - static FIRST: Local<bool, Exti0> = Local::new(true); - - let first = *FIRST.borrow(&task); - - if first { - // toggle - *FIRST.borrow_mut(&mut task) = false; - } - - if first { - threshold.raise( - &CHANNEL, move |threshold| { - let channel = CHANNEL.access(priority, threshold); - - // BAD: give up task token - *channel.borrow_mut() = Some(task); - } - ); - - return; - } - - let _local = LOCAL.borrow_mut(&mut task); - - // .. - - // `t2` will preempt `t1` - rtfm::request(t2); - - // .. - - // `LOCAL` mutably borrowed up to this point -} - -fn t2(_task: Exti1, ref priority: P2, ref threshold: T2) { - let channel = CHANNEL.access(priority, threshold); - let mut channel = channel.borrow_mut(); - - if let Some(mut other_task) = channel.take() { - // BAD: `t2` has access to `t1`'s task token - // so it can now mutably access local while `t1` is also using it - let _local = LOCAL.borrow_mut(&mut other_task); - - } -} - -// fake device crate -extern crate core; -extern crate cortex_m; - -mod device { - pub mod interrupt { - use cortex_m::ctxt::Context; - use cortex_m::interrupt::Nr; - - extern "C" fn default_handler<T>(_: T) {} - - pub struct Handlers { - pub Exti0: extern "C" fn(Exti0), - pub Exti1: extern "C" fn(Exti1), - pub Exti2: extern "C" fn(Exti2), - } - - pub struct Exti0; - pub struct Exti1; - pub struct Exti2; - - pub enum Interrupt { - Exti0, - Exti1, - Exti2, - } - - unsafe impl Nr for Interrupt { - fn nr(&self) -> u8 { - 0 - } - } - - unsafe impl Context for Exti0 {} - - unsafe impl Nr for Exti0 { - fn nr(&self) -> u8 { - 0 - } - } - - impl !Send for Exti0 {} - - unsafe impl Context for Exti1 {} - - unsafe impl Nr for Exti1 { - fn nr(&self) -> u8 { - 0 - } - } - - impl !Send for Exti1 {} - - unsafe impl Context for Exti2 {} - - unsafe impl Nr for Exti2 { - fn nr(&self) -> u8 { - 0 - } - } - - impl !Send for Exti2 {} - - pub const DEFAULT_HANDLERS: Handlers = Handlers { - Exti0: default_handler, - Exti1: default_handler, - Exti2: default_handler, - }; - } -} |