Removed incorret unsafe impl Sync, added interrupt_free around obtaining an alarm

This commit is contained in:
Victor Koenders 2021-11-20 08:52:38 +01:00
parent 1fd04d3384
commit a9d96f352e
No known key found for this signature in database
GPG key ID: 2E441540865B8A1C

View file

@ -13,9 +13,6 @@ pub struct Timer {
alarms: [bool; 4],
}
// Safety: All access is read-only.
unsafe impl Sync for Timer {}
impl Timer {
/// Create a new [`Timer`]
pub fn new(timer: TIMER, resets: &mut RESETS) -> Self {
@ -55,42 +52,50 @@ impl Timer {
/// Retrieve a reference to alarm 0. Will only return a value the first time this is called
pub fn alarm_0(&mut self) -> Option<Alarm0> {
if self.alarms[0] {
self.alarms[0] = false;
Some(Alarm0(PhantomData))
} else {
None
}
cortex_m::interrupt::free(|_| {
if self.alarms[0] {
self.alarms[0] = false;
Some(Alarm0(PhantomData))
} else {
None
}
})
}
/// Retrieve a reference to alarm 1. Will only return a value the first time this is called
pub fn alarm_1(&mut self) -> Option<Alarm1> {
if self.alarms[1] {
self.alarms[1] = false;
Some(Alarm1(PhantomData))
} else {
None
}
cortex_m::interrupt::free(|_| {
if self.alarms[1] {
self.alarms[1] = false;
Some(Alarm1(PhantomData))
} else {
None
}
})
}
/// Retrieve a reference to alarm 2. Will only return a value the first time this is called
pub fn alarm_2(&mut self) -> Option<Alarm2> {
if self.alarms[2] {
self.alarms[2] = false;
Some(Alarm2(PhantomData))
} else {
None
}
cortex_m::interrupt::free(|_| {
if self.alarms[2] {
self.alarms[2] = false;
Some(Alarm2(PhantomData))
} else {
None
}
})
}
/// Retrieve a reference to alarm 3. Will only return a value the first time this is called
pub fn alarm_3(&mut self) -> Option<Alarm3> {
if self.alarms[3] {
self.alarms[3] = false;
Some(Alarm3(PhantomData))
} else {
None
}
cortex_m::interrupt::free(|_| {
if self.alarms[3] {
self.alarms[3] = false;
Some(Alarm3(PhantomData))
} else {
None
}
})
}
}