]> git.sur5r.net Git - freertos/commitdiff
Add in the pcTaskGetTaskName(), xTaskGetIdleTaskHandle() and xTimerGetTimerTaskHandle...
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 27 Jul 2011 14:02:37 +0000 (14:02 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 27 Jul 2011 14:02:37 +0000 (14:02 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1512 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Source/include/FreeRTOS.h
Source/include/task.h
Source/include/timers.h
Source/tasks.c
Source/timers.c

index e5eb39abb4dcf9255946b75a0a0e8b2c2759868b..5fdbb36777c6813f250835199f29256b6468a8d3 100644 (file)
@@ -138,6 +138,14 @@ typedef portBASE_TYPE (*pdTASK_HOOK_CODE)( void * );
        #error Missing definition:  configUSE_16_BIT_TICKS should be defined in FreeRTOSConfig.h as either 1 or 0.  See the Configuration section of the FreeRTOS API documentation for details.\r
 #endif\r
 \r
+#ifndef INCLUDE_xTaskGetIdleTaskHandle\r
+       #define INCLUDE_xTaskGetIdleTaskHandle 0\r
+#endif\r
+\r
+#ifndef INCLUDE_xTimerGetTimerTaskHandle\r
+       #define INCLUDE_xTimerGetTimerTaskHandle 0\r
+#endif\r
+\r
 #ifndef configUSE_APPLICATION_TASK_TAG\r
        #define configUSE_APPLICATION_TASK_TAG 0\r
 #endif\r
index 3c44904dc3ecbe036989a918752a6d3fc0dad564..0032a51c83bb305c4f643ec6933cf07c772fabf9 100644 (file)
@@ -1005,6 +1005,19 @@ portTickType xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION;
  */\r
 unsigned portBASE_TYPE uxTaskGetNumberOfTasks( void ) PRIVILEGED_FUNCTION;\r
 \r
+/**\r
+ * task. h\r
+ * <PRE>signed char *pcTaskGetTaskName( xTaskHandle xTaskToQuery );</PRE>\r
+ *\r
+ * @return The text (human readable) name of the task referenced by the handle\r
+ * xTaskToQueury.  A task can query its own name by either passing in its own\r
+ * handle, or by setting xTaskToQuery to NULL.\r
+ *\r
+ * \page pcTaskGetTaskName pcTaskGetTaskName\r
+ * \ingroup TaskUtils\r
+ */\r
+signed char *pcTaskGetTaskName( xTaskHandle xTaskToQuery );\r
+\r
 /**\r
  * task. h\r
  * <PRE>void vTaskList( char *pcWriteBuffer );</PRE>\r
@@ -1157,6 +1170,14 @@ constant. */
  */\r
 portBASE_TYPE xTaskCallApplicationTaskHook( xTaskHandle xTask, void *pvParameter ) PRIVILEGED_FUNCTION;\r
 \r
+/**\r
+ * xTaskGetIdleTaskHandle() is only available if \r
+ * INCLUDE_xTaskGetIdleTaskHandle is set to 1 in FreeRTOSConfig.h.\r
+ *\r
+ * Simply returns the handle of the idle task.  It is not valid to call\r
+ * xTaskGetIdleTaskHandle() before the scheduler has been started.\r
+ */\r
+xTaskHandle xTaskGetIdleTaskHandle( void );\r
 \r
 /*-----------------------------------------------------------\r
  * SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES\r
index 3faef90d8c7a428f2a18037b48dbc551da5161d9..578f05b432cc90911e06389998344c744d2c6f13 100644 (file)
@@ -283,6 +283,15 @@ void *pvTimerGetTimerID( xTimerHandle xTimer ) PRIVILEGED_FUNCTION;
  */\r
 portBASE_TYPE xTimerIsTimerActive( xTimerHandle xTimer ) PRIVILEGED_FUNCTION;\r
 \r
+/**\r
+ * xTimerGetTimerTaskHandle() is only available if \r
+ * INCLUDE_xTimerGetTimerTaskHandle is set to 1 in FreeRTOSConfig.h.\r
+ *\r
+ * Simply returns the handle of the timer service/daemon task.  It it not valid\r
+ * to call xTimerGetTimerTaskHandle() before the scheduler has been started.\r
+ */\r
+xTaskHandle xTimerGetTimerTaskHandle( void );\r
+\r
 /**\r
  * portBASE_TYPE xTimerStart( xTimerHandle xTimer, portTickType xBlockTime );\r
  *\r
index 020443d31e45790d7e0f9fe1f2921140ad39ae44..16914978cb84b29ce511f37efcae967a26d7e8b9 100644 (file)
@@ -157,6 +157,12 @@ PRIVILEGED_DATA static xList xPendingReadyList;                                                    /*< Tasks that have been r
 \r
 #endif\r
 \r
+#if ( INCLUDE_xTaskGetIdleTaskHandle == 1 )\r
+       \r
+       PRIVILEGED_DATA static xTaskHandle xIdleTaskHandle = NULL;\r
+       \r
+#endif\r
+\r
 /* File private variables. --------------------------------*/\r
 PRIVILEGED_DATA static volatile unsigned portBASE_TYPE uxCurrentNumberOfTasks  = ( unsigned portBASE_TYPE ) 0;\r
 PRIVILEGED_DATA static volatile portTickType xTickCount                                                = ( portTickType ) 0;\r
@@ -1090,7 +1096,18 @@ void vTaskStartScheduler( void )
 portBASE_TYPE xReturn;\r
 \r
        /* Add the idle task at the lowest priority. */\r
-       xReturn = xTaskCreate( prvIdleTask, ( signed char * ) "IDLE", tskIDLE_STACK_SIZE, ( void * ) NULL, ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), ( xTaskHandle * ) NULL );\r
+       #if ( INCLUDE_xTaskGetIdleTaskHandle == 1 )\r
+       {\r
+               /* Create the idle task, storing its handle in xIdleTaskHandle so it can\r
+               be returned by the xTaskGetIdleTaskHandle() function. */\r
+               xReturn = xTaskCreate( prvIdleTask, ( signed char * ) "IDLE", tskIDLE_STACK_SIZE, ( void * ) NULL, ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), &xIdleTaskHandle );\r
+       }\r
+       #else\r
+       {\r
+               /* Create the idle task without storing its handle. */\r
+               xReturn = xTaskCreate( prvIdleTask, ( signed char * ) "IDLE", tskIDLE_STACK_SIZE, ( void * ) NULL, ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), NULL );\r
+       }\r
+       #endif\r
 \r
        #if ( configUSE_TIMERS == 1 )\r
        {\r
@@ -1281,6 +1298,17 @@ unsigned portBASE_TYPE uxTaskGetNumberOfTasks( void )
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+signed char *pcTaskGetTaskName( xTaskHandle xTaskToQuery )\r
+{\r
+tskTCB *pxTCB;\r
+\r
+       /* If null is passed in here then the name of the calling task is being queried. */\r
+       pxTCB = prvGetTCBFromHandle( xTaskToQuery );\r
+       configASSERT( pxTCB );\r
+       return &( pxTCB->pcTaskName[ 0 ] );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
 #if ( configUSE_TRACE_FACILITY == 1 )\r
 \r
        void vTaskList( signed char *pcWriteBuffer )\r
@@ -1455,8 +1483,19 @@ unsigned portBASE_TYPE uxTaskGetNumberOfTasks( void )
        }\r
 \r
 #endif\r
+/*----------------------------------------------------------*/\r
 \r
+#if ( INCLUDE_xTaskGetIdleTaskHandle == 1 )\r
 \r
+       xTaskHandle xTaskGetIdleTaskHandle( void )\r
+       {\r
+               /* If xTaskGetIdleTaskHandle() is called before the scheduler has been\r
+               started, then xIdleTaskHandle will be NULL. */\r
+               configASSERT( ( xIdleTaskHandle != NULL ) );\r
+               return xIdleTaskHandle;\r
+       }\r
+       \r
+#endif\r
 \r
 /*-----------------------------------------------------------\r
  * SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES\r
index 7e5ef22addaf00433a7a10800cca496cdca84111..2d3f3bad89e46be73d5fe9fb1298caaf6a3d7137 100644 (file)
@@ -110,6 +110,12 @@ PRIVILEGED_DATA static xList *pxOverflowTimerList;
 /* A queue that is used to send commands to the timer service task. */\r
 PRIVILEGED_DATA static xQueueHandle xTimerQueue = NULL;\r
 \r
+#if ( INCLUDE_xTimerGetTimerTaskHandle == 1 )\r
+       \r
+       PRIVILEGED_DATA static xTaskHandle xTimerTaskHandle = NULL;\r
+       \r
+#endif\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /*\r
@@ -183,7 +189,18 @@ portBASE_TYPE xReturn = pdFAIL;
 \r
        if( xTimerQueue != NULL )\r
        {\r
-               xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY, NULL);\r
+               #if ( INCLUDE_xTimerGetTimerTaskHandle == 1 )\r
+               {\r
+                       /* Create the timer task, storing its handle in xTimerTaskHandle so\r
+                       it can be returned by the xTimerGetTimerTaskHandle() function. */\r
+                       xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY, &xTimerTaskHandle );       \r
+               }\r
+               #else\r
+               {\r
+                       /* Create the timer task without storing its handle. */\r
+                       xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY, NULL);\r
+               }\r
+               #endif\r
        }\r
 \r
        configASSERT( xReturn );\r
@@ -267,6 +284,19 @@ xTIMER_MESSAGE xMessage;
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+#if ( INCLUDE_xTimerGetTimerTaskHandle == 1 )\r
+\r
+       xTaskHandle xTimerGetTimerTaskHandle( void )\r
+       {\r
+               /* If xTimerGetTimerTaskHandle() is called before the scheduler has been\r
+               started, then xTimerTaskHandle will be NULL. */\r
+               configASSERT( ( xTimerTaskHandle != NULL ) );\r
+               return xTimerTaskHandle;\r
+       }\r
+       \r
+#endif\r
+/*-----------------------------------------------------------*/\r
+\r
 static void prvProcessExpiredTimer( portTickType xNextExpireTime, portTickType xTimeNow )\r
 {\r
 xTIMER *pxTimer;\r