aboutsummaryrefslogtreecommitdiffstats
path: root/os/rt/src/chvt.c
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2017-10-12 12:25:48 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2017-10-12 12:25:48 +0000
commitd8b32d7f63c8453135249734f8b542856947e83a (patch)
tree0f9ba68c14d6260f9c67c91c7d2cbd0ce5453230 /os/rt/src/chvt.c
parent286deccd1280b0d66ccc6d9b2617719582607f0d (diff)
downloadChibiOS-d8b32d7f63c8453135249734f8b542856947e83a.tar.gz
ChibiOS-d8b32d7f63c8453135249734f8b542856947e83a.tar.bz2
ChibiOS-d8b32d7f63c8453135249734f8b542856947e83a.zip
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
Diffstat (limited to 'os/rt/src/chvt.c')
-rw-r--r--os/rt/src/chvt.c22
1 files changed, 11 insertions, 11 deletions
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 */
}