]> git.sur5r.net Git - freertos/commitdiff
Ensure queue functions go into the privileged code section when the MPU version is...
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 7 Jun 2013 09:41:15 +0000 (09:41 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 7 Jun 2013 09:41:15 +0000 (09:41 +0000)
Provide a default value for configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS.
Revert prvQueueUnregisterQueue() back to a public function.

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

FreeRTOS/Source/include/FreeRTOS.h
FreeRTOS/Source/include/mpu_wrappers.h
FreeRTOS/Source/include/queue.h
FreeRTOS/Source/include/task.h
FreeRTOS/Source/queue.c

index 86416608b5b7915e2ac23fbf88a683eac7ef39ff..34fc4897223073bbc3b575a08a8ef4b022ef4ad4 100644 (file)
@@ -576,6 +576,10 @@ typedef portBASE_TYPE (*pdTASK_HOOK_CODE)( void * );
        #define configUSE_TIME_SLICING 1\r
 #endif\r
 \r
+#ifndef configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS\r
+       #define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 0\r
+#endif\r
+\r
 /* For backward compatability. */\r
 #define eTaskStateGet eTaskGetState\r
 \r
index a073288a02517deddc07882391d834a8dc1959be..02ecad7d101c41a45e19dc99338d2c6b2190f07b 100644 (file)
     ***************************************************************************\r
 \r
 \r
-    http://www.FreeRTOS.org - Documentation, books, training, latest versions, \r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
     license and Real Time Engineers Ltd. contact details.\r
 \r
     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
     including FreeRTOS+Trace - an indispensable productivity tool, and our new\r
     fully thread aware and reentrant UDP/IP stack.\r
 \r
-    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High \r
-    Integrity Systems, who sell the code with commercial support, \r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems, who sell the code with commercial support,\r
     indemnification and middleware, under the OpenRTOS brand.\r
-    \r
-    http://www.SafeRTOS.com - High Integrity Systems also provide a safety \r
-    engineered and independently SIL3 certified version for use in safety and \r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
     mission critical applications that require provable dependability.\r
 */\r
 \r
@@ -144,7 +144,6 @@ only for ports that are using the MPU. */
                /* Ensure API functions go in the privileged execution section. */\r
                #define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions")))\r
                #define PRIVILEGED_DATA __attribute__((section("privileged_data")))\r
-        //#define PRIVILEGED_DATA\r
 \r
        #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */\r
 \r
index ae3dd95c142ac3fa158667f51122d8f0af12aee9..f2787f0bad29e213498aaf3e7a9a00e3d1c63b51 100644 (file)
     ***************************************************************************\r
 \r
 \r
-    http://www.FreeRTOS.org - Documentation, books, training, latest versions, \r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
     license and Real Time Engineers Ltd. contact details.\r
 \r
     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
     including FreeRTOS+Trace - an indispensable productivity tool, and our new\r
     fully thread aware and reentrant UDP/IP stack.\r
 \r
-    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High \r
-    Integrity Systems, who sell the code with commercial support, \r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems, who sell the code with commercial support,\r
     indemnification and middleware, under the OpenRTOS brand.\r
-    \r
-    http://www.SafeRTOS.com - High Integrity Systems also provide a safety \r
-    engineered and independently SIL3 certified version for use in safety and \r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
     mission critical applications that require provable dependability.\r
 */\r
 \r
@@ -512,7 +512,7 @@ typedef void * xQueueSetMemberHandle;
  * \defgroup xQueueSend xQueueSend\r
  * \ingroup QueueManagement\r
  */\r
-signed portBASE_TYPE xQueueGenericSend( xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition );\r
+signed portBASE_TYPE xQueueGenericSend( xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * queue. h\r
@@ -798,7 +798,7 @@ signed portBASE_TYPE xQueueGenericSend( xQueueHandle xQueue, const void * const
  * \defgroup xQueueReceive xQueueReceive\r
  * \ingroup QueueManagement\r
  */\r
-signed portBASE_TYPE xQueueGenericReceive( xQueueHandle xQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeek );\r
+signed portBASE_TYPE xQueueGenericReceive( xQueueHandle xQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeek ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * queue. h\r
@@ -813,7 +813,7 @@ signed portBASE_TYPE xQueueGenericReceive( xQueueHandle xQueue, void * const pvB
  * \page uxQueueMessagesWaiting uxQueueMessagesWaiting\r
  * \ingroup QueueManagement\r
  */\r
-unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue );\r
+unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * queue. h\r
@@ -827,7 +827,7 @@ unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue );
  * \page vQueueDelete vQueueDelete\r
  * \ingroup QueueManagement\r
  */\r
-void vQueueDelete( xQueueHandle xQueue );\r
+void vQueueDelete( xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * queue. h\r
@@ -1120,7 +1120,7 @@ void vQueueDelete( xQueueHandle xQueue );
  * \defgroup xQueueSendFromISR xQueueSendFromISR\r
  * \ingroup QueueManagement\r
  */\r
-signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle xQueue, const void * const pvItemToQueue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portBASE_TYPE xCopyPosition );\r
+signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle xQueue, const void * const pvItemToQueue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portBASE_TYPE xCopyPosition ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * queue. h\r
@@ -1209,15 +1209,15 @@ signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle xQueue, const void *
  * \defgroup xQueueReceiveFromISR xQueueReceiveFromISR\r
  * \ingroup QueueManagement\r
  */\r
-signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle xQueue, void * const pvBuffer, signed portBASE_TYPE *pxHigherPriorityTaskWoken );\r
+signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle xQueue, void * const pvBuffer, signed portBASE_TYPE *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * Utilities to query queues that are safe to use from an ISR.  These utilities\r
  * should be used only from witin an ISR, or within a critical section.\r
  */\r
-signed portBASE_TYPE xQueueIsQueueEmptyFromISR( const xQueueHandle xQueue );\r
-signed portBASE_TYPE xQueueIsQueueFullFromISR( const xQueueHandle xQueue );\r
-unsigned portBASE_TYPE uxQueueMessagesWaitingFromISR( const xQueueHandle xQueue );\r
+signed portBASE_TYPE xQueueIsQueueEmptyFromISR( const xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
+signed portBASE_TYPE xQueueIsQueueFullFromISR( const xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
+unsigned portBASE_TYPE uxQueueMessagesWaitingFromISR( const xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
 \r
 \r
 /*\r
@@ -1260,16 +1260,16 @@ signed portBASE_TYPE xQueueCRReceive( xQueueHandle xQueue, void *pvBuffer, portT
  * xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling\r
  * these functions directly.\r
  */\r
-xQueueHandle xQueueCreateMutex( unsigned char ucQueueType );\r
-xQueueHandle xQueueCreateCountingSemaphore( unsigned portBASE_TYPE uxCountValue, unsigned portBASE_TYPE uxInitialCount );\r
-void* xQueueGetMutexHolder( xQueueHandle xSemaphore );\r
+xQueueHandle xQueueCreateMutex( unsigned char ucQueueType ) PRIVILEGED_FUNCTION;\r
+xQueueHandle xQueueCreateCountingSemaphore( unsigned portBASE_TYPE uxCountValue, unsigned portBASE_TYPE uxInitialCount ) PRIVILEGED_FUNCTION;\r
+void* xQueueGetMutexHolder( xQueueHandle xSemaphore ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * For internal use only.  Use xSemaphoreTakeMutexRecursive() or\r
  * xSemaphoreGiveMutexRecursive() instead of calling these functions directly.\r
  */\r
-portBASE_TYPE xQueueTakeMutexRecursive( xQueueHandle xMutex, portTickType xBlockTime );\r
-portBASE_TYPE xQueueGiveMutexRecursive( xQueueHandle pxMutex );\r
+portBASE_TYPE xQueueTakeMutexRecursive( xQueueHandle xMutex, portTickType xBlockTime ) PRIVILEGED_FUNCTION;\r
+portBASE_TYPE xQueueGiveMutexRecursive( xQueueHandle pxMutex ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * Reset a queue back to its original empty state.  pdPASS is returned if the\r
@@ -1300,14 +1300,28 @@ portBASE_TYPE xQueueGiveMutexRecursive( xQueueHandle pxMutex );
  * name that the kernel aware debugger will display.\r
  */\r
 #if configQUEUE_REGISTRY_SIZE > 0U\r
-       void vQueueAddToRegistry( xQueueHandle xQueue, signed char *pcName );\r
+       void vQueueAddToRegistry( xQueueHandle xQueue, signed char *pcName ) PRIVILEGED_FUNCTION;\r
+#endif\r
+\r
+/*\r
+ * The registry is provided as a means for kernel aware debuggers to\r
+ * locate queues, semaphores and mutexes.  Call vQueueAddToRegistry() add\r
+ * a queue, semaphore or mutex handle to the registry if you want the handle\r
+ * to be available to a kernel aware debugger, and vQueueUnregisterQueue() to\r
+ * remove the queue, semaphore or mutex from the register.  If you are not using\r
+ * a kernel aware debugger then this function can be ignored.\r
+ *\r
+ * @param xQueue The handle of the queue being removed from the registry.\r
+ */\r
+#if configQUEUE_REGISTRY_SIZE > 0U\r
+       void vQueueUnregisterQueue( xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
 #endif\r
 \r
 /*\r
  * Generic version of the queue creation function, which is in turn called by\r
  * any queue, semaphore or mutex creation function or macro.\r
  */\r
-xQueueHandle xQueueGenericCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize, unsigned char ucQueueType );\r
+xQueueHandle xQueueGenericCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize, unsigned char ucQueueType ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * Queue sets provide a mechanism to allow a task to block (pend) on a read\r
@@ -1324,7 +1338,7 @@ xQueueHandle xQueueGenericCreate( unsigned portBASE_TYPE uxQueueLength, unsigned
  * semaphore take operation would be successful.\r
  *\r
  * Note 1:  See the documentation on http://wwwFreeRTOS.org/RTOS-queue-sets.html\r
- * for reasons why queue sets are very rarely needed in practice as there are \r
+ * for reasons why queue sets are very rarely needed in practice as there are\r
  * simpler methods of blocking on multiple objects.\r
  *\r
  * Note 2:  Blocking on a queue set that contains a mutex will not cause the\r
@@ -1357,7 +1371,7 @@ xQueueHandle xQueueGenericCreate( unsigned portBASE_TYPE uxQueueLength, unsigned
  * @return If the queue set is created successfully then a handle to the created\r
  * queue set is returned.  Otherwise NULL is returned.\r
  */\r
-xQueueSetHandle xQueueCreateSet( unsigned portBASE_TYPE uxEventQueueLength );\r
+xQueueSetHandle xQueueCreateSet( unsigned portBASE_TYPE uxEventQueueLength ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * Adds a queue or semaphore to a queue set that was previously created by a\r
@@ -1381,10 +1395,10 @@ xQueueSetHandle xQueueCreateSet( unsigned portBASE_TYPE uxEventQueueLength );
  * queue set because it is already a member of a different queue set then pdFAIL\r
  * is returned.\r
  */\r
-portBASE_TYPE xQueueAddToSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSetHandle xQueueSet );\r
+portBASE_TYPE xQueueAddToSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSetHandle xQueueSet ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
- * Removes a queue or semaphore from a queue set.  A queue or semaphore can only \r
+ * Removes a queue or semaphore from a queue set.  A queue or semaphore can only\r
  * be removed from a set if the queue or semaphore is empty.\r
  *\r
  * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this\r
@@ -1400,7 +1414,7 @@ portBASE_TYPE xQueueAddToSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSet
  * then pdPASS is returned.  If the queue was not in the queue set, or the\r
  * queue (or semaphore) was not empty, then pdFAIL is returned.\r
  */\r
-portBASE_TYPE xQueueRemoveFromSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSetHandle xQueueSet );\r
+portBASE_TYPE xQueueRemoveFromSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSetHandle xQueueSet ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * xQueueSelectFromSet() selects from the members of a queue set a queue or\r
@@ -1413,7 +1427,7 @@ portBASE_TYPE xQueueRemoveFromSet( xQueueSetMemberHandle xQueueOrSemaphore, xQue
  * function.\r
  *\r
  * Note 1:  See the documentation on http://wwwFreeRTOS.org/RTOS-queue-sets.html\r
- * for reasons why queue sets are very rarely needed in practice as there are \r
+ * for reasons why queue sets are very rarely needed in practice as there are\r
  * simpler methods of blocking on multiple objects.\r
  *\r
  * Note 2:  Blocking on a queue set that contains a mutex will not cause the\r
@@ -1436,16 +1450,16 @@ portBASE_TYPE xQueueRemoveFromSet( xQueueSetMemberHandle xQueueOrSemaphore, xQue
  * in the queue set that is available, or NULL if no such queue or semaphore\r
  * exists before before the specified block time expires.\r
  */\r
-xQueueSetMemberHandle xQueueSelectFromSet( xQueueSetHandle xQueueSet, portTickType xBlockTimeTicks );\r
+xQueueSetMemberHandle xQueueSelectFromSet( xQueueSetHandle xQueueSet, portTickType xBlockTimeTicks ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * A version of xQueueSelectFromSet() that can be used from an ISR.\r
  */\r
-xQueueSetMemberHandle xQueueSelectFromSetFromISR( xQueueSetHandle xQueueSet );\r
+xQueueSetMemberHandle xQueueSelectFromSetFromISR( xQueueSetHandle xQueueSet ) PRIVILEGED_FUNCTION;\r
 \r
 /* Not public API functions. */\r
-void vQueueWaitForMessageRestricted( xQueueHandle xQueue, portTickType xTicksToWait );\r
-portBASE_TYPE xQueueGenericReset( xQueueHandle xQueue, portBASE_TYPE xNewQueue );\r
+void vQueueWaitForMessageRestricted( xQueueHandle xQueue, portTickType xTicksToWait ) PRIVILEGED_FUNCTION;\r
+portBASE_TYPE xQueueGenericReset( xQueueHandle xQueue, portBASE_TYPE xNewQueue ) PRIVILEGED_FUNCTION;\r
 void vQueueSetQueueNumber( xQueueHandle xQueue, unsigned char ucQueueNumber ) PRIVILEGED_FUNCTION;\r
 unsigned char ucQueueGetQueueType( xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
 \r
index fa7a85a10a21de788b9ea7b8c462bacc9c0dbbf5..2a16adbcf1beb92a79cc8f5fb4d741f065a7b7e1 100644 (file)
@@ -67,8 +67,8 @@
     Integrity Systems, who sell the code with commercial support,\r
     indemnification and middleware, under the OpenRTOS brand.\r
 \r
-    http://www.SafeRTOS.com - High Integrity Systems also provide a safety \r
-    engineered and independently SIL3 certified version for use in safety and \r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
     mission critical applications that require provable dependability.\r
 */\r
 \r
@@ -1210,9 +1210,14 @@ xTaskHandle xTaskGetIdleTaskHandle( void );
  * Called from the real time kernel tick (either preemptive or cooperative),\r
  * this increments the tick count and checks if any tasks that are blocked\r
  * for a finite period required removing from a blocked list and placing on\r
- * a ready list.\r
+ * a ready list.  If a non-zero value is returned then a context switch is\r
+ * required because either:\r
+ *   + A task was removed from a blocked list because its timeout had expired,\r
+ *     or\r
+ *   + Time slicing is in use and there is a task of equal priority to the\r
+ *     currently running task.\r
  */\r
-void vTaskIncrementTick( void ) PRIVILEGED_FUNCTION;\r
+portBASE_TYPE xTaskIncrementTick( void ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE.  IT IS AN\r
index bdb25271f4f230545a87183a5f54ace920f79be8..4a6745b7befa15ddb5a50143a01aebb814bd8ee2 100644 (file)
@@ -163,10 +163,6 @@ typedef struct QueueDefinition
        array position being vacant. */\r
        xQueueRegistryItem xQueueRegistry[ configQUEUE_REGISTRY_SIZE ];\r
 \r
-       /* Removes a queue from the registry by simply setting the pcQueueName\r
-       member to NULL. */\r
-       static void prvQueueUnregisterQueue( xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
-\r
 #endif /* configQUEUE_REGISTRY_SIZE */\r
 \r
 /*\r
@@ -209,7 +205,7 @@ static void prvCopyDataFromQueue( xQUEUE * const pxQueue, const void *pvBuffer )
         * Checks to see if a queue is a member of a queue set, and if so, notifies\r
         * the queue set that the queue contains data.\r
         */\r
-       static portBASE_TYPE prvNotifyQueueSetContainer( xQUEUE *pxQueue, portBASE_TYPE xCopyPosition );\r
+       static portBASE_TYPE prvNotifyQueueSetContainer( xQUEUE *pxQueue, portBASE_TYPE xCopyPosition ) PRIVILEGED_FUNCTION;\r
 #endif\r
 \r
 /*-----------------------------------------------------------*/\r
@@ -1259,7 +1255,7 @@ xQUEUE *pxQueue;
        traceQUEUE_DELETE( pxQueue );\r
        #if ( configQUEUE_REGISTRY_SIZE > 0 )\r
        {\r
-               prvQueueUnregisterQueue( pxQueue );\r
+               vQueueUnregisterQueue( pxQueue );\r
        }\r
        #endif\r
        vPortFree( pxQueue->pcHead );\r
@@ -1778,7 +1774,7 @@ signed portBASE_TYPE xReturn;
 \r
 #if ( configQUEUE_REGISTRY_SIZE > 0 )\r
 \r
-       static void prvQueueUnregisterQueue( xQueueHandle xQueue )\r
+       void vQueueUnregisterQueue( xQueueHandle xQueue )\r
        {\r
        unsigned portBASE_TYPE ux;\r
 \r