diff --git a/include/FreeRTOS.h b/include/FreeRTOS.h index ca5818eae49..1a6468b186a 100644 --- a/include/FreeRTOS.h +++ b/include/FreeRTOS.h @@ -1165,6 +1165,10 @@ #error configUSE_TASK_PREEMPTION_DISABLE is not supported in single core FreeRTOS #endif +#if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_PORT_OPTIMISED_TASK_SELECTION != 0 ) ) + #error configUSE_PORT_OPTIMISED_TASK_SELECTION is not supported in SMP FreeRTOS +#endif + #ifndef configINITIAL_TICK_COUNT #define configINITIAL_TICK_COUNT 0 #endif diff --git a/tasks.c b/tasks.c index 6cb233e7a59..a0651b1b60d 100644 --- a/tasks.c +++ b/tasks.c @@ -152,6 +152,10 @@ listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &( pxReadyTasksLists[ uxTopPriority ] ) ); \ uxTopReadyPriority = uxTopPriority; \ } while( 0 ) /* taskSELECT_HIGHEST_PRIORITY_TASK */ + #else /* if ( configNUMBER_OF_CORES == 1 ) */ + + #define taskSELECT_HIGHEST_PRIORITY_TASK( xCoreID ) prvSelectHighestPriorityTask( xCoreID ) + #endif /* if ( configNUMBER_OF_CORES == 1 ) */ /*-----------------------------------------------------------*/ @@ -164,10 +168,6 @@ #else /* configUSE_PORT_OPTIMISED_TASK_SELECTION */ - #if ( configNUMBER_OF_CORES > 1 ) - #error configUSE_PORT_OPTIMISED_TASK_SELECTION not supported in FreeRTOS SMP. - #endif - /* If configUSE_PORT_OPTIMISED_TASK_SELECTION is 1 then task selection is * performed in a way that is tailored to the particular microcontroller * architecture being used. */ @@ -4701,7 +4701,7 @@ BaseType_t xTaskIncrementTick( void ) #endif /* Select a new task to run. */ - prvSelectHighestPriorityTask( xCoreID ); + taskSELECT_HIGHEST_PRIORITY_TASK( xCoreID ); traceTASK_SWITCHED_IN(); /* After the new task is switched in, update the global errno. */