]> git.sur5r.net Git - freertos/commitdiff
Add vQueueDelete() to the MPU port.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 3 Aug 2012 15:21:21 +0000 (15:21 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 3 Aug 2012 15:21:21 +0000 (15:21 +0000)
Added volatile key word to the queue xRxLock and xTxLock members.
Ensure the portPRIVILEGED_BIT bit is set when the timer task is being created by the kernel - as it was for the idle task.  Necessary for MPU port.

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

Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/ParTest.c
Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/serial.c
Demo/WIN32-MSVC-lwIP/WIN32.suo
Source/portable/GCC/ARM_CM3_MPU/port.c
Source/queue.c
Source/timers.c

index 54fe4976e7d55521aefbb8ae927f1582f7ce46b2..dd35507fe5a07749565346dec4d039ac4f9bbc49 100644 (file)
@@ -82,7 +82,7 @@
 /* The number of LEDs available to the user on the evaluation kit. */\r
 #define partestNUM_LEDS                        ( 3UL )\r
 \r
-/* Definitions not included in sam3s_ek.h. */\r
+/* Definitions not included in sam4s_ek.h. */\r
 #define LED2_GPIO                              ( PIO_PC20_IDX )\r
 \r
 /* One of the LEDs is wired in the inverse to the others as it is also used as\r
@@ -121,20 +121,20 @@ void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
                if( xValue != pdFALSE )\r
                {\r
                        /* Turn the LED on. */\r
-                       portENTER_CRITICAL();\r
+                       taskENTER_CRITICAL();\r
                        {\r
                                gpio_set_pin_low( ulLED[ uxLED ]);\r
                        }\r
-                       portEXIT_CRITICAL();\r
+                       taskEXIT_CRITICAL();\r
                }\r
                else\r
                {\r
                        /* Turn the LED off. */\r
-                       portENTER_CRITICAL();\r
+                       taskENTER_CRITICAL();\r
                        {\r
                                gpio_set_pin_high( ulLED[ uxLED ]);\r
                        }\r
-                       portEXIT_CRITICAL();\r
+                       taskEXIT_CRITICAL();\r
                }\r
        }\r
 }\r
@@ -144,7 +144,11 @@ void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
 {\r
        if( uxLED < partestNUM_LEDS )\r
        {\r
-               gpio_toggle_pin( ulLED[ uxLED ] );\r
+               taskENTER_CRITICAL();\r
+               {                       \r
+                       gpio_toggle_pin( ulLED[ uxLED ] );\r
+               }\r
+               taskEXIT_CRITICAL();            \r
        }\r
 }\r
                                                        \r
index ed407a2170f90e6bb64fe9ce8bb02ea49614e088..e71158ebea6e4add921f154534a7e7eb52bc4df5 100644 (file)
@@ -110,6 +110,7 @@ static xQueueHandle xCharsForTx;
 \r
 /*-----------------------------------------------------------*/\r
 \r
+\r
 /*\r
  * See the serial.h header file.\r
  */\r
