mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-30 19:19:21 +00:00
refactor(freertos/idf): Move vTaskSetThreadLocalStoragePointerAndDelCallback()
This commit moves vTaskSetThreadLocalStoragePointerAndDelCallback() from `tasks.c`/`task.h` to `freertos_tasks_c_additions.h`/`idf_additions.h`.
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
|
||||
/* ------------------------------------------------- Static Asserts ------------------------------------------------- */
|
||||
|
||||
/**
|
||||
/*
|
||||
* Both StaticTask_t and TCB_t structures are provided by FreeRTOS sources.
|
||||
* This is just an additional check of the consistency of these structures.
|
||||
*/
|
||||
@@ -555,26 +555,61 @@ uint8_t * pxTaskGetStackStart( TaskHandle_t xTask )
|
||||
|
||||
/* --------------------------------------------- TLSP Deletion Callbacks -------------------------------------------- */
|
||||
|
||||
#if ( CONFIG_FREERTOS_SMP && CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS )
|
||||
#if CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS
|
||||
|
||||
void vTaskSetThreadLocalStoragePointerAndDelCallback( TaskHandle_t xTaskToSet,
|
||||
BaseType_t xIndex,
|
||||
void * pvValue,
|
||||
TlsDeleteCallbackFunction_t pvDelCallback )
|
||||
{
|
||||
/* Verify that the offsets of pvThreadLocalStoragePointers and pvDummy15 match. */
|
||||
/* pvDummy15 is part of the StaticTask_t struct and is used to access the TLSPs */
|
||||
/* while deletion. */
|
||||
_Static_assert( offsetof( StaticTask_t, pvDummy15 ) == offsetof( TCB_t, pvThreadLocalStoragePointers ), "Offset of pvDummy15 must match the offset of pvThreadLocalStoragePointers" );
|
||||
/* If TLSP deletion callbacks are enabled, then configNUM_THREAD_LOCAL_STORAGE_POINTERS
|
||||
* is doubled in size so that the latter half of the pvThreadLocalStoragePointers
|
||||
* stores the deletion callbacks. */
|
||||
if( xIndex < ( configNUM_THREAD_LOCAL_STORAGE_POINTERS / 2 ) )
|
||||
{
|
||||
TCB_t * pxTCB;
|
||||
|
||||
/*Set the local storage pointer first */
|
||||
vTaskSetThreadLocalStoragePointer( xTaskToSet, xIndex, pvValue );
|
||||
#if ( configNUM_CORES > 1 )
|
||||
{
|
||||
/* For SMP, we need a critical section as another core could also
|
||||
* update this task's TLSP at the same time. */
|
||||
#if CONFIG_FREERTOS_SMP
|
||||
{
|
||||
taskENTER_CRITICAL();
|
||||
}
|
||||
#else /* CONFIG_FREERTOS_SMP */
|
||||
{
|
||||
taskENTER_CRITICAL( &xKernelLock );
|
||||
}
|
||||
#endif /* CONFIG_FREERTOS_SMP */
|
||||
}
|
||||
#endif /* configNUM_CORES > 1 */
|
||||
|
||||
/*Set the deletion callback at an offset of configNUM_THREAD_LOCAL_STORAGE_POINTERS/2 */
|
||||
vTaskSetThreadLocalStoragePointer( xTaskToSet, ( xIndex + ( configNUM_THREAD_LOCAL_STORAGE_POINTERS / 2 ) ), pvDelCallback );
|
||||
pxTCB = prvGetTCBFromHandle( xTaskToSet );
|
||||
/* Store the TLSP by indexing the first half of the array */
|
||||
pxTCB->pvThreadLocalStoragePointers[ xIndex ] = pvValue;
|
||||
|
||||
/* Store the TLSP deletion callback by indexing the second half
|
||||
* of the array. */
|
||||
pxTCB->pvThreadLocalStoragePointers[ ( xIndex + ( configNUM_THREAD_LOCAL_STORAGE_POINTERS / 2 ) ) ] = ( void * ) pvDelCallback;
|
||||
|
||||
#if ( configNUM_CORES > 1 )
|
||||
{
|
||||
#if CONFIG_FREERTOS_SMP
|
||||
{
|
||||
taskEXIT_CRITICAL();
|
||||
}
|
||||
#else /* CONFIG_FREERTOS_SMP */
|
||||
{
|
||||
taskEXIT_CRITICAL( &xKernelLock );
|
||||
}
|
||||
#endif /* CONFIG_FREERTOS_SMP */
|
||||
}
|
||||
#endif /* configNUM_CORES > 1 */
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* CONFIG_FREERTOS_SMP && CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS */
|
||||
#endif /* CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS */
|
||||
/*----------------------------------------------------------*/
|
||||
|
||||
/* ----------------------------------------------------- Newlib ----------------------------------------------------- */
|
||||
|
@@ -166,25 +166,18 @@ BaseType_t xTaskGetAffinity( TaskHandle_t xTask );
|
||||
*/
|
||||
uint8_t * pxTaskGetStackStart( TaskHandle_t xTask );
|
||||
|
||||
/* --------------------------------------------- TLSP Deletion Callbacks -----------------------------------------------
|
||||
* TLSP Deletion Callback API Additions
|
||||
*
|
||||
* Todo: Move IDF FreeRTOS TLSP Deletion Callback related additions to this header as well (see IDF-7201)
|
||||
* Todo: Add these SMP related additions to docs once they are combined with IDF FreeRTOS.
|
||||
* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* --------------------------------------------- TLSP Deletion Callbacks -------------------------------------------- */
|
||||
|
||||
#if ( CONFIG_FREERTOS_SMP && CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS )
|
||||
#if CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS
|
||||
|
||||
/**
|
||||
* Prototype of local storage pointer deletion callback.
|
||||
*/
|
||||
typedef void (* TlsDeleteCallbackFunction_t)( int,
|
||||
void * );
|
||||
#endif /* CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS */
|
||||
|
||||
#endif /* ( CONFIG_FREERTOS_SMP && CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS ) */
|
||||
|
||||
|
||||
#if ( CONFIG_FREERTOS_SMP && CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS )
|
||||
#if CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS
|
||||
|
||||
/**
|
||||
* Set local storage pointer and deletion callback.
|
||||
@@ -213,7 +206,7 @@ uint8_t * pxTaskGetStackStart( TaskHandle_t xTask );
|
||||
void * pvValue,
|
||||
TlsDeleteCallbackFunction_t pvDelCallback );
|
||||
|
||||
#endif /* ( CONFIG_FREERTOS_SMP && CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS ) */
|
||||
#endif /* CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS */
|
||||
|
||||
/* -------------------------------------------- Creation With Memory Caps ----------------------------------------------
|
||||
* Helper functions to create various FreeRTOS objects (e.g., queues, semaphores) with specific memory capabilities
|
||||
|
Reference in New Issue
Block a user