From 28708ac96cf4ea13584edefa288f36988d41e43a Mon Sep 17 00:00:00 2001 From: anschrammh Date: Thu, 5 Sep 2019 14:02:21 +0200 Subject: [PATCH] Minor changes --- src/app/TaskSchedulerManager.cpp | 35 +++++++++++++++++++------------- src/app/TaskSchedulerManager.h | 6 +++--- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/app/TaskSchedulerManager.cpp b/src/app/TaskSchedulerManager.cpp index f443263..9bc8e39 100644 --- a/src/app/TaskSchedulerManager.cpp +++ b/src/app/TaskSchedulerManager.cpp @@ -40,7 +40,7 @@ TaskSchedulerManagerHelper::Schedule *TaskSchedulerManagerHelper::Schedule::sche return new TaskSchedulerManagerHelper::Schedule(); } -TaskSchedulerManagerHelper::Schedule *TaskSchedulerManagerHelper::Schedule::setMillis(uint64_t millis) +TaskSchedulerManagerHelper::Schedule *TaskSchedulerManagerHelper::Schedule::setMillis(uint32_t millis) { if(millis == 0)return this; @@ -177,27 +177,34 @@ void TaskSchedulerManager::runTaskScheduler() { if(p->schedule._everyMillis != 0) { - - if(p->schedule._triggerRightAway || p->schedule._millis != 0) - { - if(p->schedule._triggerRightAway && !p->schedule._hasBeenTriggeredRightAway) + if(p->schedule._triggerRightAway && !p->schedule._hasBeenTriggeredRightAway)//No rollover possible { p->schedule._millis = millis(); p->schedule._hasBeenTriggeredRightAway = true; p->schedule._triggered = true; (*(p->taskRoutine))(p->pData); } - else if(millis() - p->schedule._millis >= p->schedule._everyMillis) //We execute the task + else if(millis() >= p->schedule._millis) //Millis rollover ? { - p->schedule._millis = millis(); - p->schedule._triggered = true; - (*(p->taskRoutine))(p->pData); + if(millis() - p->schedule._millis >= p->schedule._everyMillis) //No, we execute the task + { + p->schedule._millis = millis(); + p->schedule._triggered = true; + (*(p->taskRoutine))(p->pData); + } + } + else //Millis rollover + { + //We compute the time elapsed during the rollover: + unsigned long max_ul(~0), from_last_millis_to_max(max_ul - p->schedule._millis), total_elapsed_millis(from_last_millis_to_max + millis()); + + if(total_elapsed_millis >= p->schedule._everyMillis) + { + p->schedule._millis = millis(); + p->schedule._triggered = true; + (*(p->taskRoutine))(p->pData); + } } - } - else - { - p->schedule._millis = millis(); - } } else //Probably AT mode task { diff --git a/src/app/TaskSchedulerManager.h b/src/app/TaskSchedulerManager.h index 3d050ee..1a8f35c 100644 --- a/src/app/TaskSchedulerManager.h +++ b/src/app/TaskSchedulerManager.h @@ -25,7 +25,7 @@ namespace TaskSchedulerManagerHelper } static Schedule *scheduleBuilder(); - Schedule *setMillis(uint64_t millis); + Schedule *setMillis(uint32_t millis); Schedule *setSeconds(uint32_t seconds); Schedule *setDateTime(DateTime &dateTime); Schedule *setDays(uint8_t days); @@ -46,8 +46,8 @@ namespace TaskSchedulerManagerHelper TriggerType _triggerType; Mode _mode; boolean _enabled; - uint64_t _millis; //Used to internally keep track of the time elapsed for this task - uint64_t _everyMillis; //We can use millis or DateTime, but not both e.g every 00h 10m 00s 000ms + uint32_t _millis; //Used to internally keep track of the time elapsed for this task + uint32_t _everyMillis; //We can use millis or DateTime, but not both e.g every 00h 10m 00s 000ms DateTime *_dateTime; }; }