diff options
author | Giovanni Di Sirio <gdisirio@gmail.com> | 2018-08-26 08:17:41 +0000 |
---|---|---|
committer | Giovanni Di Sirio <gdisirio@gmail.com> | 2018-08-26 08:17:41 +0000 |
commit | 622fcd4812cb927ad9e03b22a1bc578068e4c971 (patch) | |
tree | f24f90f95d1fccdc58ab200629331c0257998c4c | |
parent | 30e350e59191ca8d0aa8e4e6bb85b35647df79b3 (diff) | |
download | ChibiOS-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.c | 25 | ||||
-rw-r--r-- | os/common/abstractions/cmsis_os/cmsis_os.h | 2 | ||||
-rw-r--r-- | readme.txt | 2 |
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)
|