Skip to content

Commit 2d50c60

Browse files
committed
Fix MAIN_THREAD_ID check
In cmsis_os.h OS_TIMERS is undefined unless the timer thread is disabled, in which case it is defined to 0. When comparing against an undefined value, the undefined value will evaluate as if it were 0. Because of this the MAIN_THREAD_ID was always set to 0x1. This patch fixes that problem by checking if OS_TIMERS is defined before comparing it to 0. This problem only effects IAR since it has a different heap/stack layout. GCC_ARM and ARM have a dedicated stack region so the presence of a guard word and stack checking does not cause problems. This problem manifested on the NRF51_DK in the pull request ARMmbed#2211 as a c_strings test failure on floating point. This is because the guard word of the main stack overlapped with standard library data used by sprintf and corrupted it.
1 parent 64928b0 commit 2d50c60

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

rtos/rtx/TARGET_CORTEX_M/cmsis_os.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,10 @@
8383
/* If os timers macro is set to 0, there's no timer thread created, therefore
8484
* main thread has tid 0x01
8585
*/
86-
#if (OS_TIMERS != 0)
87-
#define MAIN_THREAD_ID 0x02
88-
#else
86+
#if defined(OS_TIMERS) && (OS_TIMERS == 0)
8987
#define MAIN_THREAD_ID 0x01
88+
#else
89+
#define MAIN_THREAD_ID 0x02
9090
#endif
9191
#endif
9292

0 commit comments

Comments
 (0)