aboutsummaryrefslogtreecommitdiffstats
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
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
-rw-r--r--os/common/abstractions/cmsis_os/cmsis_os.c25
-rw-r--r--os/common/abstractions/cmsis_os/cmsis_os.h2
-rw-r--r--readme.txt2
3 files changed, 18 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.
diff --git a/readme.txt b/readme.txt
index be12c6dac..2d10fd781 100644
--- a/readme.txt
+++ b/readme.txt
@@ -141,6 +141,8 @@
- EX: Updated LIS302DL to 1.1.0 (backported to 18.2.1).
- EX: Updated LPS25H to 1.1.0 (backported to 18.2.1).
- EX: Updated LSM303DLHC to 1.1.0 (backported to 18.2.1).
+- OTH: Fixed wrong timeout handling in CMSIS OS layer (bug #975)
+ (backported to 18.2.2 and 17.6.5).
- HAL: Fixed invalid checks in STM32F37x HAL related to SDADC (bug #974)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed mii_find_phy excludes PHY address 31 (bug #971)