]> git.sur5r.net Git - freertos/blobdiff - Source/tasks.c
Change "SWI" to "SWI 0".
[freertos] / Source / tasks.c
index 9bc5d46530ee5df64bbb79b445d85726924cc561..6a78a5c0e2abcf4101796897729999e499e36210 100644 (file)
@@ -1,41 +1,46 @@
 /*\r
-    FreeRTOS V6.0.0 - Copyright (C) 2009 Real Time Engineers Ltd.\r
+    FreeRTOS V6.0.1 - Copyright (C) 2009 Real Time Engineers Ltd.\r
+\r
+    ***************************************************************************\r
+    *                                                                         *\r
+    * If you are:                                                             *\r
+    *                                                                         *\r
+    *    + New to FreeRTOS,                                                   *\r
+    *    + Wanting to learn FreeRTOS or multitasking in general quickly       *\r
+    *    + Looking for basic training,                                        *\r
+    *    + Wanting to improve your FreeRTOS skills and productivity           *\r
+    *                                                                         *\r
+    * then take a look at the FreeRTOS eBook                                  *\r
+    *                                                                         *\r
+    *        "Using the FreeRTOS Real Time Kernel - a Practical Guide"        *\r
+    *                  http://www.FreeRTOS.org/Documentation                  *\r
+    *                                                                         *\r
+    * A pdf reference manual is also available.  Both are usually delivered   *\r
+    * to your inbox within 20 minutes to two hours when purchased between 8am *\r
+    * and 8pm GMT (although please allow up to 24 hours in case of            *\r
+    * exceptional circumstances).  Thank you for your support!                *\r
+    *                                                                         *\r
+    ***************************************************************************\r
 \r
     This file is part of the FreeRTOS distribution.\r
 \r
-    FreeRTOS is free software; you can redistribute it and/or modify it    under\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
     the terms of the GNU General Public License (version 2) as published by the\r
-    Free Software Foundation and modified by the FreeRTOS exception.\r
-    **NOTE** The exception to the GPL is included to allow you to distribute a\r
-    combined work that includes FreeRTOS without being obliged to provide the\r
+    Free Software Foundation AND MODIFIED BY the FreeRTOS exception.\r
+    ***NOTE*** The exception to the GPL is included to allow you to distribute\r
+    combined work that includes FreeRTOS without being obliged to provide the\r
     source code for proprietary components outside of the FreeRTOS kernel.\r
-    Alternative commercial license and support terms are also available upon\r
-    request.  See the licensing section of http://www.FreeRTOS.org for full\r
-    license details.\r
-\r
-    FreeRTOS is distributed in the hope that it will be useful,    but WITHOUT\r
+    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.\r
-\r
-    You should have received a copy of the GNU General Public License along\r
-    with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59\r
-    Temple Place, Suite 330, Boston, MA  02111-1307  USA.\r
-\r
-\r
-    ***************************************************************************\r
-    *                                                                         *\r
-    * The FreeRTOS eBook and reference manual are available to purchase for a *\r
-    * small fee. Help yourself get started quickly while also helping the     *\r
-    * FreeRTOS project! See http://www.FreeRTOS.org/Documentation for details *\r
-    *                                                                         *\r
-    ***************************************************************************\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
     1 tab == 4 spaces!\r
 \r
-    Please ensure to read the configuration and relevant port sections of the\r
-    online documentation.\r
-\r
     http://www.FreeRTOS.org - Documentation, latest information, license and\r
     contact details.\r
 \r
@@ -384,7 +389,6 @@ signed portBASE_TYPE xTaskGenericCreate( pdTASK_CODE pxTaskCode, const signed ch
 {\r
 signed portBASE_TYPE xReturn;\r
 tskTCB * pxNewTCB;\r
-portBASE_TYPE xRunPrivileged;\r
 \r
        /* Allocate the memory required by the TCB and stack for the new task,\r
        checking that the allocation was successful. */\r
@@ -394,16 +398,19 @@ portBASE_TYPE xRunPrivileged;
        {\r
                portSTACK_TYPE *pxTopOfStack;\r
 \r
-               /* Should the task be created in privileged mode? */\r
-               if( ( uxPriority & portPRIVILEGE_BIT ) != 0x00 )\r
-               {\r
-                       xRunPrivileged = pdTRUE;\r
-               }\r
-               else\r
-               {\r
-                       xRunPrivileged = pdFALSE;\r
-               }\r
-               uxPriority &= ~portPRIVILEGE_BIT;\r
+               #if( portUSING_MPU_WRAPPERS == 1 )\r
+                       /* Should the task be created in privileged mode? */\r
+                       portBASE_TYPE xRunPrivileged;\r
+                       if( ( uxPriority & portPRIVILEGE_BIT ) != 0x00 )\r
+                       {\r
+                               xRunPrivileged = pdTRUE;\r
+                       }\r
+                       else\r
+                       {\r
+                               xRunPrivileged = pdFALSE;\r
+                       }\r
+                       uxPriority &= ~portPRIVILEGE_BIT;\r
+               #endif /* portUSING_MPU_WRAPPERS == 1 */\r
 \r
                /* Calculate the top of stack address.  This depends on whether the\r
                stack grows from high memory to low (as per the 80x86) or visa versa.\r
@@ -439,7 +446,6 @@ portBASE_TYPE xRunPrivileged;
                #else\r
                {\r
                        pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters );\r
-                       ( void ) xRunPrivileged;\r
                }\r
                #endif\r
 \r
@@ -1738,7 +1744,7 @@ portBASE_TYPE xReturn;
                        passed since vTaskSetTimeout() was called. */\r
                        xReturn = pdTRUE;\r
                }\r
-               else if( ( ( portTickType ) xTickCount - ( portTickType ) pxTimeOut->xTimeOnEntering ) < ( portTickType ) *pxTicksToWait )\r
+               else if( ( ( portTickType ) ( ( portTickType ) xTickCount - ( portTickType ) pxTimeOut->xTimeOnEntering ) ) < ( portTickType ) *pxTicksToWait )\r
                {\r
                        /* Not a genuine timeout. Adjust parameters for time remaining. */\r
                        *pxTicksToWait -= ( ( portTickType ) xTickCount - ( portTickType ) pxTimeOut->xTimeOnEntering );\r
@@ -2034,7 +2040,16 @@ tskTCB *pxNewTCB;
                do\r
                {\r
                        listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList );\r
-                       usStackRemaining = usTaskCheckFreeStackSpace( ( unsigned char * ) pxNextTCB->pxStack );\r
+                       #if ( portSTACK_GROWTH > 0 )\r
+                       {\r
+                               usStackRemaining = usTaskCheckFreeStackSpace( ( unsigned char * ) pxNextTCB->pxEndOfStack );\r
+                       }\r
+                       #else\r
+                       {\r
+                               usStackRemaining = usTaskCheckFreeStackSpace( ( unsigned char * ) pxNextTCB->pxStack );\r
+                       }\r
+                       #endif                  \r
+                       \r
                        sprintf( pcStatusString, ( char * ) "%s\t\t%c\t%u\t%u\t%u\r\n", pxNextTCB->pcTaskName, cStatus, ( unsigned int ) pxNextTCB->uxPriority, usStackRemaining, ( unsigned int ) pxNextTCB->uxTCBNumber );\r
                        strcat( ( char * ) pcWriteBuffer, ( char * ) pcStatusString );\r
 \r