aboutsummaryrefslogtreecommitdiffstats
path: root/src/chsleep.c
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2007-09-18 12:40:26 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2007-09-18 12:40:26 +0000
commit30f0bb1d66f016d6d8366aa483ca12a4724bd599 (patch)
treeaf369b2f1302da6261e5fc8feb7bfe933fba6e89 /src/chsleep.c
parentf712427135d6c180e413a3a22ba75290bb19a6b5 (diff)
downloadChibiOS-30f0bb1d66f016d6d8366aa483ca12a4724bd599.tar.gz
ChibiOS-30f0bb1d66f016d6d8366aa483ca12a4724bd599.tar.bz2
ChibiOS-30f0bb1d66f016d6d8366aa483ca12a4724bd599.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'src/chsleep.c')
-rw-r--r--src/chsleep.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/chsleep.c b/src/chsleep.c
new file mode 100644
index 000000000..9fedd0244
--- /dev/null
+++ b/src/chsleep.c
@@ -0,0 +1,79 @@
+/*
+ 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>
+
+#ifdef CH_USE_SLEEP
+/**
+ * Suspends the invoking thread for the specified time.
+ * @param time the system ticks number
+ */
+void chThdSleep(t_time time) {
+ VirtualTimer vt;
+
+ chSysLock();
+
+ chVTSetI(&vt, time, (t_vtfunc)chSchReadyI, currp);
+ chSchGoSleepI(PRSLEEP);
+
+ chSysUnlock();
+}
+
+#ifdef CH_USE_SYSTEMTIME
+/**
+ * Returns the number of system ticks since the \p chSysInit() invocation.
+ * @return the system ticks number
+ * @note The counter can reach its maximum and return to zero.
+ * @note This function is designed to work with the \p chThdSleepUntil().
+ * @note The function is available only if the \p CH_USE_SYSTEMTIME
+ * option is enabled in \p chconf.h.
+ */
+t_time chSysGetTime(void) {
+
+ return stime;
+}
+
+/**
+ * Suspends the invoking thread until the system time arrives to the specified
+ * value.
+ * @param time the system time
+ * @note The function is available only if the \p CH_USE_SYSTEMTIME
+ * option is enabled in \p chconf.h.
+ */
+void chThdSleepUntil(t_time time) {
+ VirtualTimer t;
+
+ chSysLock();
+
+ chVTSetI(&t, (t_time)(time - stime), (t_vtfunc)chSchReadyI, currp);
+ chSchGoSleepI(PRSLEEP);
+
+ chSysUnlock();
+}
+#endif /* CH_USE_SYSTEMTIME */
+
+#endif /* CH_USE_SLEEP */
+
+/** @} */
+