aboutsummaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rw-r--r--src/include/ch.h3
-rw-r--r--src/include/sleep.h75
-rw-r--r--src/include/threads.h14
-rw-r--r--src/include/vt.h (renamed from src/include/delta.h)59
4 files changed, 57 insertions, 94 deletions
diff --git a/src/include/ch.h b/src/include/ch.h
index 0ccb42455..28a3b1bd8 100644
--- a/src/include/ch.h
+++ b/src/include/ch.h
@@ -31,7 +31,7 @@
#include <chtypes.h>
#include "lists.h"
#include <chcore.h>
-#include "delta.h"
+#include "vt.h"
#include "scheduler.h"
#include "semaphores.h"
#include "mutexes.h"
@@ -41,7 +41,6 @@
#include "mempools.h"
#include "threads.h"
#include "inline.h"
-#include "sleep.h"
#include "queues.h"
#include "serial.h"
#include "debug.h"
diff --git a/src/include/sleep.h b/src/include/sleep.h
deleted file mode 100644
index faed26109..000000000
--- a/src/include/sleep.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
-
- This file is part of ChibiOS/RT.
-
- ChibiOS/RT is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- ChibiOS/RT is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
- * @addtogroup Time
- * @{
- */
-
-#ifndef _SLEEP_H_
-#define _SLEEP_H_
-
-/**
- * Time conversion utility. Converts from seconds to system ticks number.
- */
-#define S2ST(sec) ((systime_t)((sec) * CH_FREQUENCY))
-
-/**
- * Time conversion utility. Converts from milliseconds to system ticks number.
- * @note The result is rounded upward to the next tick boundary.
- */
-#define MS2ST(msec) ((systime_t)(((((msec) - 1L) * CH_FREQUENCY) / 1000) + 1))
-
-/**
- * Time conversion utility. Converts from microseconds to system ticks number.
- * @note The result is rounded upward to the next tick boundary.
- */
-#define US2ST(usec) ((systime_t)(((((usec) - 1L) * CH_FREQUENCY) / 1000000) + 1))
-
-#ifdef __cplusplus
-extern "C" {
-#endif
- void chThdSleep(systime_t time);
- bool_t chSysInTimeWindow(systime_t start, systime_t end);
-#ifdef __cplusplus
-}
-#endif
-
-/**
- * Returns the number of system ticks since the \p chSysInit() invocation.
- * @return the system ticks number
- * @note The counter can reach its maximum and then returns to zero.
- * @note This function is designed to work with the \p chThdSleepUntil().
- */
-#define chSysGetTime() dlist.dl_stime
-
-/**
- * Suspends the invoking thread until the system time arrives to the specified
- * value.
- */
-#define chThdSleepUntil(t) { \
- chSysLock(); \
- chSchGoSleepTimeoutS(PRSLEEP, \
- (systime_t)((t) - chSysGetTime())); \
- chSysUnlock(); \
-}
-
-#endif /* _SLEEP_H_ */
-
-/** @} */
diff --git a/src/include/threads.h b/src/include/threads.h
index 051ca482d..e9894650d 100644
--- a/src/include/threads.h
+++ b/src/include/threads.h
@@ -189,10 +189,11 @@ extern "C" {
Thread *chThdCreate(tprio_t prio, tmode_t mode, void *workspace,
size_t wsize, tfunc_t pf, void *arg);
void chThdSetPriority(tprio_t newprio);
- void chThdExit(msg_t msg);
Thread *chThdResume(Thread *tp);
void chThdSuspend(Thread **tpp);
void chThdTerminate(Thread *tp);
+ void chThdSleep(systime_t time);
+ void chThdExit(msg_t msg);
#ifdef CH_USE_WAITEXIT
msg_t chThdWait(Thread *tp);
#endif
@@ -266,6 +267,17 @@ extern "C" {
#define chThdCreateFast(prio, workspace, wsize, pf) \
chThdCreateStatic(workspace, wsize, prio, pf, NULL)
+/**
+ * Suspends the invoking thread until the system time arrives to the specified
+ * value.
+ */
+#define chThdSleepUntil(t) { \
+ chSysLock(); \
+ chSchGoSleepTimeoutS(PRSLEEP, \
+ (systime_t)((t) - chSysGetTime())); \
+ chSysUnlock(); \
+}
+
#endif /* _THREADS_H_ */
/** @} */
diff --git a/src/include/delta.h b/src/include/vt.h
index 4d1c9ac23..954c87da5 100644
--- a/src/include/delta.h
+++ b/src/include/vt.h
@@ -18,12 +18,29 @@
*/
/**
- * @addtogroup VirtualTimers
+ * @addtogroup Time
* @{
*/
-#ifndef _DELTA_H_
-#define _DELTA_H_
+#ifndef _VT_H_
+#define _VT_H_
+
+/**
+ * Time conversion utility. Converts from seconds to system ticks number.
+ */
+#define S2ST(sec) ((systime_t)((sec) * CH_FREQUENCY))
+
+/**
+ * Time conversion utility. Converts from milliseconds to system ticks number.
+ * @note The result is rounded upward to the next tick boundary.
+ */
+#define MS2ST(msec) ((systime_t)(((((msec) - 1L) * CH_FREQUENCY) / 1000) + 1))
+
+/**
+ * Time conversion utility. Converts from microseconds to system ticks number.
+ * @note The result is rounded upward to the next tick boundary.
+ */
+#define US2ST(usec) ((systime_t)(((((usec) - 1L) * CH_FREQUENCY) / 1000000) + 1))
/** Virtual Timer callback function.*/
typedef void (*vtfunc_t)(void *);
@@ -40,7 +57,7 @@ struct VirtualTimer {
/** Previous timer in the delta list.*/
VirtualTimer *vt_prev;
/** Time delta before timeout.*/
- systime_t vt_dtime;
+ systime_t vt_time;
/** Timer callback function pointer. The pointer is reset to zero after
the callback is invoked.*/
vtfunc_t vt_func;
@@ -56,26 +73,27 @@ struct VirtualTimer {
*/
typedef struct {
/** Next timer in the list (the one that will be triggered next).*/
- VirtualTimer *dl_next;
+ VirtualTimer *vt_next;
/** Last timer in the list.*/
- VirtualTimer *dl_prev;
+ VirtualTimer *vt_prev;
/** Not used but it must be set to -1.*/
- systime_t dl_dtime;
- volatile systime_t dl_stime;
-} DeltaList;
+ systime_t vt_time;
+ /** System Time counter.*/
+ volatile systime_t vt_systime;
+} VTList;
-extern DeltaList dlist;
+extern VTList vtlist;
#define chVTDoTickI() { \
- dlist.dl_stime++; \
- if (&dlist != (DeltaList *)dlist.dl_next) { \
+ vtlist.vt_systime++; \
+ if (&vtlist != (VTList *)vtlist.vt_next) { \
VirtualTimer *vtp; \
\
- --dlist.dl_next->vt_dtime; \
- while (!(vtp = dlist.dl_next)->vt_dtime) { \
+ --vtlist.vt_next->vt_time; \
+ while (!(vtp = vtlist.vt_next)->vt_time) { \
vtfunc_t fn = vtp->vt_func; \
vtp->vt_func = NULL; \
- (vtp->vt_next->vt_prev = (void *)&dlist)->vt_next = vtp->vt_next; \
+ (vtp->vt_next->vt_prev = (void *)&vtlist)->vt_next = vtp->vt_next;\
fn(vtp->vt_par); \
} \
} \
@@ -93,6 +111,7 @@ extern "C" {
void chVTInit(void);
void chVTSetI(VirtualTimer *vtp, systime_t time, vtfunc_t vtfunc, void *par);
void chVTResetI(VirtualTimer *vtp);
+ bool_t chSysInTimeWindow(systime_t start, systime_t end);
#ifdef __cplusplus
}
#endif
@@ -100,6 +119,14 @@ extern "C" {
/** Returns TRUE if the speciified timer is armed.*/
#define chVTIsArmedI(vtp) ((vtp)->vt_func != NULL)
-#endif /* _DELTA_H_ */
+/**
+ * Returns the number of system ticks since the \p chSysInit() invocation.
+ * @return the system ticks number
+ * @note The counter can reach its maximum and then returns to zero.
+ * @note This function is designed to work with the \p chThdSleepUntil().
+ */
+#define chSysGetTime() (vtlist.vt_systime)
+
+#endif /* _VT_H_ */
/** @} */