Added nRF monotonics

This commit is contained in:
Emil Fresk 2023-04-01 20:48:23 +02:00
parent 064cf19265
commit a2f153249f
11 changed files with 587 additions and 3 deletions

View file

@ -9,6 +9,8 @@ For each category, *Added*, *Changed*, *Fixed* add new entries at the top!
### Added
- `should_dequeue` to the `Monotonic` trait to handle bugged timers
### Changed
### Fixed

View file

@ -131,7 +131,7 @@ impl<Mono: Monotonic> TimerQueue<Mono> {
let head = self.queue.pop_if(|head| {
release_at = Some(head.release_at);
let should_pop = Mono::now() >= head.release_at;
let should_pop = Mono::should_dequeue_check(head.release_at);
head.was_poped.store(should_pop, Ordering::Relaxed);
should_pop
@ -145,7 +145,7 @@ impl<Mono: Monotonic> TimerQueue<Mono> {
Mono::enable_timer();
Mono::set_compare(instant);
if Mono::now() >= instant {
if Mono::should_dequeue_check(instant) {
// The time for the next instant passed while handling it,
// continue dequeueing
continue;

View file

@ -33,6 +33,13 @@ 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
}
/// Clear the compare interrupt flag.
fn clear_compare_flag();