]> git.sur5r.net Git - freertos/commitdiff
Add the macro xSemaphoreTakeFromISR().
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 3 Jul 2012 09:38:09 +0000 (09:38 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 3 Jul 2012 09:38:09 +0000 (09:38 +0000)
Add #error strings if configMAX_SYSCALL_INTERRUPT_PRIORITY is set to 0.
Corrected the prototype of vApplicationStackOverflowHook().
Changed the dimensioning of the buffer declared in prvListTaskWithinSingleList() to make use of the configMAX_TASK_NAME_LEN setting.

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

Source/include/semphr.h
Source/portable/GCC/ARM_CM3/port.c
Source/portable/GCC/ARM_CM3_MPU/port.c
Source/portable/GCC/ARM_CM4F/port.c
Source/portable/IAR/ARM_CM3/port.c
Source/portable/IAR/ARM_CM4F/port.c
Source/portable/RVDS/ARM_CM3/port.c
Source/portable/RVDS/ARM_CM4F/port.c
Source/portable/Tasking/ARM_CM4F/port.c
Source/tasks.c

index ca335d535fe8a19fca7bdd54982676defd7fb037..b523c723e1a2bb16caed1cb70c2a52480723156c 100644 (file)
@@ -554,6 +554,40 @@ typedef xQueueHandle xSemaphoreHandle;
  */\r
 #define xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken )                 xQueueGenericSendFromISR( ( xQueueHandle ) ( xSemaphore ), NULL, ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK )\r
 \r
+/**\r
+ * semphr. h\r
+ * <pre>\r
+ xSemaphoreTakeFromISR( \r
+                          xSemaphoreHandle xSemaphore, \r
+                          signed portBASE_TYPE *pxHigherPriorityTaskWoken\r
+                      )</pre>\r
+ *\r
+ * <i>Macro</i> to  take a semaphore from an ISR.  The semaphore must have \r
+ * previously been created with a call to vSemaphoreCreateBinary() or \r
+ * xSemaphoreCreateCounting().\r
+ *\r
+ * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex())\r
+ * must not be used with this macro.\r
+ *\r
+ * This macro can be used from an ISR, however taking a semaphore from an ISR\r
+ * is not a common operation.  It is likely to only be useful when taking a\r
+ * counting semaphore when an interrupt is obtaining an object from a resource\r
+ * pool (when the semaphore count indicates the number of resources available).\r
+ *\r
+ * @param xSemaphore A handle to the semaphore being taken.  This is the\r
+ * handle returned when the semaphore was created.\r
+ *\r
+ * @param pxHigherPriorityTaskWoken xSemaphoreTakeFromISR() will set\r
+ * *pxHigherPriorityTaskWoken to pdTRUE if taking the semaphore caused a task\r
+ * to unblock, and the unblocked task has a priority higher than the currently\r
+ * running task.  If xSemaphoreTakeFromISR() sets this value to pdTRUE then\r
+ * a context switch should be requested before the interrupt is exited.\r
+ *\r
+ * @return pdTRUE if the semaphore was successfully taken, otherwise \r
+ * pdFALSE\r
+ */\r
+#define xSemaphoreTakeFromISR( xSemaphore, pxHigherPriorityTaskWoken )                 xQueueReceiveFromISR( ( xQueueHandle ) ( xSemaphore ), NULL, ( pxHigherPriorityTaskWoken ) )\r
+\r
 /**\r
  * semphr. h\r
  * <pre>xSemaphoreHandle xSemaphoreCreateMutex( void )</pre>\r
index 4d6ef60b195e18329c2313e699ccc8ffa807f838..344b381eb04f2d4ea3bb591d8096898c1ce620fa 100644 (file)
@@ -79,6 +79,10 @@ FreeRTOS.org versions prior to V4.4.0 did not include this definition. */
        #define configKERNEL_INTERRUPT_PRIORITY 255\r
 #endif\r
 \r
+#if configMAX_SYSCALL_INTERRUPT_PRIORITY == 0\r
+       #error configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.  See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html\r
+#endif\r
+\r
 /* Constants required to manipulate the NVIC. */\r
 #define portNVIC_SYSTICK_CTRL          ( ( volatile unsigned long *) 0xe000e010 )\r
 #define portNVIC_SYSTICK_LOAD          ( ( volatile unsigned long *) 0xe000e014 )\r
index 01dcf8bfcf5873d988d4436759b589c2736505e1..5d8993d3668107d505e750c10708c9034767ff6b 100644 (file)
@@ -78,6 +78,10 @@ task.h is included from an application file. */
 #include "task.h"\r
 #include "queue.h"\r
 \r
+#if configMAX_SYSCALL_INTERRUPT_PRIORITY == 0\r
+       #error configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.  See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html\r
+#endif\r
+\r
 #undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\r
 \r
 /* Constants required to access and manipulate the NVIC. */\r
index d91fde9e3cede82979f74741ab9ba375cafcf8a6..b9fd31c308530e33e95463f91e6125542768e047 100644 (file)
        #error This port can only be used when the project options are configured to enable hardware floating point support.\r
 #endif\r
 \r
+#if configMAX_SYSCALL_INTERRUPT_PRIORITY == 0\r
+       #error configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.  See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html\r
+#endif\r
+\r
 /* Constants required to manipulate the NVIC. */\r
 #define portNVIC_SYSTICK_CTRL          ( ( volatile unsigned long * ) 0xe000e010 )\r
 #define portNVIC_SYSTICK_LOAD          ( ( volatile unsigned long * ) 0xe000e014 )\r
index 32d03fa640ec89eefaa66b68679a101a5c26e2e9..7cbb22a274738e828a28e9ecd1b30e4338aa6653 100644 (file)
 #include "FreeRTOS.h"\r
 #include "task.h"\r
 \r
+#if configMAX_SYSCALL_INTERRUPT_PRIORITY == 0\r
+       #error configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.  See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html\r
+#endif\r
+\r
 /* Constants required to manipulate the NVIC. */\r
 #define portNVIC_SYSTICK_CTRL          ( ( volatile unsigned long *) 0xe000e010 )\r
 #define portNVIC_SYSTICK_LOAD          ( ( volatile unsigned long *) 0xe000e014 )\r
index 6b4b054c4dc132bc7c1bea4df2ba23784d58f2f0..28d606ab87198ae08cef427322b90ace1e6be2eb 100644 (file)
        #error This port can only be used when the project options are configured to enable hardware floating point support.\r
 #endif\r
 \r
+#if configMAX_SYSCALL_INTERRUPT_PRIORITY == 0\r
+       #error configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.  See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html\r
+#endif\r
+\r
 /* Constants required to manipulate the NVIC. */\r
 #define portNVIC_SYSTICK_CTRL          ( ( volatile unsigned long * ) 0xe000e010 )\r
 #define portNVIC_SYSTICK_LOAD          ( ( volatile unsigned long * ) 0xe000e014 )\r
index e76d795dbd2804a4f0f5925b3293c794a3a3e5fb..0c0418c367ab503d875ee46680a869cafe05a0e9 100644 (file)
        #define configKERNEL_INTERRUPT_PRIORITY 255\r
 #endif\r
 \r
+#if configMAX_SYSCALL_INTERRUPT_PRIORITY == 0\r
+       #error configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.  See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html\r
+#endif\r
+\r
 /* Constants required to manipulate the NVIC. */\r
 #define portNVIC_SYSTICK_CTRL          ( ( volatile unsigned long *) 0xe000e010 )\r
 #define portNVIC_SYSTICK_LOAD          ( ( volatile unsigned long *) 0xe000e014 )\r
index fed77e539be3959991df31ffd87c4ddeacb97f11..e11d8f5bfdc65e1d1b0cc4e6c5cf2b64aabde30d 100644 (file)
        #error This port can only be used when the project options are configured to enable hardware floating point support.\r
 #endif\r
 \r
+#if configMAX_SYSCALL_INTERRUPT_PRIORITY == 0\r
+       #error configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.  See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html\r
+#endif\r
+\r
 /* Constants required to manipulate the NVIC. */\r
 #define portNVIC_SYSTICK_CTRL          ( ( volatile unsigned long *) 0xe000e010 )\r
 #define portNVIC_SYSTICK_LOAD          ( ( volatile unsigned long *) 0xe000e014 )\r
index 9b3d119a626a91d949eaf8154a2c7f0f488a627e..aa3ed04f7056c300a304b1b26d2e71e8283902c2 100644 (file)
 #include "FreeRTOS.h"\r
 #include "task.h"\r
 \r
+#if configMAX_SYSCALL_INTERRUPT_PRIORITY == 0\r
+       #error configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.  See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html\r
+#endif\r
+\r
 /* Constants required to manipulate the NVIC. */\r
 #define portNVIC_SYSTICK_CTRL          ( ( volatile unsigned long * ) 0xe000e010 )\r
 #define portNVIC_SYSTICK_LOAD          ( ( volatile unsigned long * ) 0xe000e014 )\r
index e319c2f8d0d82ae99df8b9482fe370214f7b9f3e..85e41a05f614bb735dd6ac96f53c89f8d795b15b 100644 (file)
@@ -296,7 +296,7 @@ portTickType xItemValue;                                                                                                                            \
 #define prvGetTCBFromHandle( pxHandle ) ( ( ( pxHandle ) == NULL ) ? ( tskTCB * ) pxCurrentTCB : ( tskTCB * ) ( pxHandle ) )\r
 \r
 /* Callback function prototypes. --------------------------*/\r
-extern void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName );\r
+extern void vApplicationStackOverflowHook( xTaskHandle pxTask, signed char *pcTaskName );\r
 extern void vApplicationTickHook( void );\r
                \r
 /* File private functions. --------------------------------*/\r
@@ -2165,7 +2165,7 @@ tskTCB *pxNewTCB;
        {\r
        volatile tskTCB *pxNextTCB, *pxFirstTCB;\r
        unsigned short usStackRemaining;\r
-       PRIVILEGED_DATA static char pcStatusString[ 50 ];\r
+       PRIVILEGED_DATA static char pcStatusString[ configMAX_TASK_NAME_LEN + 30 ];\r
 \r
                /* Write the details of all the TCB's in pxList into the buffer. */\r
                listGET_OWNER_OF_NEXT_ENTRY( pxFirstTCB, pxList );\r