aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2008-10-25 10:35:10 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2008-10-25 10:35:10 +0000
commit3547c3916175d387a43c6d3a36330550b1d278d5 (patch)
tree4df53f634f4c2923df3c8fac48a3826aa0e24dc2
parent902470d1c542735b989a727355744a974af43de4 (diff)
downloadChibiOS-3547c3916175d387a43c6d3a36330550b1d278d5.tar.gz
ChibiOS-3547c3916175d387a43c6d3a36330550b1d278d5.tar.bz2
ChibiOS-3547c3916175d387a43c6d3a36330550b1d278d5.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@482 35acf78f-673a-0410-8e92-d51de3d6d3f4
-rw-r--r--docs/ch.txt17
-rw-r--r--readme.txt6
-rw-r--r--src/chsleep.c50
-rw-r--r--src/chthreads.c11
-rw-r--r--src/chvt.c (renamed from src/chdelta.c)36
-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
-rw-r--r--src/kernel.mk7
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