From d442d7908af72dfda220e0f44721f1e5425b6087 Mon Sep 17 00:00:00 2001 From: chinglee-iot <61685396+chinglee-iot@users.noreply.github.com> Date: Thu, 5 Oct 2023 16:57:53 +0800 Subject: [PATCH] Add configCONTROL_INFINITE_LOOP for loop control in unit test (#783) * Add configCONTROL_INFINITE_LOOP in FreeRTOS.h * Use configCONTROL_INFINITE_LOOP in tasks.c and timer.c --------- Co-authored-by: Soren Ptak Co-authored-by: kar-rahul-aws <118818625+kar-rahul-aws@users.noreply.github.com> --- include/FreeRTOS.h | 6 ++++++ tasks.c | 10 ++-------- timers.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/FreeRTOS.h b/include/FreeRTOS.h index 712d8cb52..f57586375 100644 --- a/include/FreeRTOS.h +++ b/include/FreeRTOS.h @@ -2872,6 +2872,12 @@ #define configRUN_ADDITIONAL_TESTS 0 #endif +/* The following config allows infinite loop control. For example, control the + * infinite loop in idle task function when performing unit tests. */ +#ifndef configCONTROL_INFINITE_LOOP + #define configCONTROL_INFINITE_LOOP() +#endif + /* Sometimes the FreeRTOSConfig.h settings only allow a task to be created using * dynamically allocated RAM, in which case when any task is deleted it is known * that both the task's stack and TCB need to be freed. Sometimes the diff --git a/tasks.c b/tasks.c index c8a8cdea3..48c1960aa 100644 --- a/tasks.c +++ b/tasks.c @@ -317,12 +317,6 @@ #define portDECREMENT_CRITICAL_NESTING_COUNT() ( pxCurrentTCBs[ portGET_CORE_ID() ]->uxCriticalNesting-- ) #endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( portCRITICAL_NESTING_IN_TCB == 1 ) ) */ -/* Code below here allows infinite loop controlling, especially for the infinite loop - * in idle task function (for example when performing unit tests). */ -#ifndef INFINITE_LOOP - #define INFINITE_LOOP() 1 -#endif - #define taskBITS_PER_BYTE ( ( size_t ) 8 ) #if ( configNUMBER_OF_CORES > 1 ) @@ -5374,7 +5368,7 @@ void vTaskMissedYield( void ) taskYIELD(); - for( ; INFINITE_LOOP(); ) + for( ; configCONTROL_INFINITE_LOOP(); ) { #if ( configUSE_PREEMPTION == 0 ) { @@ -5459,7 +5453,7 @@ static portTASK_FUNCTION( prvIdleTask, pvParameters ) } #endif /* #if ( configNUMBER_OF_CORES > 1 ) */ - for( ; INFINITE_LOOP(); ) + for( ; configCONTROL_INFINITE_LOOP(); ) { /* See if any tasks have deleted themselves - if so then the idle task * is responsible for freeing the deleted task's TCB and stack. */ diff --git a/timers.c b/timers.c index f27caba3f..e2f3f9809 100644 --- a/timers.c +++ b/timers.c @@ -709,7 +709,7 @@ } #endif /* configUSE_DAEMON_TASK_STARTUP_HOOK */ - for( ; ; ) + for( ; configCONTROL_INFINITE_LOOP(); ) { /* Query the timers list to see if it contains any timers, and if so, * obtain the time at which the next timer will expire. */