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