From f3b397f460bf06ee843bd429d332bb04768e99d6 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sun, 23 Jul 2017 20:51:37 -0500 Subject: drop rtfm::Cell --- src/lib.rs | 42 +++++++----------------------------------- 1 file changed, 7 insertions(+), 35 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 710e0d4..f80ac12 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -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 Resource for Static { } #[doc(hidden)] -pub unsafe fn claim( - data: *mut T, +pub unsafe fn claim( + 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 { - data: UnsafeCell, -} - -#[doc(hidden)] -impl Cell { - pub const fn new(data: T) -> Self { - Cell { - data: UnsafeCell::new(data), - } - } - - pub fn get(&self) -> *mut T { - self.data.get() - } -} - -unsafe impl Sync for Cell -where - T: Send, -{ -} - /// Preemption threshold token /// /// The preemption threshold indicates the priority a task must have to preempt -- cgit v1.2.3