+#if ( INCLUDE_xTaskGetTaskHandle == 1 )\r
+\r
+ static TCB_t *prvSearchForNameWithinSingleList( List_t *pxList, const char pcNameToQuery[] )\r
+ {\r
+ TCB_t *pxNextTCB, *pxFirstTCB, *pxReturn = NULL;\r
+ UBaseType_t x;\r
+ char cNextChar;\r
+\r
+ /* This function is called with the scheduler suspended. */\r
+\r
+ if( listCURRENT_LIST_LENGTH( pxList ) > ( UBaseType_t ) 0 )\r
+ {\r
+ listGET_OWNER_OF_NEXT_ENTRY( pxFirstTCB, pxList );\r
+\r
+ do\r
+ {\r
+ listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList );\r
+\r
+ /* Check each character in the name looking for a match or\r
+ mismatch. */\r
+ for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )\r
+ {\r
+ cNextChar = pxNextTCB->pcTaskName[ x ];\r
+\r
+ if( cNextChar != pcNameToQuery[ x ] )\r
+ {\r
+ /* Characters didn't match. */\r
+ break;\r
+ }\r
+ else if( cNextChar == 0x00 )\r
+ {\r
+ /* Both strings terminated, a match must have been\r
+ found. */\r
+ pxReturn = pxNextTCB;\r
+ break;\r
+ }\r
+ else\r
+ {\r
+ mtCOVERAGE_TEST_MARKER();\r
+ }\r
+ }\r
+\r
+ if( pxReturn != NULL )\r
+ {\r
+ /* The handle has been found. */\r
+ break;\r
+ }\r
+\r
+ } while( pxNextTCB != pxFirstTCB );\r
+ }\r
+ else\r
+ {\r
+ mtCOVERAGE_TEST_MARKER();\r
+ }\r
+\r
+ return pxReturn;\r
+ }\r
+\r
+#endif /* INCLUDE_xTaskGetTaskHandle */\r
+/*-----------------------------------------------------------*/\r
+\r
+#if ( INCLUDE_xTaskGetTaskHandle == 1 )\r
+\r
+ TaskHandle_t xTaskGetTaskHandle( const char *pcNameToQuery ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */\r
+ {\r
+ UBaseType_t uxQueue = configMAX_PRIORITIES;\r
+ TCB_t* pxTCB;\r
+\r
+ vTaskSuspendAll();\r
+ {\r
+ /* Search the ready lists. */\r
+ do\r
+ {\r
+ uxQueue--;\r
+ pxTCB = prvSearchForNameWithinSingleList( ( List_t * ) &( pxReadyTasksLists[ uxQueue ] ), pcNameToQuery );\r
+\r
+ if( pxTCB != NULL )\r
+ {\r
+ /* Found the handle. */\r
+ break;\r
+ }\r
+\r
+ } while( uxQueue > ( UBaseType_t ) tskIDLE_PRIORITY ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */\r
+\r
+ /* Search the delayed lists. */\r
+ if( pxTCB == NULL )\r
+ {\r
+ pxTCB = prvSearchForNameWithinSingleList( ( List_t * ) pxDelayedTaskList, pcNameToQuery );\r
+ }\r
+\r
+ if( pxTCB == NULL )\r
+ {\r
+ pxTCB = prvSearchForNameWithinSingleList( ( List_t * ) pxOverflowDelayedTaskList, pcNameToQuery );\r
+ }\r
+\r
+ #if ( INCLUDE_vTaskSuspend == 1 )\r
+ {\r
+ if( pxTCB == NULL )\r
+ {\r
+ /* Search the suspended list. */\r
+ pxTCB = prvSearchForNameWithinSingleList( &xSuspendedTaskList, pcNameToQuery );\r
+ }\r
+ }\r
+ #endif\r
+\r
+ #if( INCLUDE_vTaskDelete == 1 )\r
+ {\r
+ if( pxTCB == NULL )\r
+ {\r
+ /* Search the deleted list. */\r
+ pxTCB = prvSearchForNameWithinSingleList( &xTasksWaitingTermination, pcNameToQuery );\r
+ }\r
+ }\r
+ #endif\r
+ }\r
+ ( void ) xTaskResumeAll();\r
+\r
+ return ( TaskHandle_t ) pxTCB;\r
+ }\r
+\r
+#endif /* INCLUDE_xTaskGetTaskHandle */\r
+/*-----------------------------------------------------------*/\r
+\r