mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 00:51:42 +01:00 
			
		
		
		
	
		
			
	
	
		
			71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/* 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) );
							 | 
						||
| 
								 | 
							
								}
							 |