aboutsummaryrefslogtreecommitdiffstats
path: root/src/chdelta.c
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2007-10-13 06:59:54 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2007-10-13 06:59:54 +0000
commit73642ca0cce31ed6982813a90b89e4de05da76cb (patch)
tree3a55ba3629daf4d5b13bec0dcee9be1e20771b3d /src/chdelta.c
parent62645922467a2c748bf081b7eefb6ad775675418 (diff)
downloadChibiOS-73642ca0cce31ed6982813a90b89e4de05da76cb.tar.gz
ChibiOS-73642ca0cce31ed6982813a90b89e4de05da76cb.tar.bz2
ChibiOS-73642ca0cce31ed6982813a90b89e4de05da76cb.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@48 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'src/chdelta.c')
-rw-r--r--src/chdelta.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/chdelta.c b/src/chdelta.c
index e627cbf19..f87aec5a9 100644
--- a/src/chdelta.c
+++ b/src/chdelta.c
@@ -39,7 +39,8 @@ void chVTInit(void) {
/**
* Enables a virtual timer.
* @param vtp the \p VirtualTimer structure pointer
- * @param time the number of time ticks
+ * @param time the number of time ticks, the value zero is allowed with
+ * meaning "infinite".
* @param vtfunc the timer callback function. After invoking the callback
* the timer is disabled and the structure can be disposed or
* reused.
@@ -48,21 +49,23 @@ void chVTInit(void) {
* @note The associated function is invoked by an interrupt handler.
*/
void chVTSetI(VirtualTimer *vtp, t_time time, t_vtfunc vtfunc, void *par) {
- VirtualTimer *p;
vtp->vt_func = vtfunc;
vtp->vt_par = par;
- p = dlist.dl_next;
- while (p->vt_dtime < time) {
- time -= p->vt_dtime;
- p = p->vt_next;
- }
- vtp->vt_prev = (vtp->vt_next = p)->vt_prev;
- vtp->vt_prev->vt_next = p->vt_prev = vtp;
- vtp->vt_dtime = time;
- if (p != (VirtualTimer *)&dlist)
- p->vt_dtime -= time;
+ if (time) {
+ VirtualTimer *p = dlist.dl_next;
+ while (p->vt_dtime < time) {
+ time -= p->vt_dtime;
+ p = p->vt_next;
+ }
+
+ vtp->vt_prev = (vtp->vt_next = p)->vt_prev;
+ vtp->vt_prev->vt_next = p->vt_prev = vtp;
+ vtp->vt_dtime = time;
+ if (p != (VirtualTimer *)&dlist)
+ p->vt_dtime -= time;
+ }
}
/**