feat(freertos/idf): Add taskVALID_CORE_ID() macro

This commit adds a taskVALID_CORE_ID() macro, similar to the one offered in
Amazon SMP FreeRTOS.

- Various functions have been updated to use that macro
- Removed some unecessary static asserts of CONFIG_FREERTOS_NO_AFFINITY and
added casting.
- Uncrustify changes
This commit is contained in:
Darian Leung 2023-11-09 13:02:56 +08:00
parent ab3bb3d414
commit 7391b59f54
4 changed files with 18 additions and 18 deletions

View File

@ -204,6 +204,15 @@ typedef enum
#define tskNO_AFFINITY ( ( BaseType_t ) 0x7FFFFFFF )
/* Todo: Update tskNO_AFFINITY value to -1 (IDF-7908) */
/**
* Macro to check if an xCoreID value is valid
*
* @return pdTRUE if valid, pdFALSE otherwise.
*
* \ingroup Tasks
*/
#define taskVALID_CORE_ID( xCoreID ) ( ( ( ( ( BaseType_t ) xCoreID ) >= 0 && ( ( BaseType_t ) xCoreID ) < configNUMBER_OF_CORES ) || ( ( ( BaseType_t ) xCoreID ) == tskNO_AFFINITY ) ) ? pdTRUE : pdFALSE )
/**
*
* Macro for forcing a context switch.

View File

@ -52,9 +52,6 @@
_Static_assert(portBYTE_ALIGNMENT == 16, "portBYTE_ALIGNMENT must be set to 16");
_Static_assert(tskNO_AFFINITY == CONFIG_FREERTOS_NO_AFFINITY, "incorrect tskNO_AFFINITY value");
/* ---------------------------------------------------- Variables ------------------------------------------------------
* - Various variables used to maintain the FreeRTOS port's state. Used from both port.c and various .S files
* - Constant offsets are used by assembly to jump to particular TCB members or a stack area (such as the CPSA). We use

View File

@ -1037,7 +1037,7 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
#if ( configNUMBER_OF_CORES > 1 )
/* Check that xCoreID is valid */
configASSERT( ( ( xCoreID >= 0 ) && ( xCoreID < configNUMBER_OF_CORES ) ) || ( xCoreID == tskNO_AFFINITY ) );
configASSERT( taskVALID_CORE_ID( xCoreID ) == pdTRUE );
#else
/* Hard code xCoreID to 0 */
xCoreID = 0;
@ -2288,9 +2288,9 @@ static BaseType_t prvCreateIdleTasks( void )
BaseType_t xReturn = pdPASS;
BaseType_t xCoreID;
#if ( configNUMBER_OF_CORES > 1 )
char cIdleName[ configMAX_TASK_NAME_LEN ];
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
#if ( configNUMBER_OF_CORES > 1 )
char cIdleName[ configMAX_TASK_NAME_LEN ];
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
/* Add each idle task at the lowest priority. */
for( xCoreID = ( BaseType_t ) 0; xCoreID < ( BaseType_t ) configNUMBER_OF_CORES; xCoreID++ )
@ -2396,7 +2396,6 @@ static BaseType_t prvCreateIdleTasks( void )
portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
&xIdleTaskHandle[ xCoreID ], /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */
xCoreID );
}
#endif /* configSUPPORT_STATIC_ALLOCATION */
}

View File

@ -29,9 +29,7 @@
*/
_Static_assert( offsetof( StaticTask_t, pxDummy6 ) == offsetof( TCB_t, pxStack ) );
_Static_assert( offsetof( StaticTask_t, pxDummy8 ) == offsetof( TCB_t, pxEndOfStack ) );
#if CONFIG_FREERTOS_SMP
_Static_assert( tskNO_AFFINITY == CONFIG_FREERTOS_NO_AFFINITY, "CONFIG_FREERTOS_NO_AFFINITY must be the same as tskNO_AFFINITY" );
#endif /* CONFIG_FREERTOS_SMP */
_Static_assert( tskNO_AFFINITY == ( BaseType_t ) CONFIG_FREERTOS_NO_AFFINITY, "CONFIG_FREERTOS_NO_AFFINITY must be the same as tskNO_AFFINITY" );
/* ------------------------------------------------- Kernel Control ------------------------------------------------- */
@ -343,7 +341,7 @@ _Static_assert( offsetof( StaticTask_t, pxDummy8 ) == offsetof( TCB_t, pxEndOfSt
configASSERT( portVALID_STACK_MEM( puxStackBuffer ) );
configASSERT( portVALID_TCB_MEM( pxTaskBuffer ) );
configASSERT( ( ( xCoreID >= 0 ) && ( xCoreID < configNUM_CORES ) ) || ( xCoreID == tskNO_AFFINITY ) );
configASSERT( taskVALID_CORE_ID( xCoreID ) == pdTRUE );
#if ( configASSERT_DEFINED == 1 )
{
@ -480,8 +478,7 @@ BaseType_t xTaskGetCoreID( TaskHandle_t xTask )
}
#else /* CONFIG_FREERTOS_SMP */
{
configASSERT( xCoreID < configNUMBER_OF_CORES );
configASSERT( xCoreID != tskNO_AFFINITY );
configASSERT( taskVALID_CORE_ID( xCoreID ) == pdTRUE );
/* A critical section is not required as this function does not
* guarantee that the TCB will still be valid when this function
@ -502,8 +499,7 @@ BaseType_t xTaskGetCoreID( TaskHandle_t xTask )
{
uint32_t ulRunTimeCounter;
configASSERT( xCoreID < configNUMBER_OF_CORES );
configASSERT( xCoreID != tskNO_AFFINITY );
configASSERT( taskVALID_CORE_ID( xCoreID ) == pdTRUE );
/* For SMP, we need to take the kernel lock here as we are about to
* access kernel data structures. */
@ -526,8 +522,7 @@ BaseType_t xTaskGetCoreID( TaskHandle_t xTask )
{
configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn;
configASSERT( xCoreID < configNUMBER_OF_CORES );
configASSERT( xCoreID != tskNO_AFFINITY );
configASSERT( taskVALID_CORE_ID( xCoreID ) == pdTRUE );
ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE();