mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
Merge "Keep Notifier firing after FPGA rollover (fixes artf3582), simulation may still have an issue with counter rollover"
This commit is contained in:
@@ -35,6 +35,9 @@ public:
|
||||
static double GetFPGATimestamp();
|
||||
static double GetPPCTimestamp();
|
||||
static double GetMatchTime();
|
||||
|
||||
// The time, in seconds, at which the 32-bit FPGA timestamp rolls over to 0
|
||||
static constexpr double kRolloverTime = (1ll << 32) / 1e6;
|
||||
|
||||
private:
|
||||
double m_startTime;
|
||||
|
||||
@@ -138,7 +138,7 @@ void Notifier::ProcessQueue(uint32_t mask, void *params)
|
||||
* Insert this Notifier into the timer queue in right place.
|
||||
* WARNING: this method does not do synchronization! It must be called from somewhere
|
||||
* that is taking care of synchronizing access to the queue.
|
||||
* @param reschedule If false, the scheduled alarm is based on the curent time and UpdateAlarm
|
||||
* @param reschedule If false, the scheduled alarm is based on the current time and UpdateAlarm
|
||||
* method is called which will enable the alarm if necessary.
|
||||
* If true, update the time by adding the period (no drift) when rescheduled periodic from ProcessQueue.
|
||||
* This ensures that the public methods only update the queue after finishing inserting.
|
||||
@@ -153,6 +153,10 @@ void Notifier::InsertInQueue(bool reschedule)
|
||||
{
|
||||
m_expirationTime = GetClock() + m_period;
|
||||
}
|
||||
if (m_expirationTime > Timer::kRolloverTime)
|
||||
{
|
||||
m_expirationTime -= Timer::kRolloverTime;
|
||||
}
|
||||
if (timerQueueHead == NULL || timerQueueHead->m_expirationTime >= this->m_expirationTime)
|
||||
{
|
||||
// the queue is empty or greater than the new entry
|
||||
|
||||
@@ -13,9 +13,6 @@
|
||||
#include "Utility.h"
|
||||
#include <iostream>
|
||||
|
||||
// The time, in seconds, at which the 32-bit FPGA timestamp rolls over to 0
|
||||
static const double kRolloverTime = (1ll << 32) / 1e6;
|
||||
|
||||
/**
|
||||
* Pause the task for a specified time.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user