mirror of
https://github.com/rtic-rs/rtic.git
synced 2024-11-27 14:04:56 +01:00
remove the _mut methods
they are too limited
This commit is contained in:
parent
914e19d6a5
commit
0827c40a26
2 changed files with 1 additions and 69 deletions
36
src/lib.rs
36
src/lib.rs
|
@ -17,7 +17,7 @@ use cortex_m::ctxt::Context;
|
||||||
use cortex_m::interrupt::Nr;
|
use cortex_m::interrupt::Nr;
|
||||||
#[cfg(not(thumbv6m))]
|
#[cfg(not(thumbv6m))]
|
||||||
use cortex_m::register::{basepri, basepri_max};
|
use cortex_m::register::{basepri, basepri_max};
|
||||||
use static_ref::{Ref, RefMut};
|
use static_ref::Ref;
|
||||||
use typenum::{Cmp, Equal, Unsigned};
|
use typenum::{Cmp, Equal, Unsigned};
|
||||||
#[cfg(not(thumbv6m))]
|
#[cfg(not(thumbv6m))]
|
||||||
use typenum::{Greater, Less};
|
use typenum::{Greater, Less};
|
||||||
|
@ -87,18 +87,6 @@ impl<T, CEILING> Resource<T, C<CEILING>> {
|
||||||
unsafe { Ref::new(&*self.data.get()) }
|
unsafe { Ref::new(&*self.data.get()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Like [Resource.claim](struct.Resource.html#method.claim) but returns a
|
|
||||||
/// `&mut-` reference
|
|
||||||
pub fn claim_mut<'task, PRIORITY>(
|
|
||||||
&'static self,
|
|
||||||
_priority: &'task mut P<PRIORITY>,
|
|
||||||
) -> RefMut<'task, T>
|
|
||||||
where
|
|
||||||
CEILING: Cmp<PRIORITY, Output = Equal>,
|
|
||||||
{
|
|
||||||
unsafe { RefMut::new(&mut *self.data.get()) }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Locks the resource for the duration of the critical section `f`
|
/// Locks the resource for the duration of the critical section `f`
|
||||||
///
|
///
|
||||||
/// For the duration of the critical section, tasks whose priority level is
|
/// For the duration of the critical section, tasks whose priority level is
|
||||||
|
@ -124,28 +112,6 @@ impl<T, CEILING> Resource<T, C<CEILING>> {
|
||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Like [Resource.lock](struct.Resource.html#method.lock) but returns a
|
|
||||||
/// `&mut-` reference
|
|
||||||
///
|
|
||||||
/// This method has additional an additional constraint: you can't borrow a
|
|
||||||
/// resource that has ceiling equal `CEILING`. This constraint is required
|
|
||||||
/// to preserve Rust aliasing rules.
|
|
||||||
#[cfg(not(thumbv6m))]
|
|
||||||
pub fn lock_mut<R, PRIORITY, F>(&'static self, _priority: &mut P<PRIORITY>, f: F) -> R
|
|
||||||
where F: FnOnce(RefMut<T>) -> R,
|
|
||||||
CEILING: Cmp<PRIORITY, Output = Greater> + Cmp<UMAX, Output = Less> + Level
|
|
||||||
{
|
|
||||||
unsafe {
|
|
||||||
let old_basepri = basepri::read();
|
|
||||||
basepri_max::write(<CEILING>::hw());
|
|
||||||
barrier!();
|
|
||||||
let ret = f(RefMut::new(&mut *self.data.get()));
|
|
||||||
barrier!();
|
|
||||||
basepri::write(old_basepri);
|
|
||||||
ret
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe impl<T, C> Sync for Resource<T, C>
|
unsafe impl<T, C> Sync for Resource<T, C>
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
#![feature(const_fn)]
|
|
||||||
|
|
||||||
extern crate cortex_m_srp;
|
|
||||||
|
|
||||||
use cortex_m_srp::{C2, P2, Resource};
|
|
||||||
|
|
||||||
static R1: Resource<i32, C2> = Resource::new(0);
|
|
||||||
|
|
||||||
fn j1(mut prio: P2) {
|
|
||||||
// OK only one `&mut-` reference to the data
|
|
||||||
let r1 = R1.claim_mut(&mut prio);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn j2(prio: P2) {
|
|
||||||
// OK two `&-` references to the same data
|
|
||||||
let r1 = R1.claim(&prio);
|
|
||||||
let another_r1 = R1.claim(&prio);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn j3(mut prio: P2) {
|
|
||||||
// CAN'T have a `&-` reference and a `&mut-` reference to the same data
|
|
||||||
let r1 = R1.claim(&prio);
|
|
||||||
let another_r1 = R1.claim_mut(&mut prio);
|
|
||||||
//~^ error
|
|
||||||
}
|
|
||||||
|
|
||||||
fn j4(mut prio: P2) {
|
|
||||||
// CAN'T have two `&mut-` references to the same data
|
|
||||||
let r1 = R1.claim_mut(&mut prio);
|
|
||||||
let another_r1 = R1.claim_mut(&mut prio);
|
|
||||||
//~^ error
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {}
|
|
Loading…
Reference in a new issue