]> git.sur5r.net Git - freertos/commitdiff
Allow tasks to be suspended immediately after creation - provided the scheduler is...
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 23 Sep 2010 13:54:37 +0000 (13:54 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 23 Sep 2010 13:54:37 +0000 (13:54 +0000)
Add API function that allows the tick count to be queried from an interrupt.

git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1133 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

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

index d001a0cca856de69b32b2302be58752a03664da1..6b882682fa77b921265cee6487994d65e8f4f98f 100644 (file)
@@ -33,9 +33,9 @@
     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT\r
     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
-    more details. You should have received a copy of the GNU General Public \r
-    License and the FreeRTOS license exception along with FreeRTOS; if not it \r
-    can be viewed here: http://www.freertos.org/a00114.html and also obtained \r
+    more details. You should have received a copy of the GNU General Public\r
+    License and the FreeRTOS license exception along with FreeRTOS; if not it\r
+    can be viewed here: http://www.freertos.org/a00114.html and also obtained\r
     by writing to Richard Barry, contact details for whom are available on the\r
     FreeRTOS WEB site.\r
 \r
@@ -206,10 +206,10 @@ typedef struct xTASK_PARAMTERS
                                                  );</pre>\r
  *\r
  * Create a new task and add it to the list of tasks that are ready to run.\r
- * \r
+ *\r
  * xTaskCreate() can only be used to create a task that has unrestricted\r
  * access to the entire microcontroller memory map.  Systems that include MPU\r
- * support can alternatively create an MPU constrained task using \r
+ * support can alternatively create an MPU constrained task using\r
  * xTaskCreateRestricted().\r
  *\r
  * @param pvTaskCode Pointer to the task entry function.  Tasks\r
@@ -285,7 +285,7 @@ typedef struct xTASK_PARAMTERS
  *\r
  * @param pxTaskDefinition Pointer to a structure that contains a member\r
  * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API\r
- * documentation) plus an optional stack buffer and the memory region \r
+ * documentation) plus an optional stack buffer and the memory region\r
  * definitions.\r
  *\r
  * @param pxCreatedTask Used to pass back a handle by which the created task\r
@@ -348,7 +348,7 @@ xTaskHandle xHandle;
  * Memory regions are assigned to a restricted task when the task is created by\r
  * a call to xTaskCreateRestricted().  These regions can be redefined using\r
  * vTaskAllocateMPURegions().\r
- * \r
+ *\r
  * @param xTask The handle of the task being updated.\r
  *\r
  * @param xRegions A pointer to an xMemoryRegion structure that contains the\r
@@ -371,7 +371,7 @@ static const xMemoryRegion xAltRegions[ portNUM_CONFIGURABLE_REGIONS ] =
 void vATask( void *pvParameters )\r
 {\r
        // This task was created such that it has access to certain regions of\r
-       // memory as defined by the MPU configuration.  At some point it is \r
+       // memory as defined by the MPU configuration.  At some point it is\r
        // desired that these MPU regions are replaced with that defined in the\r
        // xAltRegions const struct above.  Use a call to vTaskAllocateMPURegions()\r
        // for this purpose.  NULL is used as the task handle to indicate that this\r
@@ -963,7 +963,7 @@ signed portBASE_TYPE xTaskIsTaskSuspended( xTaskHandle xTask ) PRIVILEGED_FUNCTI
 \r
 /**\r
  * task. h\r
- * <PRE>volatile portTickType xTaskGetTickCount( void );</PRE>\r
+ * <PRE>portTickType xTaskGetTickCount( void );</PRE>\r
  *\r
  * @return The count of ticks since vTaskStartScheduler was called.\r
  *\r
@@ -972,6 +972,22 @@ signed portBASE_TYPE xTaskIsTaskSuspended( xTaskHandle xTask ) PRIVILEGED_FUNCTI
  */\r
 portTickType xTaskGetTickCount( void ) PRIVILEGED_FUNCTION;\r
 \r
+/**\r
+ * task. h\r
+ * <PRE>portTickType xTaskGetTickCountFromISR( void );</PRE>\r
+ *\r
+ * @return The count of ticks since vTaskStartScheduler was called.\r
+ *\r
+ * This is a version of xTaskGetTickCount() that is safe to be called from an\r
+ * ISR - provided that portTickType is the natural word size of the\r
+ * microcontroller being used or interrupt nesting is either not supported or\r
+ * not being used.\r
+ *\r
+ * \page xTaskGetTickCount xTaskGetTickCount\r
+ * \ingroup TaskUtils\r
+ */\r
+portTickType xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION;\r
+\r
 /**\r
  * task. h\r
  * <PRE>unsigned short uxTaskGetNumberOfTasks( void );</PRE>\r
index 91e85672430b3834e5772f5bc70eae607ee95778..12022b6821233d855460887eac3893be6aa982b6 100644 (file)
@@ -33,9 +33,9 @@
     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT\r
     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
-    more details. You should have received a copy of the GNU General Public \r
-    License and the FreeRTOS license exception along with FreeRTOS; if not it \r
-    can be viewed here: http://www.freertos.org/a00114.html and also obtained \r
+    more details. You should have received a copy of the GNU General Public\r
+    License and the FreeRTOS license exception along with FreeRTOS; if not it\r
+    can be viewed here: http://www.freertos.org/a00114.html and also obtained\r
     by writing to Richard Barry, contact details for whom are available on the\r
     FreeRTOS WEB site.\r
 \r
@@ -894,7 +894,7 @@ tskTCB * pxNewTCB;
                portEXIT_CRITICAL();\r
 \r
                /* We may have just suspended the current task. */\r
-               if( ( void * ) pxTaskToSuspend == NULL )\r
+               if( ( ( void * ) pxTaskToSuspend == NULL ) && ( xSchedulerRunning != pdFALSE ) )\r
                {\r
                        portYIELD_WITHIN_API();\r
                }\r
@@ -1175,6 +1175,12 @@ portTickType xTicks;
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+portTickType xTaskGetTickCountFromISR( void )\r
+{\r
+       return xTickCount;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
 unsigned portBASE_TYPE uxTaskGetNumberOfTasks( void )\r
 {\r
        /* A critical section is not required because the variables are of type\r