From 2f323e65b24283b75df2cd7d6e943340edd30f22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5ns=20Ansgariusson?= Date: Mon, 23 Mar 2020 09:16:46 +0100 Subject: [PATCH] lib: cmsis_rtos: Fix Periodic timer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit changes the behaviour of the CMSIS-RTOS periodic timers to have an initial timeout equal to the periodic timeout instead of executing the callback function directly when calling the osTimerStart(...); function. This behavioural change is according to the CMSIS-RTOS specification. Signed-off-by: Måns Ansgariusson --- lib/cmsis_rtos_v1/cmsis_timer.c | 2 +- lib/cmsis_rtos_v2/timer.c | 2 +- tests/portability/cmsis_rtos_v1/src/timer.c | 5 +---- tests/portability/cmsis_rtos_v2/src/timer.c | 5 +---- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/lib/cmsis_rtos_v1/cmsis_timer.c b/lib/cmsis_rtos_v1/cmsis_timer.c index 6200d1558c8..93a9f566099 100644 --- a/lib/cmsis_rtos_v1/cmsis_timer.c +++ b/lib/cmsis_rtos_v1/cmsis_timer.c @@ -82,7 +82,7 @@ osStatus osTimerStart(osTimerId timer_id, uint32_t millisec) if (timer->type == osTimerOnce) { k_timer_start(&timer->ztimer, millisec, K_NO_WAIT); } else if (timer->type == osTimerPeriodic) { - k_timer_start(&timer->ztimer, K_NO_WAIT, millisec); + k_timer_start(&timer->ztimer, millisec, millisec); } timer->status = ACTIVE; diff --git a/lib/cmsis_rtos_v2/timer.c b/lib/cmsis_rtos_v2/timer.c index e202618894e..af3b5c278aa 100644 --- a/lib/cmsis_rtos_v2/timer.c +++ b/lib/cmsis_rtos_v2/timer.c @@ -93,7 +93,7 @@ osStatus_t osTimerStart(osTimerId_t timer_id, uint32_t ticks) if (timer->type == osTimerOnce) { k_timer_start(&timer->z_timer, millisec, K_NO_WAIT); } else if (timer->type == osTimerPeriodic) { - k_timer_start(&timer->z_timer, K_NO_WAIT, millisec); + k_timer_start(&timer->z_timer, millisec, millisec); } timer->status = ACTIVE; diff --git a/tests/portability/cmsis_rtos_v1/src/timer.c b/tests/portability/cmsis_rtos_v1/src/timer.c index b562c2ff33d..2ec18b716d7 100644 --- a/tests/portability/cmsis_rtos_v1/src/timer.c +++ b/tests/portability/cmsis_rtos_v1/src/timer.c @@ -89,10 +89,7 @@ void test_timer(void) */ osDelay(timerDelay*NUM_PERIODS + 100); - /* The first firing of the timer should be ignored. - * Hence checking for NUM_PERIODS + 1. - */ - zassert_true(num_periods_executed == NUM_PERIODS + 1, + zassert_true(num_periods_executed == NUM_PERIODS, "error setting up periodic timer"); /* Delete the timer before stop */ diff --git a/tests/portability/cmsis_rtos_v2/src/timer.c b/tests/portability/cmsis_rtos_v2/src/timer.c index 7d91b9a4c4e..3f3b34256ec 100644 --- a/tests/portability/cmsis_rtos_v2/src/timer.c +++ b/tests/portability/cmsis_rtos_v2/src/timer.c @@ -100,10 +100,7 @@ void test_timer(void) */ osDelay(timerDelay * NUM_PERIODS + 10); - /* The first firing of the timer should be ignored. - * Hence checking for NUM_PERIODS + 1. - */ - zassert_true(num_periods_executed == NUM_PERIODS + 1, + zassert_true(num_periods_executed == NUM_PERIODS, "error setting up periodic timer"); /* Delete the timer before stop */