mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-20 05:21:59 -04:00
Add xTaskGetApplicationTaskTagFromISR(), which is an interrupt safe version of xTaskGetApplicationTaskTagFrom().
This commit is contained in:
parent
1af80854e6
commit
6fab2b9e0d
Binary file not shown.
|
@ -508,12 +508,22 @@ TaskHandle_t xTask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Try FromISR version too. */
|
||||||
|
if( xTaskGetApplicationTaskTagFromISR( xTask ) != prvDummyTagFunction )
|
||||||
|
{
|
||||||
|
xReturn = pdFAIL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Now try with a NULL handle, so using this task. */
|
/* Now try with a NULL handle, so using this task. */
|
||||||
vTaskSetApplicationTaskTag( NULL, NULL );
|
vTaskSetApplicationTaskTag( NULL, NULL );
|
||||||
if( xTaskGetApplicationTaskTag( NULL ) != NULL )
|
if( xTaskGetApplicationTaskTag( NULL ) != NULL )
|
||||||
{
|
{
|
||||||
xReturn = pdFAIL;
|
xReturn = pdFAIL;
|
||||||
}
|
}
|
||||||
|
if( xTaskGetApplicationTaskTagFromISR( NULL ) != NULL )
|
||||||
|
{
|
||||||
|
xReturn = pdFAIL;
|
||||||
|
}
|
||||||
|
|
||||||
vTaskSetApplicationTaskTag( NULL, prvDummyTagFunction );
|
vTaskSetApplicationTaskTag( NULL, prvDummyTagFunction );
|
||||||
if( xTaskGetApplicationTaskTag( NULL ) != prvDummyTagFunction )
|
if( xTaskGetApplicationTaskTag( NULL ) != prvDummyTagFunction )
|
||||||
|
@ -532,6 +542,12 @@ TaskHandle_t xTask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Try FromISR version too. */
|
||||||
|
if( xTaskGetApplicationTaskTagFromISR( NULL ) != prvDummyTagFunction )
|
||||||
|
{
|
||||||
|
xReturn = pdFAIL;
|
||||||
|
}
|
||||||
|
|
||||||
vTaskSetApplicationTaskTag( NULL, NULL );
|
vTaskSetApplicationTaskTag( NULL, NULL );
|
||||||
if( xTaskGetApplicationTaskTag( NULL ) != NULL )
|
if( xTaskGetApplicationTaskTag( NULL ) != NULL )
|
||||||
{
|
{
|
||||||
|
|
|
@ -64,6 +64,7 @@ UBaseType_t MPU_uxTaskGetStackHighWaterMark( TaskHandle_t xTask );
|
||||||
configSTACK_DEPTH_TYPE MPU_uxTaskGetStackHighWaterMark2( TaskHandle_t xTask );
|
configSTACK_DEPTH_TYPE MPU_uxTaskGetStackHighWaterMark2( TaskHandle_t xTask );
|
||||||
void MPU_vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction );
|
void MPU_vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction );
|
||||||
TaskHookFunction_t MPU_xTaskGetApplicationTaskTag( TaskHandle_t xTask );
|
TaskHookFunction_t MPU_xTaskGetApplicationTaskTag( TaskHandle_t xTask );
|
||||||
|
TaskHookFunction_t MPU_xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask );
|
||||||
void MPU_vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue );
|
void MPU_vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue );
|
||||||
void * MPU_pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex );
|
void * MPU_pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex );
|
||||||
BaseType_t MPU_xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter );
|
BaseType_t MPU_xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter );
|
||||||
|
|
|
@ -70,6 +70,7 @@ only for ports that are using the MPU. */
|
||||||
#define uxTaskGetStackHighWaterMark2 MPU_uxTaskGetStackHighWaterMark2
|
#define uxTaskGetStackHighWaterMark2 MPU_uxTaskGetStackHighWaterMark2
|
||||||
#define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag
|
#define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag
|
||||||
#define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag
|
#define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag
|
||||||
|
#define xTaskGetApplicationTaskTagFromISR MPU_xTaskGetApplicationTaskTagFromISR
|
||||||
#define vTaskSetThreadLocalStoragePointer MPU_vTaskSetThreadLocalStoragePointer
|
#define vTaskSetThreadLocalStoragePointer MPU_vTaskSetThreadLocalStoragePointer
|
||||||
#define pvTaskGetThreadLocalStoragePointer MPU_pvTaskGetThreadLocalStoragePointer
|
#define pvTaskGetThreadLocalStoragePointer MPU_pvTaskGetThreadLocalStoragePointer
|
||||||
#define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook
|
#define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook
|
||||||
|
|
|
@ -1477,9 +1477,20 @@ constant. */
|
||||||
* task.h
|
* task.h
|
||||||
* <pre>void xTaskGetApplicationTaskTag( TaskHandle_t xTask );</pre>
|
* <pre>void xTaskGetApplicationTaskTag( TaskHandle_t xTask );</pre>
|
||||||
*
|
*
|
||||||
* Returns the pxHookFunction value assigned to the task xTask.
|
* Returns the pxHookFunction value assigned to the task xTask. Do not
|
||||||
|
* call from an interrupt service routine - call
|
||||||
|
* xTaskGetApplicationTaskTagFromISR() instead.
|
||||||
*/
|
*/
|
||||||
TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* task.h
|
||||||
|
* <pre>void xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask );</pre>
|
||||||
|
*
|
||||||
|
* Returns the pxHookFunction value assigned to the task xTask. Can
|
||||||
|
* be called from an interrupt service routine.
|
||||||
|
*/
|
||||||
|
TaskHookFunction_t xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
#endif /* configUSE_APPLICATION_TASK_TAG ==1 */
|
#endif /* configUSE_APPLICATION_TASK_TAG ==1 */
|
||||||
#endif /* ifdef configUSE_APPLICATION_TASK_TAG */
|
#endif /* ifdef configUSE_APPLICATION_TASK_TAG */
|
||||||
|
|
||||||
|
|
|
@ -357,6 +357,19 @@ BaseType_t xRunningPrivileged = xPortRaisePrivilege();
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if ( configUSE_APPLICATION_TASK_TAG == 1 )
|
||||||
|
TaskHookFunction_t MPU_xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask )
|
||||||
|
{
|
||||||
|
TaskHookFunction_t xReturn;
|
||||||
|
BaseType_t xRunningPrivileged = xPortRaisePrivilege();
|
||||||
|
|
||||||
|
xReturn = xTaskGetApplicationTaskTagFromISR( xTask );
|
||||||
|
vPortResetPrivilege( xRunningPrivileged );
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS != 0 )
|
#if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS != 0 )
|
||||||
void MPU_vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue )
|
void MPU_vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue )
|
||||||
{
|
{
|
||||||
|
|
|
@ -2845,24 +2845,17 @@ BaseType_t xSwitchRequired = pdFALSE;
|
||||||
|
|
||||||
TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask )
|
TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask )
|
||||||
{
|
{
|
||||||
TCB_t *xTCB;
|
TCB_t *pxTCB;
|
||||||
TaskHookFunction_t xReturn;
|
TaskHookFunction_t xReturn;
|
||||||
|
|
||||||
/* If xTask is NULL then we are setting our own task hook. */
|
/* If xTask is NULL then set the calling task's hook. */
|
||||||
if( xTask == NULL )
|
pxTCB = prvGetTCBFromHandle( xTask );
|
||||||
{
|
|
||||||
xTCB = ( TCB_t * ) pxCurrentTCB;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
xTCB = xTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Save the hook function in the TCB. A critical section is required as
|
/* Save the hook function in the TCB. A critical section is required as
|
||||||
the value can be accessed from an interrupt. */
|
the value can be accessed from an interrupt. */
|
||||||
taskENTER_CRITICAL();
|
taskENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
xReturn = xTCB->pxTaskTag;
|
xReturn = pxTCB->pxTaskTag;
|
||||||
}
|
}
|
||||||
taskEXIT_CRITICAL();
|
taskEXIT_CRITICAL();
|
||||||
|
|
||||||
|
@ -2872,6 +2865,31 @@ BaseType_t xSwitchRequired = pdFALSE;
|
||||||
#endif /* configUSE_APPLICATION_TASK_TAG */
|
#endif /* configUSE_APPLICATION_TASK_TAG */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if ( configUSE_APPLICATION_TASK_TAG == 1 )
|
||||||
|
|
||||||
|
TaskHookFunction_t xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask )
|
||||||
|
{
|
||||||
|
TCB_t *pxTCB;
|
||||||
|
TaskHookFunction_t xReturn;
|
||||||
|
UBaseType_t uxSavedInterruptStatus;
|
||||||
|
|
||||||
|
/* If xTask is NULL then set the calling task's hook. */
|
||||||
|
pxTCB = prvGetTCBFromHandle( xTask );
|
||||||
|
|
||||||
|
/* Save the hook function in the TCB. A critical section is required as
|
||||||
|
the value can be accessed from an interrupt. */
|
||||||
|
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
|
||||||
|
{
|
||||||
|
xReturn = pxTCB->pxTaskTag;
|
||||||
|
}
|
||||||
|
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
|
||||||
|
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* configUSE_APPLICATION_TASK_TAG */
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( configUSE_APPLICATION_TASK_TAG == 1 )
|
#if ( configUSE_APPLICATION_TASK_TAG == 1 )
|
||||||
|
|
||||||
BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter )
|
BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter )
|
||||||
|
|
Loading…
Reference in a new issue