mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2026-05-12 11:42:57 -04:00
Add affinity to IDLE tasks in SMP systems
This commit is contained in:
parent
a8c9d35152
commit
53c59b6190
1 changed files with 40 additions and 14 deletions
34
tasks.c
34
tasks.c
|
|
@ -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. */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue