mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-12-07 05:34:59 -05:00
Delete kernel created idle and timer task in vTaskEndScheduler
* The last application still need to be deleted by application. It has to be deleted after scheduler stopped.
This commit is contained in:
parent
88f20df203
commit
ba44a70ed0
2 changed files with 24 additions and 25 deletions
13
portable/ThirdParty/GCC/Posix/port.c
vendored
13
portable/ThirdParty/GCC/Posix/port.c
vendored
|
|
@ -251,19 +251,6 @@ BaseType_t xPortStartScheduler( void )
|
|||
sigwait( &xSignals, &iSignal );
|
||||
}
|
||||
|
||||
/* Cancel the Idle task and free its resources */
|
||||
#if ( INCLUDE_xTaskGetIdleTaskHandle == 1 )
|
||||
vTaskDelete( xTaskGetIdleTaskHandle() );
|
||||
#endif /* #if ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) */
|
||||
|
||||
#if ( configUSE_TIMERS == 1 )
|
||||
/* Cancel the Timer task and free its resources */
|
||||
vTaskDelete( xTimerGetTimerDaemonTaskHandle() );
|
||||
#endif /* #if ( configUSE_TIMERS == 1 ) */
|
||||
|
||||
/* Cancel the last task. */
|
||||
vTaskDelete( xTaskGetCurrentTaskHandle() );
|
||||
|
||||
/*
|
||||
* clear out the variable that is used to end the scheduler, otherwise
|
||||
* subsequent scheduler restarts will end immediately.
|
||||
|
|
|
|||
36
tasks.c
36
tasks.c
|
|
@ -3738,8 +3738,6 @@ void vTaskStartScheduler( void )
|
|||
|
||||
void vTaskEndScheduler( void )
|
||||
{
|
||||
TCB_t * pxTCB;
|
||||
|
||||
traceENTER_vTaskEndScheduler();
|
||||
|
||||
/* Stop the scheduler interrupts and call the portable scheduler end
|
||||
|
|
@ -3748,18 +3746,32 @@ void vTaskEndScheduler( void )
|
|||
portDISABLE_INTERRUPTS();
|
||||
xSchedulerRunning = pdFALSE;
|
||||
|
||||
/* Delete tasks waiting for termination. */
|
||||
while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
|
||||
#if ( INCLUDE_vTaskDelete == 1 )
|
||||
{
|
||||
/* MISRA Ref 11.5.3 [Void pointer assignment] */
|
||||
/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */
|
||||
/* coverity[misra_c_2012_rule_11_5_violation] */
|
||||
pxTCB = listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) );
|
||||
( void ) uxListRemove( &( pxTCB->xStateListItem ) );
|
||||
--uxCurrentNumberOfTasks;
|
||||
--uxDeletedTasksWaitingCleanUp;
|
||||
prvDeleteTCB( pxTCB );
|
||||
TCB_t * pxTCB;
|
||||
|
||||
#if ( configUSE_TIMERS == 1 )
|
||||
/* Delete the timer task created in kernel. */
|
||||
vTaskDelete( xTimerGetTimerDaemonTaskHandle() );
|
||||
#endif /* #if ( configUSE_TIMERS == 1 ) */
|
||||
|
||||
/* Delete the Idle task created in kernel. */
|
||||
vTaskDelete( xIdleTaskHandles[ 0 ] );
|
||||
|
||||
/* Delete tasks waiting for termination. */
|
||||
while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
|
||||
{
|
||||
/* MISRA Ref 11.5.3 [Void pointer assignment] */
|
||||
/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */
|
||||
/* coverity[misra_c_2012_rule_11_5_violation] */
|
||||
pxTCB = listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) );
|
||||
( void ) uxListRemove( &( pxTCB->xStateListItem ) );
|
||||
--uxCurrentNumberOfTasks;
|
||||
--uxDeletedTasksWaitingCleanUp;
|
||||
prvDeleteTCB( pxTCB );
|
||||
}
|
||||
}
|
||||
#endif /* #if ( INCLUDE_vTaskDelete == 1 ) */
|
||||
|
||||
vPortEndScheduler();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue