]> git.sur5r.net Git - freertos/blobdiff - Source/include/semphr.h
Remove unnecessary ';' characters from a couple of macro definitions in the IAR MSP43...
[freertos] / Source / include / semphr.h
index 0bd3f3fec451d5d51b1e853c86a347b9e9cd67d0..842ee5dd5d3ba20ff935882f1908f92edadb34fe 100644 (file)
@@ -1,51 +1,60 @@
 /*\r
-       FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
-\r
-       This file is part of the FreeRTOS.org distribution.\r
-\r
-       FreeRTOS.org is free software; you can redistribute it and/or modify\r
-       it under the terms of the GNU General Public License as published by\r
-       the Free Software Foundation; either version 2 of the License, or\r
-       (at your option) any later version.\r
-\r
-       FreeRTOS.org is distributed in the hope that it will be useful,\r
-       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-       GNU General Public License for more details.\r
-\r
-       You should have received a copy of the GNU General Public License\r
-       along with FreeRTOS.org; if not, write to the Free Software\r
-       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
-\r
-       A special exception to the GPL can be applied should you wish to distribute\r
-       a combined work that includes FreeRTOS.org, without being obliged to provide\r
-       the source code for any proprietary components.  See the licensing section \r
-       of http://www.FreeRTOS.org for full details of how and when the exception\r
-       can be applied.\r
-\r
-       ***************************************************************************\r
-       ***************************************************************************\r
-       *                                                                                                                                                 *\r
-       * SAVE TIME AND MONEY!  Why not get us to quote to get FreeRTOS.org               *\r
-       * running on your hardware - or even write all or part of your application*\r
-       * for you?  See http://www.OpenRTOS.com for details.                                      *\r
-       *                                                                                                                                                 *\r
-       ***************************************************************************\r
-       ***************************************************************************\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
-       http://www.SafeRTOS.com - A version that is certified for use in safety \r
-       critical systems.\r
-\r
-       http://www.OpenRTOS.com - Commercial support, development, porting, \r
-       licensing and training services.\r
+    FreeRTOS V6.1.0 - Copyright (C) 2010 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 books - available as PDF or paperback  *\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
+    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\r
+    a combined work that includes FreeRTOS without being obliged to provide the\r
+    source code for proprietary components outside of the FreeRTOS kernel.\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. 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
+    http://www.FreeRTOS.org - Documentation, latest information, license and\r
+    contact details.\r
+\r
+    http://www.SafeRTOS.com - A version that is certified for use in safety\r
+    critical systems.\r
+\r
+    http://www.OpenRTOS.com - Commercial support, development, porting,\r
+    licensing and training services.\r
 */\r
 \r
+#ifndef INC_FREERTOS_H\r
+       #error "#include FreeRTOS.h" must appear in source files before "#include semphr.h"\r
+#endif\r
+\r
 #ifndef SEMAPHORE_H\r
 #define SEMAPHORE_H\r
 \r
@@ -53,8 +62,8 @@
 \r
 typedef xQueueHandle xSemaphoreHandle;\r
 \r
-#define semBINARY_SEMAPHORE_QUEUE_LENGTH       ( ( unsigned portCHAR ) 1 )\r
-#define semSEMAPHORE_QUEUE_ITEM_LENGTH         ( ( unsigned portCHAR ) 0 )\r
+#define semBINARY_SEMAPHORE_QUEUE_LENGTH       ( ( unsigned char ) 1 )\r
+#define semSEMAPHORE_QUEUE_ITEM_LENGTH         ( ( unsigned char ) 0 )\r
 #define semGIVE_BLOCK_TIME                                     ( ( portTickType ) 0 )\r
 \r
 \r
@@ -106,7 +115,7 @@ typedef xQueueHandle xSemaphoreHandle;
 \r
 /**\r
  * semphr. h\r
- * xSemaphoreTake( \r
+ * <pre>xSemaphoreTake( \r
  *                   xSemaphoreHandle xSemaphore, \r
  *                   portTickType xBlockTime \r
  *               )</pre>\r
@@ -445,7 +454,7 @@ typedef xQueueHandle xSemaphoreHandle;
  * <pre>\r
  xSemaphoreGiveFromISR( \r
                           xSemaphoreHandle xSemaphore, \r
-                          portSHORT sTaskPreviouslyWoken \r
+                          signed portBASE_TYPE *pxHigherPriorityTaskWoken\r
                       )</pre>\r
  *\r
  * <i>Macro</i> to  release a semaphore.  The semaphore must have previously been\r
@@ -459,20 +468,18 @@ typedef xQueueHandle xSemaphoreHandle;
  * @param xSemaphore A handle to the semaphore being released.  This is the\r
  * handle returned when the semaphore was created.\r
  *\r
- * @param sTaskPreviouslyWoken This is included so an ISR can make multiple calls\r
- * to xSemaphoreGiveFromISR () from a single interrupt.  The first call\r
- * should always pass in pdFALSE.  Subsequent calls should pass in\r
- * the value returned from the previous call.  See the file serial .c in the\r
- * PC port for a good example of using xSemaphoreGiveFromISR ().\r
+ * @param pxHigherPriorityTaskWoken xSemaphoreGiveFromISR() will set\r
+ * *pxHigherPriorityTaskWoken to pdTRUE if giving the semaphore caused a task\r
+ * to unblock, and the unblocked task has a priority higher than the currently\r
+ * running task.  If xSemaphoreGiveFromISR() sets this value to pdTRUE then\r
+ * a context switch should be requested before the interrupt is exited.\r
  *\r
- * @return pdTRUE if a task was woken by releasing the semaphore.  This is \r
- * used by the ISR to determine if a context switch may be required following\r
- * the ISR.\r
+ * @return pdTRUE if the semaphore was successfully given, otherwise errQUEUE_FULL.\r
  *\r
  * Example usage:\r
  <pre>\r
- #define LONG_TIME 0xffff\r
#define TICKS_TO_WAIT 10\r
\#define LONG_TIME 0xffff\r
\#define TICKS_TO_WAIT        10\r
  xSemaphoreHandle xSemaphore = NULL;\r
 \r
  // Repetitive task.\r
@@ -501,26 +508,26 @@ typedef xQueueHandle xSemaphoreHandle;
  // Timer ISR\r
  void vTimerISR( void * pvParameters )\r
  {\r
- static unsigned portCHAR ucLocalTickCount = 0;\r
- static portBASE_TYPE xTaskWoken;\r
+ static unsigned char ucLocalTickCount = 0;\r
+ static signed portBASE_TYPE xHigherPriorityTaskWoken;\r
 \r
     // A timer tick has occurred.\r
 \r
     // ... Do other time functions.\r
 \r
     // Is it time for vATask () to run?\r
-       xTaskWoken = pdFALSE;\r
+       xHigherPriorityTaskWoken = pdFALSE;\r
     ucLocalTickCount++;\r
     if( ucLocalTickCount >= TICKS_TO_WAIT )\r
     {\r
         // Unblock the task by releasing the semaphore.\r
-        xTaskWoken = xSemaphoreGiveFromISR( xSemaphore, xTaskWoken );\r
+        xSemaphoreGiveFromISR( xSemaphore, &xHigherPriorityTaskWoken );\r
 \r
         // Reset the count so we release the semaphore again in 10 ticks time.\r
         ucLocalTickCount = 0;\r
     }\r
 \r
-    if( xTaskWoken != pdFALSE )\r
+    if( xHigherPriorityTaskWoken != pdFALSE )\r
     {\r
         // We can force a context switch here.  Context switching from an\r
         // ISR uses port specific syntax.  Check the demo task for your port\r
@@ -531,7 +538,7 @@ typedef xQueueHandle xSemaphoreHandle;
  * \defgroup xSemaphoreGiveFromISR xSemaphoreGiveFromISR\r
  * \ingroup Semaphores\r
  */\r
-#define xSemaphoreGiveFromISR( xSemaphore, xTaskPreviouslyWoken )                      xQueueGenericSendFromISR( ( xQueueHandle ) xSemaphore, NULL, xTaskPreviouslyWoken, queueSEND_TO_BACK )\r
+#define xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken )                 xQueueGenericSendFromISR( ( xQueueHandle ) xSemaphore, NULL, pxHigherPriorityTaskWoken, queueSEND_TO_BACK )\r
 \r
 /**\r
  * semphr. h\r
@@ -550,7 +557,7 @@ typedef xQueueHandle xSemaphoreHandle;
  *\r
  * Mutex type semaphores cannot be used from within interrupt service routines.  \r
  *\r
- * See xSemaphoreCreateBinary() for an alternative implementation that can be \r
+ * See vSemaphoreCreateBinary() for an alternative implementation that can be \r
  * used for pure synchronisation (where one task or interrupt always 'gives' the \r
  * semaphore and another always 'takes' the semaphore) and from within interrupt \r
  * service routines.\r
@@ -605,7 +612,7 @@ typedef xQueueHandle xSemaphoreHandle;
  *\r
  * Mutex type semaphores cannot be used from within interrupt service routines.  \r
  *\r
- * See xSemaphoreCreateBinary() for an alternative implementation that can be \r
+ * See vSemaphoreCreateBinary() for an alternative implementation that can be \r
  * used for pure synchronisation (where one task or interrupt always 'gives' the \r
  * semaphore and another always 'takes' the semaphore) and from within interrupt \r
  * service routines.\r