From d1ef345165c034bdc2c0e3e75951b7bf7a0c9962 Mon Sep 17 00:00:00 2001 From: chinglee-iot <61685396+chinglee-iot@users.noreply.github.com> Date: Tue, 27 Feb 2024 01:10:00 +0800 Subject: [PATCH] Calling vTaskEndScheduler in application created task (#1187) --- FreeRTOS/Demo/WIN32-MingW/main_full.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/FreeRTOS/Demo/WIN32-MingW/main_full.c b/FreeRTOS/Demo/WIN32-MingW/main_full.c index 03317e22b..0eae31e8c 100644 --- a/FreeRTOS/Demo/WIN32-MingW/main_full.c +++ b/FreeRTOS/Demo/WIN32-MingW/main_full.c @@ -405,6 +405,16 @@ static void prvCheckTask( void * pvParameters ) } /*-----------------------------------------------------------*/ +static void prvEndSchedulerTask( void * pvParameters ) +{ + ( void ) pvParameters; + + /* Calling vTaskEndScheduler in an application created task. */ + vTaskEndScheduler(); +} + +/*-----------------------------------------------------------*/ + static void prvTestTask( void * pvParameters ) { const unsigned long ulMSToSleep = 5; @@ -428,6 +438,7 @@ void vFullDemoIdleFunction( void ) { const unsigned long ulMSToSleep = 15; void * pvAllocated; + BaseType_t xReturn; /* Sleep to reduce CPU load, but don't sleep indefinitely in case there are * tasks waiting to be terminated by the idle task. */ @@ -484,7 +495,10 @@ void vFullDemoIdleFunction( void ) if( ( xTaskGetTickCount() - configINITIAL_TICK_COUNT ) >= xMaxRunTime ) { - vTaskEndScheduler(); + /* Creating another task to end the scheduler to prevent deleting idle + * task itself in vTaskEndScheduler. */ + xReturn = xTaskCreate( prvEndSchedulerTask, "TestEnd", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL ); + configASSERT( xReturn == pdPASS ); } } #endif /* if ( projCOVERAGE_TEST == 1 ) */