#endif\r
/*-----------------------------------------------------------*/\r
\r
+#if ( INCLUDE_eTaskStateGet == 1 )\r
+ \r
+ eTaskState eTaskStateGet( xTaskHandle pxTask )\r
+ {\r
+ eTaskState eReturn;\r
+ xList *pxStateList;\r
+ tskTCB *pxTCB;\r
+\r
+ pxTCB = ( tskTCB * ) pxTask;\r
+\r
+ if( pxTCB == pxCurrentTCB )\r
+ {\r
+ /* The task calling this function is querying its own state. */\r
+ eReturn = eRunning;\r
+ }\r
+ else\r
+ {\r
+ taskENTER_CRITICAL();\r
+ {\r
+ pxStateList = ( xList * ) listLIST_ITEM_CONTAINED( &( pxTCB->xGenericListItem ) );\r
+ }\r
+ taskEXIT_CRITICAL();\r
+\r
+ if( ( pxStateList == pxDelayedTaskList ) || ( pxStateList == pxOverflowDelayedTaskList ) )\r
+ {\r
+ /* The task being queried is referenced from one of the Blocked \r
+ lists. */\r
+ eReturn = eBlocked;\r
+ }\r
+\r
+ #if ( INCLUDE_vTaskSuspend == 1 )\r
+ else if( pxStateList == &xSuspendedTaskList )\r
+ {\r
+ /* The task being queried is referenced from the suspended \r
+ list. */\r
+ eReturn = eSuspended;\r
+ }\r
+ #endif\r
+\r
+ #if ( INCLUDE_vTaskDelete == 1 )\r
+ else if( pxStateList == &xTasksWaitingTermination )\r
+ {\r
+ /* The task being queried is referenced from the deleted \r
+ tasks list. */\r
+ eReturn = eDeleted;\r
+ }\r
+ #endif\r
+\r
+ else\r
+ {\r
+ /* If the task is not in any other state, it must be in the\r
+ Ready (including pending ready) state. */\r
+ eReturn = eReady;\r
+ }\r
+ }\r
+\r
+ return eReturn;\r
+ }\r
+\r
+#endif\r
+/*-----------------------------------------------------------*/\r
+\r
#if ( INCLUDE_uxTaskPriorityGet == 1 )\r
\r
unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask )\r