mirror of
https://github.com/rtic-rs/rtic.git
synced 2025-12-16 21:05:35 +01:00
Added nRF monotonics
This commit is contained in:
parent
064cf19265
commit
a2f153249f
11 changed files with 587 additions and 3 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue