diff options
-rw-r--r-- | docs/ch.txt | 17 | ||||
-rw-r--r-- | readme.txt | 6 | ||||
-rw-r--r-- | src/chsleep.c | 50 | ||||
-rw-r--r-- | src/chthreads.c | 11 | ||||
-rw-r--r-- | src/chvt.c (renamed from src/chdelta.c) | 36 | ||||
-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 | ||||
-rw-r--r-- | src/kernel.mk | 7 |
10 files changed, 105 insertions, 173 deletions
diff --git a/docs/ch.txt b/docs/ch.txt index 2186de365..90a92c294 100644 --- a/docs/ch.txt +++ b/docs/ch.txt @@ -348,20 +348,11 @@ /** @} */
/**
- * @defgroup VirtualTimers Virtual Timers
+ * @defgroup Time Time and Virtual Timers
* @{
- * Virtual Timers APIs.
- * @file src/chdelta.c Virtual Timers code.
- * @file delta.h Virtual Timers macros and structures.
- */
-/** @} */
-
-/**
- * @defgroup Time Time
- * @{
- * Time related APIs.
- * @file include/sleep.h Time macros and structures.
- * @file chsleep.c Time functions.
+ * Time and Virtual Timers related APIs.
+ * @file include/vt.h Time macros and structures.
+ * @file chvt.c Time functions.
*/
/** @} */
diff --git a/readme.txt b/readme.txt index 3494707a5..5181ceee6 100644 --- a/readme.txt +++ b/readme.txt @@ -74,6 +74,12 @@ Win32-MinGW - ChibiOS/RT simulator and demo into a WIN32 process, *****************************************************************************
*** 0.7.3 ***
+- CHANGE: Renamed the files chdelta.c and delta.h to chvt.c and vt.h. All the
+ system time related functions and macros are now moved here.
+- CHANGE: Removed the files chsleep.c and sleep.h, the content was moved in
+ other files.
+- CHANGE: Renamed the structure DeltaList to VTList, it includes the system
+ time counter too now.
- CHANGE: Removed the CH_USE_SYSTEMTIME and CH_USE_VIRTUAL_TIMER configuration
options in order to make the chconf.h file simpler. The related subsystems
are almost always required and are now always included.
diff --git a/src/chsleep.c b/src/chsleep.c deleted file mode 100644 index 7bf805471..000000000 --- a/src/chsleep.c +++ /dev/null @@ -1,50 +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
- * @{
- */
-
-#include <ch.h>
-
-/**
- * Suspends the invoking thread for the specified time.
- * @param time the system ticks number
- */
-void chThdSleep(systime_t time) {
-
- chSysLock();
- chSchGoSleepTimeoutS(PRSLEEP, time);
- chSysUnlock();
-}
-
-/**
- * Checks if the current system time is within the specified time window.
- * @param start the start of the time window (inclusive)
- * @param end the end of the time window (non inclusive)
- */
-bool_t chSysInTimeWindow(systime_t start, systime_t end) {
-
- systime_t time = chSysGetTime();
- return end >= start ? (time >= start) && (time < end) :
- (time >= start) || (time < end);
-}
-
-/** @} */
diff --git a/src/chthreads.c b/src/chthreads.c index 58df0a5c1..11d2442ad 100644 --- a/src/chthreads.c +++ b/src/chthreads.c @@ -288,6 +288,17 @@ void chThdTerminate(Thread *tp) { } /** + * Suspends the invoking thread for the specified time. + * @param time the system ticks number + */ +void chThdSleep(systime_t time) { + + chSysLock(); + chSchGoSleepTimeoutS(PRSLEEP, time); + chSysUnlock(); +} + +/** * Terminates the current thread by specifying an exit status code. * * @param msg the thread exit code. The code can be retrieved by using diff --git a/src/chdelta.c b/src/chvt.c index ec654907c..77978e16c 100644 --- a/src/chdelta.c +++ b/src/chvt.c @@ -24,7 +24,7 @@ #include <ch.h>
-DeltaList dlist;
+VTList vtlist;
/**
* Virtual Timers initialization.
@@ -32,9 +32,9 @@ DeltaList dlist; */
void chVTInit(void) {
- dlist.dl_next = dlist.dl_prev = (void *)&dlist;
- dlist.dl_dtime = (systime_t)-1;
- dlist.dl_stime = 0;
+ vtlist.vt_next = vtlist.vt_prev = (void *)&vtlist;
+ vtlist.vt_time = (systime_t)-1;
+ vtlist.vt_systime = 0;
}
/**
@@ -56,17 +56,17 @@ void chVTSetI(VirtualTimer *vtp, systime_t time, vtfunc_t vtfunc, void *par) { vtp->vt_par = par;
vtp->vt_func = vtfunc;
if (time) {
- VirtualTimer *p = dlist.dl_next;
- while (p->vt_dtime < time) {
- time -= p->vt_dtime;
+ VirtualTimer *p = vtlist.vt_next;
+ while (p->vt_time < time) {
+ time -= p->vt_time;
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 != (void *)&dlist)
- p->vt_dtime -= time;
+ vtp->vt_time = time;
+ if (p != (void *)&vtlist)
+ p->vt_time -= time;
}
else
vtp->vt_next = vtp->vt_prev = vtp; // Allows a chVTResetI() on the fake timer.
@@ -80,11 +80,23 @@ void chVTSetI(VirtualTimer *vtp, systime_t time, vtfunc_t vtfunc, void *par) { */
void chVTResetI(VirtualTimer *vtp) {
- if (vtp->vt_next != (void *)&dlist)
- vtp->vt_next->vt_dtime += vtp->vt_dtime;
+ if (vtp->vt_next != (void *)&vtlist)
+ vtp->vt_next->vt_time += vtp->vt_time;
vtp->vt_prev->vt_next = vtp->vt_next;
vtp->vt_next->vt_prev = vtp->vt_prev;
vtp->vt_func = 0;
}
+/**
+ * Checks if the current system time is within the specified time window.
+ * @param start the start of the time window (inclusive)
+ * @param end the end of the time window (non inclusive)
+ */
+bool_t chSysInTimeWindow(systime_t start, systime_t end) {
+
+ systime_t time = chSysGetTime();
+ return end >= start ? (time >= start) && (time < end) :
+ (time >= start) || (time < end);
+}
+
/** @} */
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_ */
/** @} */
diff --git a/src/kernel.mk b/src/kernel.mk index 052303e1e..7f6d93fdd 100644 --- a/src/kernel.mk +++ b/src/kernel.mk @@ -1,10 +1,9 @@ # List of all the ChibiOS/RT kernel files, there is no need to remove the files
# from this list, you can disable parts of the kernel by editing chconf.h.
KERNSRC = ../../src/chinit.c ../../src/chdebug.c \
- ../../src/chlists.c ../../src/chdelta.c \
+ ../../src/chlists.c ../../src/chvt.c \
../../src/chschd.c ../../src/chthreads.c \
../../src/chsem.c ../../src/chmtx.c \
../../src/chevents.c ../../src/chmsg.c \
- ../../src/chsleep.c ../../src/chqueues.c \
- ../../src/chserial.c ../../src/chheap.c \
- ../../src/chmempools.c
+ ../../src/chqueues.c ../../src/chserial.c \
+ ../../src/chheap.c ../../src/chmempools.c
|