| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /* FreeRTOS timer tests
- */
- #include <stdio.h>
- #include "unity.h"
- #include "freertos/FreeRTOS.h"
- #include "freertos/task.h"
- #include "freertos/timers.h"
- static void timer_callback(TimerHandle_t timer)
- {
- volatile int *count;
- count = (volatile int *)pvTimerGetTimerID( timer );
- (*count)++;
- printf("Callback timer %p count %p = %d\n", timer, count, *count);
- }
- TEST_CASE("Oneshot FreeRTOS timers", "[freertos]")
- {
- volatile int count = 0;
- TimerHandle_t oneshot = xTimerCreate("oneshot", 100 / portTICK_PERIOD_MS, pdFALSE,
- (void *)&count, timer_callback);
- TEST_ASSERT(oneshot);
- TEST_ASSERT_EQUAL(pdFALSE, xTimerIsTimerActive(oneshot));
- TEST_ASSERT_EQUAL(0, count);
- TEST_ASSERT( xTimerStart(oneshot, 1) );
- vTaskDelay(2); /* give the timer task a chance to process the message */
- TEST_ASSERT_EQUAL(pdTRUE, xTimerIsTimerActive(oneshot));
- TEST_ASSERT_EQUAL(0, count);
- vTaskDelay(250 / portTICK_PERIOD_MS); // 2.5 timer periods
- TEST_ASSERT_EQUAL(1, count);
- TEST_ASSERT_EQUAL(pdFALSE, xTimerIsTimerActive(oneshot));
- TEST_ASSERT( xTimerDelete(oneshot, 1) );
- }
- TEST_CASE("Recurring FreeRTOS timers", "[freertos]")
- {
- volatile int count = 0;
- TimerHandle_t recurring = xTimerCreate("oneshot", 100 / portTICK_PERIOD_MS, pdTRUE,
- (void *)&count, timer_callback);
- TEST_ASSERT(recurring);
- TEST_ASSERT_EQUAL(pdFALSE, xTimerIsTimerActive(recurring));
- TEST_ASSERT_EQUAL(0, count);
- TEST_ASSERT( xTimerStart(recurring, 1) );
- vTaskDelay(2); // let timer task process the queue
- TEST_ASSERT_EQUAL(pdTRUE, xTimerIsTimerActive(recurring));
- TEST_ASSERT_EQUAL(0, count);
- vTaskDelay(250 / portTICK_PERIOD_MS); // 2.5 timer periods
- TEST_ASSERT_EQUAL(2, count);
- TEST_ASSERT_EQUAL(pdTRUE, xTimerIsTimerActive(recurring));
- TEST_ASSERT( xTimerStop(recurring, 1) );
- TEST_ASSERT_EQUAL(2, count);
- vTaskDelay(100 / portTICK_PERIOD_MS); // One more timer period
- TEST_ASSERT_EQUAL(2, count); // hasn't gone up
- TEST_ASSERT_EQUAL(pdFALSE, xTimerIsTimerActive(recurring));
- TEST_ASSERT( xTimerDelete(recurring, 1) );
- }
|