diff --git a/os/rt/src/chvt.c b/os/rt/src/chvt.c index 1baa31e5d..d28b3d939 100644 --- a/os/rt/src/chvt.c +++ b/os/rt/src/chvt.c @@ -612,7 +612,7 @@ void chVTDoTickI(void) { } #else /* CH_CFG_ST_TIMEDELTA > 0 */ virtual_timer_t *vtp; - sysinterval_t delta, nowdelta; + sysinterval_t nowdelta; systime_t now; /* Looping through timers consuming all timers with deltas lower or equal @@ -663,11 +663,13 @@ void chVTDoTickI(void) { return; } - /* Calculating the delta to the next alarm time.*/ - delta = vtp->dlist.delta - nowdelta; + /* The "unprocessed nowdelta" time slice is added to "last time" + and subtracted to next timer's delta.*/ + vtlp->lasttime += nowdelta; + vtp->dlist.delta -= nowdelta; /* Update alarm time to next timer.*/ - vt_set_alarm(now, delta); + vt_set_alarm(now, vtp->dlist.delta); #endif /* CH_CFG_ST_TIMEDELTA > 0 */ } diff --git a/readme.txt b/readme.txt index 7061e3363..448dce4d1 100644 --- a/readme.txt +++ b/readme.txt @@ -75,6 +75,7 @@ *** 20.3.5 *** - FIX: Some MISRA-related fixes. +- FIX: Fixed Virtual Timers failure in a specific condition (bug #1215). - FIX: Fixed invalid state transition in SNOR flash driver (bug #1212). - FIX: Fixed missing check in chobjcaches.h (bug #1210). - FIX: Fixed RT testbuild application broken (bug #1208).