Merge "Keep Notifier firing after FPGA rollover (fixes artf3582), simulation may still have an issue with counter rollover"

This commit is contained in:
Brad Miller (WPI)
2014-10-24 11:07:09 -07:00
committed by Gerrit Code Review
3 changed files with 8 additions and 4 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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.
*