mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
freertos: Update task creation pinned to core functions
This commit updates the "xTaskCreate...PinnedToCore()" functions to call the "xTaskCreate...AffinitySet()" equivalent functions.
This commit is contained in:
parent
6a38499172
commit
199df492b7
@ -3278,12 +3278,13 @@ void vTaskYieldWithinAPI( void );
|
||||
* ------------------------------------------------------------------------------------------------------------------ */
|
||||
|
||||
#ifdef ESP_PLATFORM
|
||||
BaseType_t xTaskCreatePinnedToCore( TaskFunction_t pvTaskCode,
|
||||
|
||||
BaseType_t xTaskCreatePinnedToCore( TaskFunction_t pxTaskCode,
|
||||
const char * const pcName,
|
||||
const uint32_t usStackDepth,
|
||||
void * const pvParameters,
|
||||
UBaseType_t uxPriority,
|
||||
TaskHandle_t * const pvCreatedTask,
|
||||
TaskHandle_t * const pxCreatedTask,
|
||||
const BaseType_t xCoreID);
|
||||
|
||||
#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||
|
@ -9,7 +9,7 @@ The following terms will be used in this document to avoid confusion between the
|
||||
|
||||
# Organization
|
||||
|
||||
This directory contains a copy of SMP FreeRTOS based off of upstream commit [483237711](https://github.com/FreeRTOS/FreeRTOS-Kernel/commit/4832377117b4198db43009f2b548497d9cdbf8da)
|
||||
This directory contains a copy of SMP FreeRTOS based off of upstream commit [a97741a](https://github.com/FreeRTOS/FreeRTOS-Kernel/commit/a97741a08d36ac08d913b8bc86abf128df627e85)
|
||||
|
||||
- IDF FreeRTOS remains in `components/freertos/FreeRTOS-Kernel`
|
||||
- SMP FreeRTOS is entirely contained in `components/freertos/FreeRTOS-Kernel-SMP`
|
||||
@ -143,12 +143,8 @@ IDF FreeRTOS added several APIs. These are copied over to SMP FreeRTOS to mainta
|
||||
|
||||
### `xTaskCreatePinnedToCore()`/`xTaskCreateStaticPinnedToCore()`
|
||||
|
||||
- Used to create a task with a preset affinity on creation
|
||||
- When a task can only run on a particular core, this function saves the need of adding logic to:
|
||||
- Disabling preemption on all cores
|
||||
- Setting the created task's affinity
|
||||
- Reenabling preemption on all cores.
|
||||
- Check if this (or something similar) can be upstreamed
|
||||
- `xTaskCreate...AffinitySet()` have been upstreamed
|
||||
- `xTaskCreate...PinnedToCore()` now just map to the `xTaskCreate...AffinitySet()` equivalent functions.
|
||||
|
||||
### `vTaskSetThreadLocalStoragePointerAndDelCallback()`
|
||||
|
||||
|
@ -6475,41 +6475,31 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
||||
|
||||
#ifdef ESP_PLATFORM
|
||||
|
||||
BaseType_t xTaskCreatePinnedToCore( TaskFunction_t pvTaskCode,
|
||||
BaseType_t xTaskCreatePinnedToCore( TaskFunction_t pxTaskCode,
|
||||
const char * const pcName,
|
||||
const uint32_t usStackDepth,
|
||||
void * const pvParameters,
|
||||
UBaseType_t uxPriority,
|
||||
TaskHandle_t * const pvCreatedTask,
|
||||
TaskHandle_t * const pxCreatedTask,
|
||||
const BaseType_t xCoreID)
|
||||
{
|
||||
BaseType_t ret;
|
||||
#if ( configUSE_CORE_AFFINITY == 1 && configNUM_CORES > 1 )
|
||||
/*
|
||||
If we are using multiple cores and core affinity, we need to create the task then set the core affinity of that
|
||||
task. We do this with interrupts disabled to prevent the task from being scehduled immediately after
|
||||
xTaskCreate().
|
||||
*/
|
||||
portDISABLE_INTERRUPTS();
|
||||
TaskHandle_t xTaskHandleTemp;
|
||||
ret = xTaskCreate(pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, &xTaskHandleTemp);
|
||||
if (ret == pdPASS) {
|
||||
UBaseType_t uxCoreAffinityMask;
|
||||
if (xCoreID == tskNO_AFFINITY) {
|
||||
uxCoreAffinityMask = tskNO_AFFINITY;
|
||||
} else {
|
||||
uxCoreAffinityMask = (1 << xCoreID);
|
||||
#if ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUM_CORES > 1 ) )
|
||||
{
|
||||
// Convert xCoreID into an affinity mask
|
||||
UBaseType_t uxCoreAffinityMask;
|
||||
if (xCoreID == tskNO_AFFINITY) {
|
||||
uxCoreAffinityMask = tskNO_AFFINITY;
|
||||
} else {
|
||||
uxCoreAffinityMask = (1 << xCoreID);
|
||||
}
|
||||
ret = xTaskCreateAffinitySet(pxTaskCode, pcName, usStackDepth, pvParameters, uxPriority, uxCoreAffinityMask, pxCreatedTask);
|
||||
}
|
||||
vTaskCoreAffinitySet(xTaskHandleTemp, uxCoreAffinityMask);
|
||||
if (pvCreatedTask != NULL) {
|
||||
*pvCreatedTask = xTaskHandleTemp;
|
||||
#else /* ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUM_CORES > 1 ) ) */
|
||||
{
|
||||
ret = xTaskCreate(pxTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask);
|
||||
}
|
||||
}
|
||||
portENABLE_INTERRUPTS();
|
||||
#else /* if ( configUSE_CORE_AFFINITY == 1 && configNUM_CORES > 1 ) */
|
||||
//No need to set the affinity. Just create the task
|
||||
ret = xTaskCreate(pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pvCreatedTask);
|
||||
#endif /* if ( configUSE_CORE_AFFINITY == 1 && configNUM_CORES > 1 ) */
|
||||
#endif /* ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUM_CORES > 1 ) ) */
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -6523,29 +6513,24 @@ TaskHandle_t xTaskCreateStaticPinnedToCore( TaskFunction_t pxTaskCode,
|
||||
StaticTask_t * const pxTaskBuffer,
|
||||
const BaseType_t xCoreID)
|
||||
{
|
||||
TaskHandle_t xTaskHandleTemp;
|
||||
#if ( configUSE_CORE_AFFINITY == 1 && configNUM_CORES > 1 )
|
||||
/*
|
||||
If we are using multiple cores and core affinity, we need to create the task then set the core affinity of that
|
||||
task. We do this with interrupts disabled to prevent the task from being scehduled immediately after
|
||||
xTaskCreate().
|
||||
*/
|
||||
portDISABLE_INTERRUPTS();
|
||||
xTaskHandleTemp = xTaskCreateStatic(pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, puxStackBuffer, pxTaskBuffer);
|
||||
if (xTaskHandleTemp != NULL) {
|
||||
UBaseType_t uxCoreAffinityMask;
|
||||
if (xCoreID == tskNO_AFFINITY) {
|
||||
uxCoreAffinityMask = tskNO_AFFINITY;
|
||||
} else {
|
||||
uxCoreAffinityMask = (1 << xCoreID);
|
||||
BaseType_t ret;
|
||||
#if ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUM_CORES > 1 ) )
|
||||
{
|
||||
// Convert xCoreID into an affinity mask
|
||||
UBaseType_t uxCoreAffinityMask;
|
||||
if (xCoreID == tskNO_AFFINITY) {
|
||||
uxCoreAffinityMask = tskNO_AFFINITY;
|
||||
} else {
|
||||
uxCoreAffinityMask = (1 << xCoreID);
|
||||
}
|
||||
ret = xTaskCreateStaticAffinitySet(pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, puxStackBuffer, pxTaskBuffer, uxCoreAffinityMask);
|
||||
}
|
||||
vTaskCoreAffinitySet(xTaskHandleTemp, uxCoreAffinityMask);
|
||||
}
|
||||
portENABLE_INTERRUPTS();
|
||||
#else /* if ( configUSE_CORE_AFFINITY == 1 && configNUM_CORES > 1 ) */
|
||||
xTaskHandleTemp = xTaskCreateStatic(pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, puxStackBuffer, pxTaskBuffer);
|
||||
#endif /* if ( configUSE_CORE_AFFINITY == 1 && configNUM_CORES > 1 ) */
|
||||
return xTaskHandleTemp;
|
||||
#else /* ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUM_CORES > 1 ) ) */
|
||||
{
|
||||
ret = xTaskCreateStatic(pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, puxStackBuffer, pxTaskBuffer);
|
||||
}
|
||||
#endif /* ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUM_CORES > 1 ) ) */
|
||||
return ret;
|
||||
}
|
||||
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user