@@ -239,6 +240,14 @@ void vSerialClose( xComPortHandle xPort )
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+/* \r
+ * It should be noted that the com test tasks (which use make use of this file) \r
+ * are included to demonstrate queues being used to communicate between tasks \r
+ * and interrupts, and to demonstrate a context switch being performed from \r
+ * inside an interrupt service routine.  The serial driver used here is *not* \r
+ * intended to represent an efficient implementation.  Real applications should \r
+ * make use of the USARTS peripheral DMA channel (PDC).\r
+ */\r
 void USART1_Handler( void )\r
 {\r
 portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
index 05a748979c55d34f38b6b0af75ad1809893b1aa9..4f0b2bb74289d282b393863c464b87af31f81e70 100644 (file)
Binary files a/Demo/WIN32-MSVC-lwIP/WIN32.suo and b/Demo/WIN32-MSVC-lwIP/WIN32.suo differ
index 5d8993d3668107d505e750c10708c9034767ff6b..9c424bcc61ad738e20a89e1b86417dfd97315358 100644 (file)
@@ -210,6 +210,7 @@ portBASE_TYPE MPU_xQueueGiveMutexRecursive( xQueueHandle xMutex );
 signed portBASE_TYPE MPU_xQueueAltGenericSend( xQueueHandle pxQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition );\r
 signed portBASE_TYPE MPU_xQueueAltGenericReceive( xQueueHandle pxQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking );\r
 void MPU_vQueueAddToRegistry( xQueueHandle xQueue, signed char *pcName );\r
+void MPU_vQueueDelete( xQueueHandle xQueue );\r
 void *MPU_pvPortMalloc( size_t xSize );\r
 void MPU_vPortFree( void *pv );\r
 void MPU_vPortInitialiseBlocks( void );\r
@@ -1071,6 +1072,16 @@ signed portBASE_TYPE xReturn;
 #endif\r
 /*-----------------------------------------------------------*/\r
 \r
+void MPU_vQueueDelete( xQueueHandle xQueue )\r
+{\r
+portBASE_TYPE xRunningPrivileged = prvRaisePrivilege();\r
+\r
+       vQueueDelete( xQueue );\r
+       \r
+       portRESET_PRIVILEGE( xRunningPrivileged );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
 void *MPU_pvPortMalloc( size_t xSize )\r
 {\r
 void *pvReturn;\r
index a546dcc088da56078d1762693251ba1279bd0291..dff11b1b474180eae1bf01a6f0a96ccd7078a5de 100644 (file)
@@ -85,7 +85,7 @@ task.h is included from an application file. */
  * PUBLIC LIST API documented in list.h\r
  *----------------------------------------------------------*/\r
 \r
-/* Constants used with the cRxLock and cTxLock structure members. */\r
+/* Constants used with the cRxLock and xTxLock structure members. */\r
 #define queueUNLOCKED                                  ( ( signed portBASE_TYPE ) -1 )\r
 #define queueLOCKED_UNMODIFIED                 ( ( signed portBASE_TYPE ) 0 )\r
 \r
@@ -133,8 +133,8 @@ typedef struct QueueDefinition
        unsigned portBASE_TYPE uxLength;                /*< The length of the queue defined as the number of items it will hold, not the number of bytes. */\r
        unsigned portBASE_TYPE uxItemSize;              /*< The size of each items that the queue will hold. */\r
 \r
-       signed portBASE_TYPE xRxLock;                   /*< Stores the number of items received from the queue (removed from the queue) while the queue was locked.  Set to queueUNLOCKED when the queue is not locked. */\r
-       signed portBASE_TYPE xTxLock;                   /*< Stores the number of items transmitted to the queue (added to the queue) while the queue was locked.  Set to queueUNLOCKED when the queue is not locked. */\r
+       volatile signed portBASE_TYPE xRxLock;  /*< Stores the number of items received from the queue (removed from the queue) while the queue was locked.  Set to queueUNLOCKED when the queue is not locked. */\r
+       volatile signed portBASE_TYPE xTxLock;  /*< Stores the number of items transmitted to the queue (added to the queue) while the queue was locked.  Set to queueUNLOCKED when the queue is not locked. */\r
        \r
        #if ( configUSE_TRACE_FACILITY == 1 )\r
                unsigned char ucQueueNumber;\r
index 2dd68db7e47aa8036ee876a0ac010f451167ad8b..947e044ad0746cb255fcd5e920231af4ee623b11 100644 (file)
@@ -200,12 +200,12 @@ portBASE_TYPE xReturn = pdFAIL;
                {\r
                        /* Create the timer task, storing its handle in xTimerTaskHandle so\r
                        it can be returned by the xTimerGetTimerDaemonTaskHandle() function. */\r
-                       xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY, &xTimerTaskHandle );       \r
+                       xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT, &xTimerTaskHandle );       \r
                }\r
                #else\r
                {\r
                        /* Create the timer task without storing its handle. */\r
-                       xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY, NULL);\r
+                       xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT, NULL);\r
                }\r
                #endif\r
        }\r
@@ -442,7 +442,7 @@ portTickType xNextExpireTime;
 static portTickType prvSampleTimeNow( portBASE_TYPE *pxTimerListsWereSwitched )\r
 {\r
 portTickType xTimeNow;\r
-static portTickType xLastTime = ( portTickType ) 0U;\r
+PRIVILEGED_DATA static portTickType xLastTime = ( portTickType ) 0U;\r
 \r
        xTimeNow = xTaskGetTickCount();\r
        \r