mirror of https://github.com/rusefi/ChibiOS.git
Performance improvement, now much lower "delta" are allowed.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@14439 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
ca2fde8996
commit
9d1810297e
|
@ -413,10 +413,6 @@ void chVTDoTickI(void) {
|
||||||
sysinterval_t delta, nowdelta;
|
sysinterval_t delta, nowdelta;
|
||||||
systime_t now;
|
systime_t now;
|
||||||
|
|
||||||
/* Delta between current time and last execution time.*/
|
|
||||||
now = chVTGetSystemTimeX();
|
|
||||||
nowdelta = chTimeDiffX(vtlp->lasttime, now);
|
|
||||||
|
|
||||||
/* Looping through timers consuming all timers with deltas lower or equal
|
/* Looping through timers consuming all timers with deltas lower or equal
|
||||||
than the interval between "now" and "lasttime".*/
|
than the interval between "now" and "lasttime".*/
|
||||||
while (true) {
|
while (true) {
|
||||||
|
@ -425,6 +421,10 @@ void chVTDoTickI(void) {
|
||||||
/* First timer in the delta list.*/
|
/* First timer in the delta list.*/
|
||||||
vtp = (virtual_timer_t *)vtlp->dlist.next;
|
vtp = (virtual_timer_t *)vtlp->dlist.next;
|
||||||
|
|
||||||
|
/* Delta between current time and last execution time.*/
|
||||||
|
now = chVTGetSystemTimeX();
|
||||||
|
nowdelta = chTimeDiffX(vtlp->lasttime, now);
|
||||||
|
|
||||||
/* Loop break condition.
|
/* Loop break condition.
|
||||||
Note that the list scan is limited by the delta list header having
|
Note that the list scan is limited by the delta list header having
|
||||||
"vtlp->dlist.delta == (sysinterval_t)-1" which is greater than all
|
"vtlp->dlist.delta == (sysinterval_t)-1" which is greater than all
|
||||||
|
@ -456,17 +456,19 @@ void chVTDoTickI(void) {
|
||||||
vtp->func(vtp, vtp->par);
|
vtp->func(vtp, vtp->par);
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Delta between current time after callback execution time.*/
|
|
||||||
now = chVTGetSystemTimeX();
|
|
||||||
nowdelta = chTimeDiffX(lasttime, now);
|
|
||||||
|
|
||||||
/* If a reload is defined the timer needs to be restarted.*/
|
/* If a reload is defined the timer needs to be restarted.*/
|
||||||
if (vtp->reload > (sysinterval_t)0) {
|
if (vtp->reload > (sysinterval_t)0) {
|
||||||
|
sysinterval_t delay;
|
||||||
|
|
||||||
|
/* Refreshing the current time after spending time in the callback for
|
||||||
|
a more accurate detection of too fast reloads.*/
|
||||||
|
now = chVTGetSystemTimeX();
|
||||||
|
nowdelta = chTimeDiffX(lasttime, now);
|
||||||
|
|
||||||
chDbgAssert(nowdelta <= vtp->reload, "skipped deadline");
|
chDbgAssert(nowdelta <= vtp->reload, "skipped deadline");
|
||||||
|
|
||||||
/* Enqueuing the timer again using the calculated delta.*/
|
/* Enqueuing the timer again using the calculated delta.*/
|
||||||
sysinterval_t delay = vtp->reload - nowdelta;
|
delay = vtp->reload - nowdelta;
|
||||||
|
|
||||||
/* Special case where the timers list is empty.*/
|
/* Special case where the timers list is empty.*/
|
||||||
if (ch_dlist_isempty(&vtlp->dlist)) {
|
if (ch_dlist_isempty(&vtlp->dlist)) {
|
||||||
|
|
Loading…
Reference in New Issue