diff options
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/ch.h | 3 | ||||
-rw-r--r-- | src/include/sleep.h | 75 | ||||
-rw-r--r-- | src/include/threads.h | 14 | ||||
-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_ */
/** @} */
|