From 584028168221e72aec657f94771f924d51f9c3eb Mon Sep 17 00:00:00 2001 From: Filip Jagodzinski Date: Thu, 17 Jan 2019 17:02:15 +0100 Subject: [PATCH] ROTS: SysTimer: Fix test timing issues Use a busy loop with non-blocking Semaphore::wait(0) calls instead of a single Semaphore::wait(osWaitForever) to improve time measurement accuracy. Looping in Semaphore::wait(0) prevents the board from entering sleep or deepsleep modes while waiting for the semaphore. By skipping the overhead wakeup time, we get more accurate timings. --- TESTS/mbedmicro-rtos-mbed/systimer/main.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/TESTS/mbedmicro-rtos-mbed/systimer/main.cpp b/TESTS/mbedmicro-rtos-mbed/systimer/main.cpp index 8a25ad28719..d1dba047095 100644 --- a/TESTS/mbedmicro-rtos-mbed/systimer/main.cpp +++ b/TESTS/mbedmicro-rtos-mbed/systimer/main.cpp @@ -245,7 +245,10 @@ void test_handler_called_once(void) int32_t sem_slots = st.sem_wait(0); TEST_ASSERT_EQUAL_INT32(0, sem_slots); - sem_slots = st.sem_wait(osWaitForever); + // Wait in a busy loop to prevent entering sleep or deepsleep modes. + while (sem_slots != 1) { + sem_slots = st.sem_wait(0); + } us_timestamp_t t2 = st.get_time(); TEST_ASSERT_EQUAL_INT32(1, sem_slots); TEST_ASSERT_EQUAL_UINT32(1, st.get_tick());