From d8b32d7f63c8453135249734f8b542856947e83a Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Thu, 12 Oct 2017 12:25:48 +0000 Subject: Rework of virtual timers in RT5, preparation. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/rt5_dev_point1@10813 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/rt/src/chthreads.c | 4 ++-- os/rt/src/chvt.c | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) (limited to 'os/rt/src') diff --git a/os/rt/src/chthreads.c b/os/rt/src/chthreads.c index b462df09f..49abadb2d 100644 --- a/os/rt/src/chthreads.c +++ b/os/rt/src/chthreads.c @@ -670,7 +670,7 @@ void chThdSleepUntil(systime_t time) { sysinterval_t interval; chSysLock(); - interval = chTimeSubtractX(time, chVTGetSystemTimeX()); + interval = chTimeDiffX(time, chVTGetSystemTimeX()); if (interval > (sysinterval_t)0) { chThdSleepS(interval); } @@ -697,7 +697,7 @@ systime_t chThdSleepUntilWindowed(systime_t prev, systime_t next) { chSysLock(); time = chVTGetSystemTimeX(); if (chTimeIsInRangeX(time, prev, next)) { - chThdSleepS(chTimeSubtractX(next, time)); + chThdSleepS(chTimeDiffX(next, time)); } chSysUnlock(); diff --git a/os/rt/src/chvt.c b/os/rt/src/chvt.c index 51db54cc3..4d887b8c4 100644 --- a/os/rt/src/chvt.c +++ b/os/rt/src/chvt.c @@ -62,7 +62,7 @@ void _vt_init(void) { ch.vtlist.next = (virtual_timer_t *)&ch.vtlist; ch.vtlist.prev = (virtual_timer_t *)&ch.vtlist; - ch.vtlist.delta = (systime_t)-1; + ch.vtlist.delta = (sysinterval_t)-1; #if CH_CFG_ST_TIMEDELTA == 0 ch.vtlist.systime = (systime_t)0; #else /* CH_CFG_ST_TIMEDELTA > 0 */ @@ -92,7 +92,7 @@ void _vt_init(void) { * * @iclass */ -void chVTDoSetI(virtual_timer_t *vtp, systime_t delay, +void chVTDoSetI(virtual_timer_t *vtp, sysinterval_t delay, vtfunc_t vtfunc, void *par) { virtual_timer_t *p; systime_t delta; @@ -126,7 +126,7 @@ void chVTDoSetI(virtual_timer_t *vtp, systime_t delay, vtp->delta = delay; /* Being the first element in the list the alarm timer is started.*/ - port_timer_start_alarm(ch.vtlist.lasttime + delay); + port_timer_start_alarm(chTimeAddX(ch.vtlist.lasttime, delay)); return; } @@ -136,9 +136,9 @@ void chVTDoSetI(virtual_timer_t *vtp, systime_t delay, /* Delay as delta from 'lasttime'. Note, it can overflow and the value becomes lower than 'now'.*/ - delta = now - ch.vtlist.lasttime + delay; + delta = chTimeDiffX(ch.vtlist.lasttime, now) + delay; - if (delta < now - ch.vtlist.lasttime) { + if (delta < chTimeDiffX(ch.vtlist.lasttime, now)) { /* Scenario where a very large delay excedeed the numeric range, it requires a special handling. We need to skip the first element and adjust the delta to wrap back in the previous numeric range.*/ @@ -148,7 +148,7 @@ void chVTDoSetI(virtual_timer_t *vtp, systime_t delay, else if (delta < p->delta) { /* A small delay that will become the first element in the delta list and next deadline.*/ - port_timer_set_alarm(ch.vtlist.lasttime + delta); + port_timer_set_alarm(chTimeAddX(ch.vtlist.lasttime, delta)); } } #else /* CH_CFG_ST_TIMEDELTA == 0 */ @@ -176,7 +176,7 @@ void chVTDoSetI(virtual_timer_t *vtp, systime_t delay, /* Special case when the timer is in last position in the list, the value in the header must be restored.*/; p->delta -= delta; - ch.vtlist.delta = (systime_t)-1; + ch.vtlist.delta = (sysinterval_t)-1; } /** @@ -205,9 +205,9 @@ void chVTDoResetI(virtual_timer_t *vtp) { /* The above code changes the value in the header when the removed element is the last of the list, restoring it.*/ - ch.vtlist.delta = (systime_t)-1; + ch.vtlist.delta = (sysinterval_t)-1; #else /* CH_CFG_ST_TIMEDELTA > 0 */ - systime_t nowdelta, delta; + sysinterval_t nowdelta, delta; /* If the timer is not the first of the list then it is simply unlinked else the operation is more complex.*/ @@ -246,7 +246,7 @@ void chVTDoResetI(virtual_timer_t *vtp) { }*/ /* Distance in ticks between the last alarm event and current time.*/ - nowdelta = chVTGetSystemTimeX() - ch.vtlist.lasttime; + nowdelta = chTimeDiffX(ch.vtlist.lasttime, chVTGetSystemTimeX()); /* If the current time surpassed the time of the next element in list then the event interrupt is already pending, just return.*/ @@ -263,7 +263,7 @@ void chVTDoResetI(virtual_timer_t *vtp) { delta = (systime_t)CH_CFG_ST_TIMEDELTA; } - port_timer_set_alarm(ch.vtlist.lasttime + nowdelta + delta); + port_timer_set_alarm(chTimeAddX(ch.vtlist.lasttime, nowdelta + delta)); #endif /* CH_CFG_ST_TIMEDELTA > 0 */ } -- cgit v1.2.3