aboutsummaryrefslogtreecommitdiffstats
path: root/os/common
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2018-08-26 08:17:41 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2018-08-26 08:17:41 +0000
commit622fcd4812cb927ad9e03b22a1bc578068e4c971 (patch)
treef24f90f95d1fccdc58ab200629331c0257998c4c /os/common
parent30e350e59191ca8d0aa8e4e6bb85b35647df79b3 (diff)
downloadChibiOS-622fcd4812cb927ad9e03b22a1bc578068e4c971.tar.gz
ChibiOS-622fcd4812cb927ad9e03b22a1bc578068e4c971.tar.bz2
ChibiOS-622fcd4812cb927ad9e03b22a1bc578068e4c971.zip
Fixed bug #975.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12227 110e8d01-0319-4d1e-a829-52ad28d1bb01
Diffstat (limited to 'os/common')
-rw-r--r--os/common/abstractions/cmsis_os/cmsis_os.c25
-rw-r--r--os/common/abstractions/cmsis_os/cmsis_os.h2
2 files changed, 16 insertions, 11 deletions
diff --git a/os/common/abstractions/cmsis_os/cmsis_os.c b/os/common/abstractions/cmsis_os/cmsis_os.c
index c756a81b5..d155660ad 100644
--- a/os/common/abstractions/cmsis_os/cmsis_os.c
+++ b/os/common/abstractions/cmsis_os/cmsis_os.c
@@ -287,8 +287,9 @@ int32_t osSignalClear(osThreadId thread_id, int32_t signals) {
*/
osEvent osSignalWait(int32_t signals, uint32_t millisec) {
osEvent event;
- sysinterval_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ?
- TIME_INFINITE : TIME_MS2I(millisec);
+ sysinterval_t timeout = (millisec == osWaitForever ?
+ TIME_INFINITE : (millisec == 0 ? TIME_IMMEDIATE :
+ TIME_MS2I(millisec)));
if (signals == 0)
event.value.signals = (uint32_t)chEvtWaitAnyTimeout(ALL_EVENTS, timeout);
@@ -324,8 +325,9 @@ osSemaphoreId osSemaphoreCreate(const osSemaphoreDef_t *semaphore_def,
* @brief Wait on a semaphore.
*/
int32_t osSemaphoreWait(osSemaphoreId semaphore_id, uint32_t millisec) {
- sysinterval_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ?
- TIME_INFINITE : TIME_MS2I(millisec);
+ sysinterval_t timeout = (millisec == osWaitForever ?
+ TIME_INFINITE : (millisec == 0 ? TIME_IMMEDIATE :
+ TIME_MS2I(millisec)));
msg_t msg = chSemWaitTimeout((semaphore_t *)semaphore_id, timeout);
switch (msg) {
@@ -380,8 +382,9 @@ osMutexId osMutexCreate(const osMutexDef_t *mutex_def) {
* @brief Wait on a mutex.
*/
osStatus osMutexWait(osMutexId mutex_id, uint32_t millisec) {
- sysinterval_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ?
- TIME_INFINITE : TIME_MS2I(millisec);
+ sysinterval_t timeout = (millisec == osWaitForever ?
+ TIME_INFINITE : (millisec == 0 ? TIME_IMMEDIATE :
+ TIME_MS2I(millisec)));
msg_t msg = chBSemWaitTimeout((binary_semaphore_t *)mutex_id, timeout);
switch (msg) {
@@ -495,8 +498,9 @@ osStatus osMessagePut(osMessageQId queue_id,
uint32_t info,
uint32_t millisec) {
msg_t msg;
- sysinterval_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ?
- TIME_INFINITE : TIME_MS2I(millisec);
+ sysinterval_t timeout = (millisec == osWaitForever ?
+ TIME_INFINITE : (millisec == 0 ? TIME_IMMEDIATE :
+ TIME_MS2I(millisec)));
if (port_is_isr_context()) {
@@ -522,8 +526,9 @@ osEvent osMessageGet(osMessageQId queue_id,
uint32_t millisec) {
msg_t msg;
osEvent event;
- sysinterval_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ?
- TIME_INFINITE : TIME_MS2I(millisec);
+ sysinterval_t timeout = (millisec == osWaitForever ?
+ TIME_INFINITE : (millisec == 0 ? TIME_IMMEDIATE :
+ TIME_MS2I(millisec)));
event.def.message_id = queue_id;
diff --git a/os/common/abstractions/cmsis_os/cmsis_os.h b/os/common/abstractions/cmsis_os/cmsis_os.h
index 648456159..1b41318e1 100644
--- a/os/common/abstractions/cmsis_os/cmsis_os.h
+++ b/os/common/abstractions/cmsis_os/cmsis_os.h
@@ -71,7 +71,7 @@
/**
* @brief Wait forever specification for timeouts.
*/
-#define osWaitForever TIME_INFINITE
+#define osWaitForever ((uint32_t)-1)
/**
* @brief System tick frequency.