aboutsummaryrefslogtreecommitdiffstats
path: root/os/rt/src/chthreads.c
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2017-10-12 08:37:47 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2017-10-12 08:37:47 +0000
commit286deccd1280b0d66ccc6d9b2617719582607f0d (patch)
tree26c4066c47d36dd4dbeaea4c48c8ac9b3da3a4e7 /os/rt/src/chthreads.c
parentb172abc34df730bea1487f9d2fe518a9b3d098b9 (diff)
downloadChibiOS-286deccd1280b0d66ccc6d9b2617719582607f0d.tar.gz
ChibiOS-286deccd1280b0d66ccc6d9b2617719582607f0d.tar.bz2
ChibiOS-286deccd1280b0d66ccc6d9b2617719582607f0d.zip
EXPERIMENTAL: Introduced sysinterval_t in RT, now system time and intervals are different types and could have different sizes.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/rt5_dev_point1@10812 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/rt/src/chthreads.c')
-rw-r--r--os/rt/src/chthreads.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/os/rt/src/chthreads.c b/os/rt/src/chthreads.c
index 6ca99904b..b462df09f 100644
--- a/os/rt/src/chthreads.c
+++ b/os/rt/src/chthreads.c
@@ -646,7 +646,7 @@ void chThdTerminate(thread_t *tp) {
*
* @api
*/
-void chThdSleep(systime_t time) {
+void chThdSleep(sysinterval_t time) {
chSysLock();
chThdSleepS(time);
@@ -667,11 +667,12 @@ void chThdSleep(systime_t time) {
* @api
*/
void chThdSleepUntil(systime_t time) {
+ sysinterval_t interval;
chSysLock();
- time -= chVTGetSystemTimeX();
- if (time > (systime_t)0) {
- chThdSleepS(time);
+ interval = chTimeSubtractX(time, chVTGetSystemTimeX());
+ if (interval > (sysinterval_t)0) {
+ chThdSleepS(interval);
}
chSysUnlock();
}
@@ -695,8 +696,8 @@ systime_t chThdSleepUntilWindowed(systime_t prev, systime_t next) {
chSysLock();
time = chVTGetSystemTimeX();
- if (chVTIsTimeWithinX(time, prev, next)) {
- chThdSleepS(next - time);
+ if (chTimeIsInRangeX(time, prev, next)) {
+ chThdSleepS(chTimeSubtractX(next, time));
}
chSysUnlock();
@@ -758,7 +759,7 @@ msg_t chThdSuspendS(thread_reference_t *trp) {
*
* @sclass
*/
-msg_t chThdSuspendTimeoutS(thread_reference_t *trp, systime_t timeout) {
+msg_t chThdSuspendTimeoutS(thread_reference_t *trp, sysinterval_t timeout) {
thread_t *tp = chThdGetSelfX();
chDbgAssert(*trp == NULL, "not NULL");
@@ -858,7 +859,7 @@ void chThdResume(thread_reference_t *trp, msg_t msg) {
*
* @sclass
*/
-msg_t chThdEnqueueTimeoutS(threads_queue_t *tqp, systime_t timeout) {
+msg_t chThdEnqueueTimeoutS(threads_queue_t *tqp, sysinterval_t timeout) {
if (TIME_IMMEDIATE == timeout) {
return MSG_TIMEOUT;