Fixed tick mode.
@@ -291,7 +291,7 @@ | ||
291 | 291 | vtp->dlist.next->delta += vtp->dlist.delta; |
292 | 292 | |
293 | 293 | /* Removing the element from the delta list, marking it as not armed.*/ |
294 | - dlist_dequeue(&vtp->dlist); | |
294 | + ch_dlist_dequeue(&vtp->dlist); | |
295 | 295 | vtp->dlist.next = NULL; |
296 | 296 | |
297 | 297 | /* The above code changes the value in the header when the removed element |
@@ -374,22 +374,26 @@ | ||
374 | 374 | */ |
375 | 375 | sysinterval_t chVTGetRemainingIntervalI(virtual_timer_t *vtp) { |
376 | 376 | virtual_timers_list_t *vtlp = &currcore->vtlist; |
377 | - sysinterval_t deadline; | |
377 | + sysinterval_t delta; | |
378 | 378 | ch_delta_list_t *dlp; |
379 | 379 | |
380 | 380 | chDbgCheckClassI(); |
381 | 381 | |
382 | - deadline = (sysinterval_t)0; | |
382 | + delta = (sysinterval_t)0; | |
383 | 383 | dlp = vtlp->dlist.next; |
384 | 384 | do { |
385 | - deadline += dlp->delta; | |
385 | + delta += dlp->delta; | |
386 | 386 | if (dlp == &vtp->dlist) { |
387 | +#if CH_CFG_ST_TIMEDELTA > 0 | |
387 | 388 | systime_t now = chVTGetSystemTimeX(); |
388 | 389 | sysinterval_t nowdelta = chTimeDiffX(vtlp->lasttime, now); |
389 | - if (nowdelta > deadline) { | |
390 | + if (nowdelta > delta) { | |
390 | 391 | return (sysinterval_t)0; |
391 | 392 | } |
392 | - return nowdelta - deadline; | |
393 | + return nowdelta - delta; | |
394 | +#else | |
395 | + return delta; | |
396 | +#endif | |
393 | 397 | } |
394 | 398 | dlp = dlp->next; |
395 | 399 | } while (dlp != &vtlp->dlist); |
@@ -415,7 +419,7 @@ | ||
415 | 419 | |
416 | 420 | #if CH_CFG_ST_TIMEDELTA == 0 |
417 | 421 | vtlp->systime++; |
418 | - if (!is_vtlist_empty(&vtlp->dlist)) { | |
422 | + if (ch_dlist_notempty(&vtlp->dlist)) { | |
419 | 423 | /* The list is not empty, processing elements on top.*/ |
420 | 424 | --vtlp->dlist.next->delta; |
421 | 425 | while (vtlp->dlist.next->delta == (sysinterval_t)0) { |
@@ -425,12 +429,11 @@ | ||
425 | 429 | vtp = (virtual_timer_t *)vtlp->dlist.next; |
426 | 430 | |
427 | 431 | /* Removing the element from the delta list, marking it as not armed.*/ |
428 | - vtp->dlist.next->prev = &vtlp->dlist; | |
429 | - vtlp->dlist.next = vtp->dlist.next; | |
432 | + ch_dlist_dequeue(&vtp->dlist); | |
430 | 433 | vtp->dlist.next = NULL; |
431 | 434 | |
432 | 435 | chSysUnlockFromISR(); |
433 | - vtp->func(vtp->par); | |
436 | + vtp->func(vtp, vtp->par); | |
434 | 437 | chSysLockFromISR(); |
435 | 438 | } |
436 | 439 | } |