hotfix for deadline checking

This commit is contained in:
Robin Müller 2020-07-29 20:07:24 +02:00
parent 276c3b172e
commit 18899a4c82
2 changed files with 18 additions and 20 deletions

View File

@ -125,19 +125,18 @@ void FixedTimeslotTask::checkMissedDeadline(const TickType_t xLastWakeTime,
* it. */ * it. */
TickType_t currentTickCount = xTaskGetTickCount(); TickType_t currentTickCount = xTaskGetTickCount();
TickType_t timeToWake = xLastWakeTime + interval; TickType_t timeToWake = xLastWakeTime + interval;
// Tick count has overflown // Time to wake has not overflown.
if(currentTickCount < xLastWakeTime) { if(timeToWake > xLastWakeTime) {
// Time to wake has overflown as well. If the tick count /* If the current time has overflown exclusively or the current
// is larger than the time to wake, a deadline was missed. * tick count is simply larger than the time to wake, a deadline was
if(timeToWake < xLastWakeTime and * missed */
currentTickCount > timeToWake) { if((currentTickCount < xLastWakeTime) or (currentTickCount > timeToWake)) {
handleMissedDeadline(); handleMissedDeadline();
} }
} }
// No tick count overflow. If the timeToWake has not overflown /* Time to wake has overflown. A deadline was missed if the current time
// and the current tick count is larger than the time to wake, * is larger than the time to wake */
// a deadline was missed. else if((timeToWake < xLastWakeTime) and (currentTickCount > timeToWake)) {
else if(timeToWake > xLastWakeTime and currentTickCount > timeToWake) {
handleMissedDeadline(); handleMissedDeadline();
} }
} }

View File

@ -109,19 +109,18 @@ void PeriodicTask::checkMissedDeadline(const TickType_t xLastWakeTime,
* it. */ * it. */
TickType_t currentTickCount = xTaskGetTickCount(); TickType_t currentTickCount = xTaskGetTickCount();
TickType_t timeToWake = xLastWakeTime + interval; TickType_t timeToWake = xLastWakeTime + interval;
// Tick count has overflown // Time to wake has not overflown.
if(currentTickCount < xLastWakeTime) { if(timeToWake > xLastWakeTime) {
// Time to wake has overflown as well. If the tick count /* If the current time has overflown exclusively or the current
// is larger than the time to wake, a deadline was missed. * tick count is simply larger than the time to wake, a deadline was
if(timeToWake < xLastWakeTime and * missed */
currentTickCount > timeToWake) { if((currentTickCount < xLastWakeTime) or (currentTickCount > timeToWake)) {
handleMissedDeadline(); handleMissedDeadline();
} }
} }
// No tick count overflow. If the timeToWake has not overflown /* Time to wake has overflown. A deadline was missed if the current time
// and the current tick count is larger than the time to wake, * is larger than the time to wake */
// a deadline was missed. else if((timeToWake < xLastWakeTime) and (currentTickCount > timeToWake)) {
else if(timeToWake > xLastWakeTime and currentTickCount > timeToWake) {
handleMissedDeadline(); handleMissedDeadline();
} }
} }