diff options
author | 2023-12-06 19:36:06 +0100 | |
---|---|---|
committer | 2023-12-06 18:36:06 +0000 | |
commit | f377471e440d8be0b2f9e9c8877ed015f62dc19e (patch) | |
tree | 2f63c1c079bf95cd8468ba2de91cb01032966aab /rtic-time/src | |
parent | 89160b7cb9b3623e0a50f6745296d470fa7ea79d (diff) | |
download | rtic-f377471e440d8be0b2f9e9c8877ed015f62dc19e.tar.gz rtic-f377471e440d8be0b2f9e9c8877ed015f62dc19e.tar.zst rtic-f377471e440d8be0b2f9e9c8877ed015f62dc19e.zip |
Fix `nrf::rtc` errata workaround (#858)
* Deprecate `should_dequeue_check`
* Fix errata by delaying the wakeup point
* Add changelog
* Fix changelog typos
Diffstat (limited to 'rtic-time/src')
-rw-r--r-- | rtic-time/src/lib.rs | 4 | ||||
-rw-r--r-- | rtic-time/src/monotonic.rs | 14 |
2 files changed, 11 insertions, 7 deletions
diff --git a/rtic-time/src/lib.rs b/rtic-time/src/lib.rs index 6254bca0..9cd20d5f 100644 --- a/rtic-time/src/lib.rs +++ b/rtic-time/src/lib.rs @@ -133,7 +133,7 @@ impl<Mono: Monotonic> TimerQueue<Mono> { let head = self.queue.pop_if(|head| { release_at = Some(head.release_at); - let should_pop = Mono::should_dequeue_check(head.release_at); + let should_pop = Mono::now() >= head.release_at; head.was_popped.store(should_pop, Ordering::Relaxed); should_pop @@ -147,7 +147,7 @@ impl<Mono: Monotonic> TimerQueue<Mono> { Mono::enable_timer(); Mono::set_compare(instant); - if Mono::should_dequeue_check(instant) { + if Mono::now() >= instant { // The time for the next instant passed while handling it, // continue dequeueing continue; diff --git a/rtic-time/src/monotonic.rs b/rtic-time/src/monotonic.rs index 0c0d6f35..0e8d2b83 100644 --- a/rtic-time/src/monotonic.rs +++ b/rtic-time/src/monotonic.rs @@ -36,11 +36,15 @@ pub trait Monotonic { /// queue in RTIC checks this. fn set_compare(instant: Self::Instant); - /// Override for the dequeue check, override with timers that have bugs. - /// - /// E.g. nRF52 RTCs needs to be dequeued if the time is within 4 ticks. - fn should_dequeue_check(release_at: Self::Instant) -> bool { - <Self as Monotonic>::now() >= release_at + /// This method used to be required by an errata workaround + /// for the nrf52 family, but it has been disabled as the + /// workaround was erroneous. + #[deprecated( + since = "1.2.0", + note = "this method is erroneous and has been disabled" + )] + fn should_dequeue_check(_: Self::Instant) -> bool { + panic!("This method should not be used as it is erroneous.") } /// Clear the compare interrupt flag. |