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

34
tasks.c
View file

@ -3629,6 +3629,14 @@ static BaseType_t prvCreateIdleTasks( void )
#if ( configNUMBER_OF_CORES == 1 )
{
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
{
@ -3640,15 +3648,18 @@ static BaseType_t prvCreateIdleTasks( void )
{
vApplicationGetPassiveIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &uxIdleTaskStackSize, ( BaseType_t ) ( xCoreID - 1 ) );
}
}
#endif /* if ( configNUMBER_OF_CORES == 1 ) */
xIdleTaskHandles[ xCoreID ] = xTaskCreateStatic( pxIdleTaskFunction,
xIdleTaskHandles[ xCoreID ] = xTaskCreateStaticAffinitySet( pxIdleTaskFunction,
cIdleName,
uxIdleTaskStackSize,
( void * ) NULL,
portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
pxIdleTaskStackBuffer,
pxIdleTaskTCBBuffer );
pxIdleTaskTCBBuffer,
1u << xCoreID );
}
#endif /* if ( configNUMBER_OF_CORES == 1 ) */
if( xIdleTaskHandles[ xCoreID ] != NULL )
{
@ -3660,6 +3671,8 @@ static BaseType_t prvCreateIdleTasks( void )
}
}
#else /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */
{
#if ( configNUMBER_OF_CORES == 1 )
{
/* The Idle task is being created using dynamically allocated RAM. */
xReturn = xTaskCreate( pxIdleTaskFunction,
@ -3669,6 +3682,19 @@ static BaseType_t prvCreateIdleTasks( void )
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 */
/* Break the loop if any of the idle task is failed to be created. */