diff options
author | 2017-07-23 20:51:37 -0500 | |
---|---|---|
committer | 2017-07-23 20:51:37 -0500 | |
commit | f3b397f460bf06ee843bd429d332bb04768e99d6 (patch) | |
tree | 70a174cab19319f017bbeec39b98284785987697 /src | |
parent | 03f373fb24ce40e7142a2ed35999ccc666941a20 (diff) | |
download | rtic-f3b397f460bf06ee843bd429d332bb04768e99d6.tar.gz rtic-f3b397f460bf06ee843bd429d332bb04768e99d6.tar.zst rtic-f3b397f460bf06ee843bd429d332bb04768e99d6.zip |
drop rtfm::Cell
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 42 |
1 files changed, 7 insertions, 35 deletions
@@ -63,8 +63,6 @@ extern crate cortex_m; extern crate cortex_m_rtfm_macros; extern crate static_ref; -use core::cell::UnsafeCell; - pub use cortex_m::asm::{bkpt, wfi}; pub use cortex_m::interrupt::CriticalSection; pub use cortex_m::interrupt::free as atomic; @@ -137,68 +135,42 @@ impl<T> Resource for Static<T> { } #[doc(hidden)] -pub unsafe fn claim<T, U, R, F, G>( - data: *mut T, +pub unsafe fn claim<T, R, F>( + data: T, ceiling: u8, nvic_prio_bits: u8, t: &mut Threshold, f: F, - g: G, ) -> R where - F: FnOnce(U, &mut Threshold) -> R, - G: FnOnce(*mut T) -> U, + F: FnOnce(T, &mut Threshold) -> R, { let max_priority = 1 << nvic_prio_bits; if ceiling > t.value { match () { #[cfg(armv6m)] () => { - atomic(|_| f(g(data), &mut Threshold::new(max_priority))) + atomic(|_| f(data, &mut Threshold::new(max_priority))) } #[cfg(not(armv6m))] () => { if ceiling == max_priority { - atomic(|_| f(g(data), &mut Threshold::new(max_priority))) + atomic(|_| f(data, &mut Threshold::new(max_priority))) } else { let old = basepri::read(); let hw = (max_priority - ceiling) << (8 - nvic_prio_bits); basepri_max::write(hw); - let ret = f(g(data), &mut Threshold::new(ceiling)); + let ret = f(data, &mut Threshold::new(ceiling)); basepri::write(old); ret } } } } else { - f(g(data), t) + f(data, t) } } -#[doc(hidden)] -pub struct Cell<T> { - data: UnsafeCell<T>, -} - -#[doc(hidden)] -impl<T> Cell<T> { - pub const fn new(data: T) -> Self { - Cell { - data: UnsafeCell::new(data), - } - } - - pub fn get(&self) -> *mut T { - self.data.get() - } -} - -unsafe impl<T> Sync for Cell<T> -where - T: Send, -{ -} - /// Preemption threshold token /// /// The preemption threshold indicates the priority a task must have to preempt |