aboutsummaryrefslogtreecommitdiffstats
path: root/os/kernel/src
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-07-22 14:19:09 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-07-22 14:19:09 +0000
commitdbdf30d29078011cc71c746e7e3c1fbea90f56fa (patch)
treef8568e614ec023418eccf4de71d0f95c42f8cab2 /os/kernel/src
parent6a24f95f53578a4605480de03e5c68106611eefc (diff)
downloadChibiOS-dbdf30d29078011cc71c746e7e3c1fbea90f56fa.tar.gz
ChibiOS-dbdf30d29078011cc71c746e7e3c1fbea90f56fa.tar.bz2
ChibiOS-dbdf30d29078011cc71c746e7e3c1fbea90f56fa.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6022 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/kernel/src')
-rw-r--r--os/kernel/src/chvt.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/os/kernel/src/chvt.c b/os/kernel/src/chvt.c
index c03d442fc..e5d6d1aa3 100644
--- a/os/kernel/src/chvt.c
+++ b/os/kernel/src/chvt.c
@@ -139,14 +139,22 @@ void chVTDoSetI(virtual_timer_t *vtp, systime_t delay,
if (delay < CH_CFG_TIMEDELTA)
delay = CH_CFG_TIMEDELTA;
- /* Now the delay is calculated as delta from the last tick interrupt
- time.*/
- delay += now - vtlist.vt_lasttime;
-
- if (&vtlist != (virtual_timers_list_t *)p)
+ if (&vtlist == (virtual_timers_list_t *)p) {
+ /* The delta list is empty, the current time becomes the new
+ delta list base time.*/
+ vtlist.vt_lasttime = now;
port_timer_start_alarm(vtlist.vt_lasttime + delay);
- else if (delay < p->vt_delta)
- port_timer_set_alarm(vtlist.vt_lasttime + delay);
+ }
+ else {
+ /* Now the delay is calculated as delta from the last tick interrupt
+ time.*/
+ delay += now - vtlist.vt_lasttime;
+
+ /* If the specified delay is closer in time than the first element
+ in the delta list then it becomes the next alarm event in time.*/
+ if (delay < p->vt_delta)
+ port_timer_set_alarm(vtlist.vt_lasttime + delay);
+ }
}
#endif /* CH_CFG_TIMEDELTA > 0 */