Add affinity to IDLE tasks in SMP systems

This commit is contained in:
rus084 2026-05-08 11:01:03 +03:00 committed by GitHub
parent a8c9d35152
commit 53c59b6190
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

54
tasks.c
View file

@ -3629,6 +3629,14 @@ static BaseType_t prvCreateIdleTasks( void )
#if ( configNUMBER_OF_CORES == 1 ) #if ( configNUMBER_OF_CORES == 1 )
{ {
vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &uxIdleTaskStackSize ); vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &uxIdleTaskStackSize );
xIdleTaskHandles[ xCoreID ] = xTaskCreateStatic( pxIdleTaskFunction,
cIdleName,
uxIdleTaskStackSize,
( void * ) NULL,
portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
pxIdleTaskStackBuffer,
pxIdleTaskTCBBuffer );
} }
#else #else
{ {
@ -3640,15 +3648,18 @@ static BaseType_t prvCreateIdleTasks( void )
{ {
vApplicationGetPassiveIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &uxIdleTaskStackSize, ( BaseType_t ) ( xCoreID - 1 ) ); vApplicationGetPassiveIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &uxIdleTaskStackSize, ( BaseType_t ) ( xCoreID - 1 ) );
} }
xIdleTaskHandles[ xCoreID ] = xTaskCreateStaticAffinitySet( pxIdleTaskFunction,
cIdleName,
uxIdleTaskStackSize,
( void * ) NULL,
portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
pxIdleTaskStackBuffer,
pxIdleTaskTCBBuffer,
1u << xCoreID );
} }
#endif /* if ( configNUMBER_OF_CORES == 1 ) */ #endif /* if ( configNUMBER_OF_CORES == 1 ) */
xIdleTaskHandles[ xCoreID ] = xTaskCreateStatic( pxIdleTaskFunction,
cIdleName,
uxIdleTaskStackSize,
( void * ) NULL,
portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
pxIdleTaskStackBuffer,
pxIdleTaskTCBBuffer );
if( xIdleTaskHandles[ xCoreID ] != NULL ) if( xIdleTaskHandles[ xCoreID ] != NULL )
{ {
@ -3661,13 +3672,28 @@ static BaseType_t prvCreateIdleTasks( void )
} }
#else /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */ #else /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */
{ {
/* The Idle task is being created using dynamically allocated RAM. */ #if ( configNUMBER_OF_CORES == 1 )
xReturn = xTaskCreate( pxIdleTaskFunction, {
cIdleName, /* The Idle task is being created using dynamically allocated RAM. */
configMINIMAL_STACK_SIZE, xReturn = xTaskCreate( pxIdleTaskFunction,
( void * ) NULL, cIdleName,
portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */ configMINIMAL_STACK_SIZE,
&xIdleTaskHandles[ xCoreID ] ); ( void * ) NULL,
portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
&xIdleTaskHandles[ xCoreID ] );
}
#else
{
/* The Idle task is being created using dynamically allocated RAM. */
xReturn = xTaskCreateAffinitySet( pxIdleTaskFunction,
cIdleName,
configMINIMAL_STACK_SIZE,
( void * ) NULL,
portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
1u << xCoreID,
&xIdleTaskHandles[ xCoreID ] );
}
#endif /* if ( configNUMBER_OF_CORES == 1 ) */
} }
#endif /* configSUPPORT_STATIC_ALLOCATION */ #endif /* configSUPPORT_STATIC_ALLOCATION */