]> git.sur5r.net Git - freertos/commitdiff
Update to use new xQueueSendFromISR() and xSemaphoreGiveFromISR() function semantics.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sat, 12 Apr 2008 23:32:18 +0000 (23:32 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sat, 12 Apr 2008 23:32:18 +0000 (23:32 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@307 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

54 files changed:
Demo/ARM7_AT91FR40008_GCC/serial/serialISR.c
Demo/ARM7_AT91SAM7S64_IAR/USB/USBSample.c
Demo/ARM7_AT91SAM7S64_IAR/serial/serial.c
Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/USB/USB_ISR.c
Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/EMAC_ISR.c
Demo/ARM7_LPC2106_GCC/serial/serialISR.c
Demo/ARM7_LPC2129_IAR/serial/serial.c
Demo/ARM7_LPC2129_Keil/serial/serialISR.c
Demo/ARM7_LPC2138_Rowley/mainISR.c
Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/EMAC_ISR.c
Demo/ARM7_LPC2368_Rowley/webserver/EMAC_ISR.c
Demo/ARM7_STR71x_IAR/serial/serial.c
Demo/ARM7_STR75x_GCC/serial/serialISR.c
Demo/ARM7_STR75x_IAR/serial/serial.c
Demo/ARM9_STR91X_IAR/lwip/netif/ethernetif.c
Demo/ARM9_STR91X_IAR/serial/serial.c
Demo/ARM9_STR91X_IAR/webserver/uIP_Task.c
Demo/AVR32_UC3/AT32UC3A/IAR/settings/rtosdemo.cspy.bat
Demo/AVR32_UC3/serial/serial.c
Demo/AVR_ATMega323_IAR/serial/serial.c
Demo/AVR_ATMega323_WinAVR/main.c
Demo/AVR_ATMega323_WinAVR/serial/serial.c
Demo/Cygnal/serial/serial.c
Demo/Flshlite/serial/serial.c
Demo/H8S/RTOSDemo/serial/serial.c
Demo/HCS12_CodeWarrior_banked/serial/serial.c
Demo/HCS12_CodeWarrior_small/main.c
Demo/HCS12_GCC_banked/serial.c
Demo/MB91460_Softune/SRC/serial/serial.c
Demo/MB91460_Softune/SRC/utility/taskutility.c
Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/Src/serial/serial.c
Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/Src/utility/taskutility.c
Demo/MCF5235_GCC/system/serial.c
Demo/MicroBlaze/serial/serial.c
Demo/PIC18_MPLAB/serial/serial.c
Demo/PIC18_WizC/serial/isrSerialRx.c
Demo/PIC18_WizC/serial/serial.c
Demo/PIC24_MPLAB/serial/serial.c
Demo/PIC32MX_MPLAB/serial/serial.c
Demo/PPC405_Xilinx_Virtex4_GCC/RTOSDemo/serial/serial.c
Demo/WizNET_DEMO_GCC_ARM7/TCPISR.c
Demo/WizNET_DEMO_GCC_ARM7/i2cISR.c
Demo/WizNET_DEMO_TERN_186/serial/serial.c
Demo/WizNET_DEMO_TERN_186/tern_code/socket.c
Demo/dsPIC_MPLAB/serial/serial.c
Demo/lwIP_AVR32_UC3/DRIVERS/MACB/macb.c
Demo/lwIP_AVR32_UC3/SERIAL/serial.c
Demo/lwIP_Demo_Rowley_ARM7/EMAC/SAM7_EMAC_ISR.c
Demo/lwIP_Demo_Rowley_ARM7/USB/USBIsr.c
Demo/lwIP_MCF5235_GCC/lwip/contrib/port/FreeRTOS/MCF5235/netif/fec.c
Demo/lwIP_MCF5235_GCC/system/serial.c
Demo/msp430_CrossWorks/serial/serial.c
Demo/msp430_GCC/serial/serial.c
Demo/uIP_Demo_IAR_ARM7/EMAC/SAM7_EMAC.c

index b24f85b60121c11ea73e26a50703e6253e869abf..70a775f59b2d9e57b7add7da582b8ecd88c1266e 100644 (file)
@@ -112,7 +112,7 @@ void vUART_ISR_Handler( void )
 {\r
 /* Now we can declare the local variables.   These must be static. */\r
 signed portCHAR cChar;\r
-portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByRx = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 unsigned portLONG ulStatus;\r
 \r
        /* What caused the interrupt? */\r
@@ -122,7 +122,7 @@ unsigned portLONG ulStatus;
        {\r
                /* The interrupt was caused by the THR becoming empty.  Are there any\r
                more characters to transmit? */\r
-               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                {\r
                        /* A character was retrieved from the queue so can be sent to the\r
                        THR now. */\r
@@ -140,10 +140,7 @@ unsigned portLONG ulStatus;
                /* The interrupt was caused by the receiver getting data. */\r
                cChar = AT91C_BASE_US0->US_RHR;\r
 \r
-               if (xQueueSendFromISR(xRxedChars, &cChar, pdFALSE))\r
-               {\r
-                       xTaskWokenByRx = pdTRUE;\r
-               }\r
+               xQueueSendFromISR(xRxedChars, &cChar, &xHigherPriorityTaskWoken);\r
        }\r
 \r
        /* Acknowledge the interrupt at AIC level... */\r
@@ -153,7 +150,7 @@ unsigned portLONG ulStatus;
        ensure that the unblocked task is the task that executes when the interrupt\r
        completes if the unblocked task has a priority higher than the interrupted\r
        task. */\r
-       if( xTaskWokenByTx || xTaskWokenByRx )\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                portYIELD_FROM_ISR();\r
        }\r
index a8d8858ff2c4ae47209e7f2c19343106412d4ffc..5f1c8d86328111afdb59648ed9da28ca1c736523 100644 (file)
@@ -19,7 +19,7 @@
 \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
+       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
        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
+       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
+       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
+       http://www.OpenRTOS.com - Commercial support, development, porting,\r
        licensing and training services.\r
 */\r
 \r
 /*\r
-       Sample interrupt driven USB device driver.  This is a minimal implementation \r
+       Sample interrupt driven USB device driver.  This is a minimal implementation\r
        for demonstration only.  Although functional, it is not a full and compliant\r
-       implementation.  \r
+       implementation.\r
        \r
        The USB device enumerates as a simple 3 axis joystick, and once configured\r
        transmits 3 axis of data which can be viewed from the USB host machine.\r
 \r
-       This file implements the USB interrupt service routine, and a demo FreeRTOS \r
-       task.  The interrupt service routine handles the USB hardware - taking a \r
+       This file implements the USB interrupt service routine, and a demo FreeRTOS\r
+       task.  The interrupt service routine handles the USB hardware - taking a\r
        snapshot of the USB status at the point of the interrupt.  The task receives\r
        the status information from the interrupt for processing at the task level.\r
        \r
@@ -67,7 +67,7 @@
        Changes from V2.5.5\r
        \r
        + Descriptors that have a length that is an exact multiple of usbFIFO_LENGTH\r
-         can now be transmitted.  To this end an extra parameter has been \r
+         can now be transmitted.  To this end an extra parameter has been\r
          added to the prvSendControlData() function, and the state\r
          eSENDING_EVEN_DESCRIPTOR has been introduced.  Thanks to Scott Miller for\r
          assisting with this contribution.\r
 #define usbINTERFACE_STRING                                    ( 4 )\r
 \r
 /* Data indexes for reading the request from the xISRStatus.ucFifoData[]\r
-into xUSB_REQUEST.  The data order is designed for speed - so looks a \r
+into xUSB_REQUEST.  The data order is designed for speed - so looks a\r
 little odd. */\r
 #define usbREQUEST_TYPE_INDEX                          ( 7 )\r
 #define usbREQUEST_INDEX                                       ( 6 )\r
@@ -176,7 +176,7 @@ typedef struct X_ISR_STATUS
 } xISRStatus;\r
 \r
 /* Structure used to hold the received requests. */\r
-typedef struct \r
+typedef struct\r
 {\r
        unsigned portCHAR ucReqType;\r
        unsigned portCHAR ucRequest;\r
@@ -205,7 +205,7 @@ typedef struct
 \r
 /*-----------------------------------------------------------*/\r
 \r
-/* \r
+/*\r
  * The USB interrupt service routine.  This takes a snapshot of the USB\r
  * device at the time of the interrupt, clears the interrupts, and posts\r
  * the data to the USB processing task.\r
@@ -219,7 +219,7 @@ __arm void vUSB_ISR( void );
 static void prvResetEndPoints( void );\r
 \r
 /*\r
- * Setup the USB hardware, install the interrupt service routine and \r
+ * Setup the USB hardware, install the interrupt service routine and\r
  * initialise all the state variables.\r
  */\r
 static void vInitUSBInterface( void );\r
@@ -229,17 +229,17 @@ static void vInitUSBInterface( void );
  */\r
 static void prvProcessEndPoint0Interrupt( xISRStatus *pxMessage );\r
 \r
-/* \r
- * For simplicity requests are separated into device, interface, class \r
+/*\r
+ * For simplicity requests are separated into device, interface, class\r
  * interface and end point requests.\r
  *\r
  * Decode and handle standard device requests originating on the control\r
- * end point. \r
+ * end point.\r
  */\r
 static void prvHandleStandardDeviceRequest( xUSB_REQUEST *pxRequest );\r
 \r
 /*\r
- * For simplicity requests are separated into device, interface, class \r
+ * For simplicity requests are separated into device, interface, class\r
  * interface and end point requests.\r
  *\r
  * Decode and handle standard interface requests originating on the control\r
@@ -248,7 +248,7 @@ static void prvHandleStandardDeviceRequest( xUSB_REQUEST *pxRequest );
 static void prvHandleStandardInterfaceRequest( xUSB_REQUEST *pxRequest );\r
 \r
 /*\r
- * For simplicity requests are separated into device, interface, class \r
+ * For simplicity requests are separated into device, interface, class\r
  * interface and end point requests.\r
  *\r
  * Decode and handle standard end point requests originating on the control\r
@@ -257,7 +257,7 @@ static void prvHandleStandardInterfaceRequest( xUSB_REQUEST *pxRequest );
 static void prvHandleStandardEndPointRequest( xUSB_REQUEST *pxRequest );\r
 \r
 /*\r
- * For simplicity requests are separated into device, interface, class \r
+ * For simplicity requests are separated into device, interface, class\r
  * interface and end point requests.\r
  *\r
  * Decode and handle the class interface requests.\r
@@ -277,7 +277,7 @@ static void prvSendControlData( unsigned portCHAR *pucData, unsigned portSHORT u
 \r
 /*\r
  * Examine the Tx buffer to see if there is any more data to be transmitted.\r
- * \r
+ *\r
  * If there is data to be transmitted then send the next segment.  A segment\r
  * can have a maximum of 8 bytes (this is defined as the maximum for the end\r
  * point by the descriptor).  The final segment may be less than 8 bytes if\r
@@ -288,36 +288,36 @@ static void prvSendNextSegment( void );
 /*\r
  * A stall condition is forced each time the host makes a request that is not\r
  * supported by this minimal implementation.\r
- * \r
+ *\r
  * A stall is forced by setting the appropriate bit in the end points control\r
- * and status register. \r
+ * and status register.\r
  */\r
 static void prvSendStall( void );\r
 \r
 /*\r
- * A NULL (or zero length packet) is transmitted in acknowledge the reception \r
+ * A NULL (or zero length packet) is transmitted in acknowledge the reception\r
  * of certain events from the host.\r
  */\r
 static void prvUSBTransmitNull( void );\r
 \r
-/* \r
- * When the host requests a descriptor this function is called to determine \r
+/*\r
+ * When the host requests a descriptor this function is called to determine\r
  * which descriptor is being requested and start its transmission.\r
  */\r
 static void prvGetStandardInterfaceDescriptor( xUSB_REQUEST *pxRequest );\r
 \r
 /*\r
- * This demo USB device enumerates as a simple 3 axis joystick.  Once \r
+ * This demo USB device enumerates as a simple 3 axis joystick.  Once\r
  * configured this function is periodically called to generate some sample\r
  * joystick data.\r
  *\r
- * The x and y axis are made to move in a square.  The z axis is made to \r
+ * The x and y axis are made to move in a square.  The z axis is made to\r
  * repeatedly increment up to its maximum.\r
  */\r
 static void prvTransmitSampleValues( void );\r
 \r
 /*\r
- * The created task to handle the USB demo functionality. \r
+ * The created task to handle the USB demo functionality.\r
  */\r
 void vUSBDemoTask( void *pvParameters );\r
 \r
@@ -343,7 +343,7 @@ const portCHAR pxLanguageStringDescriptor[] =
        0x09, 0x04\r
 };\r
 \r
-const portCHAR pxManufacturerStringDescriptor[] = \r
+const portCHAR pxManufacturerStringDescriptor[] =\r
 {\r
        18,\r
        usbDESCRIPTOR_TYPE_STRING,\r
@@ -358,7 +358,7 @@ const portCHAR pxManufacturerStringDescriptor[] =
        'S', 0x00       \r
 };\r
 \r
-const portCHAR pxProductStringDescriptor[] = \r
+const portCHAR pxProductStringDescriptor[] =\r
 {\r
        44,\r
        usbDESCRIPTOR_TYPE_STRING,\r
@@ -386,7 +386,7 @@ const portCHAR pxProductStringDescriptor[] =
        'k', 0x00\r
 };\r
 \r
-const portCHAR pxConfigurationStringDescriptor[] = \r
+const portCHAR pxConfigurationStringDescriptor[] =\r
 {\r
        38,\r
        usbDESCRIPTOR_TYPE_STRING,\r
@@ -411,7 +411,7 @@ const portCHAR pxConfigurationStringDescriptor[] =
        'e', 0x00\r
 };\r
 \r
-const portCHAR pxInterfaceStringDescriptor[] = \r
+const portCHAR pxInterfaceStringDescriptor[] =\r
 {\r
        30,\r
        usbDESCRIPTOR_TYPE_STRING,\r
@@ -453,7 +453,7 @@ const portCHAR pxReportDescriptor[] =
         0xc0                   /* END_COLLECTION                                       */\r
 };\r
 \r
-const char pxDeviceDescriptor[] = \r
+const char pxDeviceDescriptor[] =\r
 {\r
        /* Device descriptor */\r
        0x12,                                                           /* bLength                              */\r
@@ -526,7 +526,7 @@ static xISRStatus xISRMessages[ usbQUEUE_LENGTH + 1 ];
 static xTX_MESSAGE pxCharsForTx;\r
 \r
 /* Queue used to pass messages between the ISR and the task. */\r
-static xQueueHandle xUSBInterruptQueue; \r
+static xQueueHandle xUSBInterruptQueue;\r
 \r
 /* ISR entry has to be written in the asm file as we want a context switch\r
 to occur from within the ISR.  See the port documentation on the FreeRTOS.org\r
@@ -535,9 +535,9 @@ extern void vUSBISREntry( void );
 \r
 /*-----------------------------------------------------------*/\r
 \r
-/* Macros to manipulate the control and status registers.  These registers \r
-cannot be accessed using a direct read modify write operation outside of the \r
-ISR as some bits are left unchanged by writing with a 0, and some are left \r
+/* Macros to manipulate the control and status registers.  These registers\r
+cannot be accessed using a direct read modify write operation outside of the\r
+ISR as some bits are left unchanged by writing with a 0, and some are left\r
 unchanged by writing with a 1. */\r
 \r
 #define usbINT_CLEAR_MASK      (AT91C_UDP_TXCOMP | AT91C_UDP_STALLSENT | AT91C_UDP_RXSETUP | AT91C_UDP_RX_DATA_BK0 | AT91C_UDP_RX_DATA_BK1 )\r
@@ -576,7 +576,7 @@ unchanged by writing with a 1. */
 \r
 __arm void vUSB_ISR( void )\r
 {\r
-portBASE_TYPE xTaskWokenByPost = pdFALSE; \r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 static volatile unsigned portLONG ulNextMessage = 0;\r
 xISRStatus *pxMessage;\r
 unsigned portLONG ulTemp, ulRxBytes;\r
@@ -595,7 +595,7 @@ unsigned portLONG ulTemp, ulRxBytes;
        cleared separately as it does not appear in the mask register. */\r
        AT91C_BASE_UDP->UDP_ICR = AT91C_BASE_UDP->UDP_IMR | AT91C_UDP_ENDBUSRES;\r
        \r
-       /* If there are bytes in the FIFO then we have to retrieve them here.  \r
+       /* If there are bytes in the FIFO then we have to retrieve them here.\r
        Ideally this would be done at the task level.  However we need to clear the\r
        RXSETUP interrupt before leaving the ISR, and this may cause the data in\r
        the FIFO to be overwritten.  Also the DIR bit has to be changed before the\r
@@ -606,7 +606,7 @@ unsigned portLONG ulTemp, ulRxBytes;
        ulRxBytes = ulTemp >> 16;\r
        ulRxBytes &= usbRX_COUNT_MASK;\r
        \r
-       /* With this minimal implementation we are only interested in receiving \r
+       /* With this minimal implementation we are only interested in receiving\r
        setup bytes on the control end point. */\r
        if( ( ulRxBytes > 0 ) && ( ulTemp & AT91C_UDP_RXSETUP ) )\r
        {\r
@@ -635,11 +635,11 @@ unsigned portLONG ulTemp, ulRxBytes;
        /* The message now contains the entire state and optional data from\r
        the USB interrupt.  This can now be posted on the Rx queue ready for\r
        processing at the task level. */\r
-       xTaskWokenByPost = xQueueSendFromISR( xUSBInterruptQueue, &pxMessage, xTaskWokenByPost );\r
+       xQueueSendFromISR( xUSBInterruptQueue, &pxMessage, &xHigherPriorityTaskWoken );\r
 \r
        /* We may want to switch to the USB task, if this message has made\r
        it the highest priority task that is ready to execute. */\r
-       portEND_SWITCHING_ISR( xTaskWokenByPost );\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 \r
        /* Clear the AIC ready for the next interrupt. */               \r
        AT91C_BASE_AIC->AIC_EOICR = 0;\r
@@ -658,7 +658,7 @@ xISRStatus *pxMessage;
            vInitUSBInterface();\r
     portEXIT_CRITICAL();\r
 \r
-       /* Process interrupts as they arrive.   The ISR takes a snapshot of the \r
+       /* Process interrupts as they arrive.   The ISR takes a snapshot of the\r
        interrupt status then posts the information on this queue for processing\r
        at the task level.  This simple demo implementation only processes\r
        a few interrupt sources. */\r
@@ -825,7 +825,7 @@ static void prvProcessEndPoint0Interrupt( xISRStatus *pxMessage )
 {\r
        if( pxMessage->ulCSR0 & AT91C_UDP_RX_DATA_BK0 )\r
        {               \r
-               /* We only expect to receive zero length data here as ACK's. \r
+               /* We only expect to receive zero length data here as ACK's.\r
                Set the data pointer to the end of the current Tx packet to\r
                ensure we don't send out any more data. */      \r
                pxCharsForTx.ulNextCharIndex = pxCharsForTx.ulTotalDataLength;\r
@@ -910,9 +910,9 @@ static void prvProcessEndPoint0Interrupt( xISRStatus *pxMessage )
                        xRequest.usLength <<= 8;\r
                        xRequest.usLength |= pxMessage->ucFifoData[ usbLENGTH_LOW_BYTE ];\r
        \r
-                       /* Manipulate the ucRequestType and the ucRequest parameters to \r
-                       generate a zero based request selection.  This is just done to \r
-                       break up the requests into subsections for clarity.  The \r
+                       /* Manipulate the ucRequestType and the ucRequest parameters to\r
+                       generate a zero based request selection.  This is just done to\r
+                       break up the requests into subsections for clarity.  The\r
                        alternative would be to have more huge switch statement that would\r
                        be difficult to optimise. */\r
                        ucRequest = ( ( xRequest.ucReqType & 0x60 ) >> 3 );\r
@@ -1040,8 +1040,8 @@ unsigned portSHORT usStatus = 0;
 \r
            case usbSET_CONFIGURATION_REQUEST:\r
 \r
-                       /* Acknowledge the SET_CONFIGURATION, but (according to the manual) \r
-                       we cannot actually move to the configured state until we get a \r
+                       /* Acknowledge the SET_CONFIGURATION, but (according to the manual)\r
+                       we cannot actually move to the configured state until we get a\r
                        TXCOMP interrupt from this NULL packet.  Therefore we just remember the\r
                        config and set our state so we know we have received the go ahead. */                   \r
                        ucUSBConfig = ( unsigned portCHAR ) ( pxRequest->usValue & 0xff );\r
@@ -1109,7 +1109,7 @@ unsigned portSHORT usStatus = 0;
                        break;\r
 \r
            case usbGET_DESCRIPTOR_REQUEST:\r
-                       prvGetStandardInterfaceDescriptor( pxRequest ); \r
+                       prvGetStandardInterfaceDescriptor( pxRequest );\r
                        break;\r
 \r
                /* This minimal implementation does not respond to these. */\r
@@ -1130,7 +1130,7 @@ static void prvHandleStandardEndPointRequest( xUSB_REQUEST *pxRequest )
        {\r
                /* This minimal implementation does not expect to respond to these. */\r
            case usbGET_STATUS_REQUEST:\r
-           case usbCLEAR_FEATURE_REQUEST: \r
+           case usbCLEAR_FEATURE_REQUEST:\r
            case usbSET_FEATURE_REQUEST:\r
 \r
            default:                    \r
@@ -1164,7 +1164,7 @@ volatile unsigned portLONG ulTemp;
     /* Setup the PIO for the USB pull up resistor. */\r
     AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,AT91C_PIO_PA16);\r
 \r
-    /* Start without the pullup - this will get set at the end of this \r
+    /* Start without the pullup - this will get set at the end of this\r
        function. */\r
     AT91F_PIO_SetOutput( AT91C_BASE_PIOA, AT91C_PIO_PA16 );\r
 \r
@@ -1181,7 +1181,7 @@ volatile unsigned portLONG ulTemp;
        /* Enable the transceiver. */\r
        AT91C_UDP_TRANSCEIVER_ENABLE = 0;\r
 \r
-       /* Enable the USB interrupts - other interrupts get enabled as the \r
+       /* Enable the USB interrupts - other interrupts get enabled as the\r
        enumeration process progresses. */\r
        AT91F_AIC_ConfigureIt( AT91C_BASE_AIC, AT91C_ID_UDP, usbINTERRUPT_PRIORITY, AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, ( void (*)( void ) ) vUSBISREntry );\r
        AT91F_AIC_EnableIt( AT91C_BASE_AIC, AT91C_ID_UDP );\r
@@ -1201,7 +1201,7 @@ static void prvSendControlData( unsigned portCHAR *pucData, unsigned portSHORT u
        }\r
        else if( ( ulLengthToSend < ( unsigned portLONG ) usRequestedLength ) && lSendingDescriptor )\r
        {\r
-               /* We are sending a descriptor.  If the descriptor is an exact \r
+               /* We are sending a descriptor.  If the descriptor is an exact\r
                multiple of the FIFO length then it will have to be terminated\r
                with a NULL packet.  Set the state to indicate this if\r
                necessary. */\r
@@ -1218,12 +1218,12 @@ static void prvSendControlData( unsigned portCHAR *pucData, unsigned portSHORT u
        (if it is greater than 8 bytes in length). */\r
        memcpy( pxCharsForTx.ucTxBuffer, pucData, ulLengthToSend );\r
 \r
-       /* Reinitialise the buffer index so we start sending from the start of \r
+       /* Reinitialise the buffer index so we start sending from the start of\r
        the data. */\r
        pxCharsForTx.ulTotalDataLength = ulLengthToSend;\r
        pxCharsForTx.ulNextCharIndex = ( unsigned portLONG ) 0;\r
 \r
-       /* Send the first 8 bytes now.  The rest will get sent in response to \r
+       /* Send the first 8 bytes now.  The rest will get sent in response to\r
        TXCOMP interrupts. */\r
        prvSendNextSegment();\r
 }\r
@@ -1275,7 +1275,7 @@ volatile unsigned portLONG ulNextLength, ulStatus, ulLengthLeftToSend;
        }\r
        else\r
        {\r
-               /* There is no data to send.  If we were sending a descriptor and the \r
+               /* There is no data to send.  If we were sending a descriptor and the\r
                descriptor was an exact multiple of the max packet size then we need\r
                to send a null to terminate the transmission. */\r
                if( eDriverState == eSENDING_EVEN_DESCRIPTOR )\r
index 25092699d32a95a88b8c5fc5398f9c947d4f7fd2..47d0fd8f97b1d1070441d9157e20edffccec99b5 100644 (file)
@@ -218,7 +218,7 @@ __arm void vSerialISR( void )
 {\r
 unsigned portLONG ulStatus;\r
 signed portCHAR cChar;\r
-portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* What caused the interrupt? */\r
        ulStatus = serCOM0->US_CSR &= serCOM0->US_IMR;\r
@@ -227,7 +227,7 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;
        {\r
                /* The interrupt was caused by the THR becoming empty.  Are there any\r
                more characters to transmit? */\r
-               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                {\r
                        /* A character was retrieved from the queue so can be sent to the\r
                        THR now. */\r
@@ -246,12 +246,12 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;
                character from the RHR and place it in the queue or received \r
                characters. */\r
                cChar = serCOM0->US_RHR;\r
-               xTaskWokenByPost = xQueueSendFromISR( xRxedChars, &cChar, xTaskWokenByPost );\r
+               xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
        }\r
 \r
        /* If a task was woken by either a character being received or a character \r
        being transmitted then we may need to switch to another task. */\r
-       portEND_SWITCHING_ISR( ( xTaskWokenByPost || xTaskWokenByTx ) );\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 \r
        /* End the interrupt in the AIC. */\r
        AT91C_BASE_AIC->AIC_EOICR = 0;\r
index 8b9cfb3e5245445dc2a8bbadf032c0e5bdd3213c..3bcd0bc022315cf2f49ef250042761284e494254 100644 (file)
@@ -99,7 +99,7 @@ extern xQueueHandle xUSBInterruptQueue;
 \r
 void vUSB_ISR_Handler( void )\r
 {\r
-portBASE_TYPE xTaskWokenByPost = pdFALSE; \r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; \r
 static volatile unsigned portLONG ulNextMessage = 0;\r
 xISRStatus *pxMessage;\r
 unsigned portLONG ulTemp, ulRxBytes;\r
@@ -163,11 +163,11 @@ unsigned portLONG ulTemp, ulRxBytes;
        /* The message now contains the entire state and optional data from\r
        the USB interrupt.  This can now be posted on the Rx queue ready for\r
        processing at the task level. */\r
-       xTaskWokenByPost = xQueueSendFromISR( xUSBInterruptQueue, &pxMessage, xTaskWokenByPost );\r
+       xQueueSendFromISR( xUSBInterruptQueue, &pxMessage, &xHigherPriorityTaskWoken );\r
 \r
        /* We may want to switch to the USB task, if this message has made\r
        it the highest priority task that is ready to execute. */\r
-       if( xTaskWokenByPost )\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                portYIELD_FROM_ISR();\r
        }\r
index 8de7238d67ef96518b3ceeb2afc916ff04fb438b..6bf3c5e43af8e13a805157d8a5cf813e6032ebeb 100644 (file)
@@ -71,7 +71,7 @@ void vPassEMACSemaphore( xSemaphoreHandle xSemaphore )
 void vEMACISR_Handler( void )\r
 {\r
 volatile unsigned portLONG ulIntStatus, ulRxStatus;\r
-portBASE_TYPE xSwitchRequired = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        ulIntStatus = AT91C_BASE_EMAC->EMAC_ISR;\r
        ulRxStatus = AT91C_BASE_EMAC->EMAC_RSR;\r
@@ -80,7 +80,7 @@ portBASE_TYPE xSwitchRequired = pdFALSE;
        {\r
                /* A frame has been received, signal the uIP task so it can process\r
                the Rx descriptors. */\r
-               xSwitchRequired = xSemaphoreGiveFromISR( xEMACSemaphore, pdFALSE );\r
+               xSemaphoreGiveFromISR( xEMACSemaphore, &xHigherPriorityTaskWoken );\r
                AT91C_BASE_EMAC->EMAC_RSR = AT91C_EMAC_REC;\r
        }\r
 \r
@@ -88,7 +88,7 @@ portBASE_TYPE xSwitchRequired = pdFALSE;
        AT91C_BASE_AIC->AIC_EOICR = 0;\r
        \r
     /* Switch to the uIP task. */\r
-    if( xSwitchRequired )\r
+    if( xHigherPriorityTaskWoken )\r
     {\r
        /* If a task of higher priority than the interrupted task was\r
        unblocked by the ISR then this call will ensure that the \r
index 7e0d694d4dc465ddb4da2b05b4231324e3cdf52d..7e053e1718f8d09d3cd750cca9edd6b915145707 100644 (file)
@@ -136,7 +136,7 @@ void vUART_ISR_Wrapper( void )
 void vUART_ISR_Handler( void )\r
 {\r
 signed portCHAR cChar;\r
-portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByRx = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* What caused the interrupt? */\r
        switch( UART0_IIR & serINTERRUPT_SOURCE_MASK )\r
@@ -147,7 +147,7 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByRx = pdFALSE;
 \r
                case serSOURCE_THRE     :       /* The THRE is empty.  If there is another\r
                                                                character in the Tx queue, send it now. */\r
-                                                               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+                                                               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                                                                {\r
                                                                        UART0_THR = cChar;\r
                                                                }\r
@@ -164,17 +164,14 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByRx = pdFALSE;
                case serSOURCE_RX       :       /* A character was received.  Place it in \r
                                                                the queue of received characters. */\r
                                                                cChar = UART0_RBR;\r
-                                                               if( xQueueSendFromISR( xRxedChars, &cChar, ( portBASE_TYPE ) pdFALSE ) ) \r
-                                                               {\r
-                                                                       xTaskWokenByRx = pdTRUE;\r
-                                                               }\r
+                                                               xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
                                                                break;\r
 \r
                default                         :       /* There is nothing to do, leave the ISR. */\r
                                                                break;\r
        }\r
 \r
-       if( xTaskWokenByTx || xTaskWokenByRx )\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                portYIELD_FROM_ISR();\r
        }\r
index 7e3972f5df0d0da451023d42894a566d7ea17544..a4d8c25f41348cfb864699b2874894062dd14ecb 100644 (file)
@@ -257,7 +257,7 @@ signed portBASE_TYPE xReturn;
 __arm void vSerialISR( void )\r
 {\r
 signed portCHAR cChar;\r
-portBASE_TYPE xTaskWokenByRx = pdFALSE, xTaskWokenByTx = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* What caused the interrupt? */\r
        switch( U0IIR & serINTERRUPT_SOURCE_MASK )\r
@@ -268,7 +268,7 @@ portBASE_TYPE xTaskWokenByRx = pdFALSE, xTaskWokenByTx = pdFALSE;
 \r
                case serSOURCE_THRE     :       /* The THRE is empty.  If there is another\r
                                                                character in the Tx queue, send it now. */\r
-                                                               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+                                                               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                                                                {\r
                                                                        U0THR = cChar;\r
                                                                }\r
@@ -285,10 +285,7 @@ portBASE_TYPE xTaskWokenByRx = pdFALSE, xTaskWokenByTx = pdFALSE;
                case serSOURCE_RX       :       /* A character was received.  Place it in\r
                                                                the queue of received characters. */\r
                                                                cChar = U0RBR;\r
-                                                               if( xQueueSendFromISR( xRxedChars, &cChar, pdFALSE ) )\r
-                                                               {\r
-                                                                       xTaskWokenByRx = pdTRUE;\r
-                                                               }\r
+                                                               xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
                                                                break;\r
 \r
                default                         :       /* There is nothing to do, leave the ISR. */\r
@@ -297,7 +294,7 @@ portBASE_TYPE xTaskWokenByRx = pdFALSE, xTaskWokenByTx = pdFALSE;
 \r
        /* Exit the ISR.  If a task was woken by either a character being received\r
        or transmitted then a context switch will occur. */\r
-       portEND_SWITCHING_ISR( ( xTaskWokenByTx || xTaskWokenByRx ) );\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 \r
        /* Clear the ISR in the VIC. */\r
        VICVectAddr = serCLEAR_VIC_INTERRUPT;\r
index 739c540a73b5e03c2e337c657089913f47394eca..ece098ce73ac3156099a99e3faee2cf9f60b6452 100644 (file)
@@ -120,10 +120,9 @@ void vUART_ISR( void ) __task
 \r
        /* Now we can declare the local variables. */\r
        static signed portCHAR cChar;\r
-       static portBASE_TYPE xTaskWokenByRx, xTaskWokenByTx;\r
+       static portBASE_TYPE xHigherPriorityTaskWoken;\r
 \r
-       xTaskWokenByTx = pdFALSE;\r
-       xTaskWokenByRx = pdFALSE;\r
+       xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* What caused the interrupt? */\r
        switch( U0IIR & serINTERRUPT_SOURCE_MASK )\r
@@ -134,7 +133,7 @@ void vUART_ISR( void ) __task
 \r
                case serSOURCE_THRE     :       /* The THRE is empty.  If there is another\r
                                                                character in the Tx queue, send it now. */\r
-                                                               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+                                                               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                                                                {\r
                                                                        U0THR = cChar;\r
                                                                }\r
@@ -151,10 +150,7 @@ void vUART_ISR( void ) __task
                case serSOURCE_RX       :       /* A character was received.  Place it in \r
                                                                the queue of received characters. */\r
                                                                cChar = U0RBR;\r
-                                                               if( xQueueSendFromISR( xRxedChars, &cChar, pdFALSE ) )\r
-                                                               {\r
-                                                                       xTaskWokenByRx = pdTRUE;\r
-                                                               }\r
+                                                               xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
                                                                break;\r
 \r
                default                         :       /* There is nothing to do, leave the ISR. */\r
@@ -166,7 +162,7 @@ void vUART_ISR( void ) __task
 \r
        /* Exit the ISR.  If a task was woken by either a character being received\r
        or transmitted then a context switch will occur. */\r
-       portEXIT_SWITCHING_ISR( ( xTaskWokenByTx || xTaskWokenByRx ) );\r
+       portEXIT_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
index 6fc4bc001d23ac4199880bd543a9354a23468c48..fb07b17eb5b0e1e99556ee9b2b530eb1d4940992 100644 (file)
@@ -64,8 +64,11 @@ void vButtonHandler( void );
 void vButtonHandler( void )\r
 {\r
 extern xSemaphoreHandle xButtonSemaphore;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
-       if( xSemaphoreGiveFromISR( xButtonSemaphore, pdFALSE ) )\r
+       xSemaphoreGiveFromISR( xButtonSemaphore, &xHigherPriorityTaskWoken );\r
+\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                /* We have woken a task.  Calling "yield from ISR" here will ensure\r
                the interrupt returns to the woken task if it has a priority higher\r
index 3394ca5332a66da02f643334abd32775bdacd5a1..4694d92d3d807deeda62ec840129829cb82670dd 100644 (file)
@@ -13,14 +13,16 @@ extern xSemaphoreHandle xEMACSemaphore;
 \r
 void vEMAC_ISR_Handler( void )\r
 {\r
-portBASE_TYPE xSwitchRequired = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
     /* Clear the interrupt. */\r
     MAC_INTCLEAR = 0xffff;\r
     VICVectAddr = 0;\r
 \r
     /* Ensure the uIP task is not blocked as data has arrived. */\r
-    if( xSemaphoreGiveFromISR( xEMACSemaphore, pdFALSE ) )\r
+    xSemaphoreGiveFromISR( xEMACSemaphore, &xHigherPriorityTaskWoken );\r
+\r
+       if( xHigherPriorityTaskWoken )\r
     {\r
        /* Giving the semaphore woke a task. */\r
         portYIELD_FROM_ISR();\r
index 2dca1c3ba29f29aa1f612d7df818f36809156a51..c5ff7ac4f1cb3198485203c4ebbdf607e458e222 100644 (file)
@@ -13,12 +13,16 @@ extern xSemaphoreHandle xEMACSemaphore;
 \r
 void vEMAC_ISR_Handler( void )\r
 {\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
+\r
     /* Clear the interrupt. */\r
     IntClear = 0xffff;\r
     VICVectAddr = 0;\r
 \r
     /* Ensure the uIP task is not blocked as data has arrived. */\r
-    if( xSemaphoreGiveFromISR( xEMACSemaphore, pdFALSE ) )\r
+    xSemaphoreGiveFromISR( xEMACSemaphore, &xHigherPriorityTaskWoken );\r
+\r
+       if( xHigherPriorityTaskWoken )\r
     {\r
                /* If the uIP task was unblocked then calling "Yield from ISR" here\r
                will ensure the interrupt returns directly to the uIP task, if it\r
index eb8d66f1f069b2b5ebf18a5b9ae50e92ad929803..7fd7d675900acf1cc52007653684be987a081ede 100644 (file)
@@ -213,7 +213,7 @@ __arm void vSerialISR( void )
 {\r
 unsigned portSHORT usStatus;\r
 signed portCHAR cChar;\r
-portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* What caused the interrupt? */\r
        usStatus = UART_FlagStatus( UART0 );\r
@@ -222,7 +222,7 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;
        {\r
                /* The interrupt was caused by the THR becoming empty.  Are there any\r
                more characters to transmit? */\r
-               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                {\r
                        /* A character was retrieved from the queue so can be sent to the\r
                        THR now. */\r
@@ -241,12 +241,12 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;
                character from the RHR and place it in the queue of received\r
                characters. */\r
                cChar = UART0->RxBUFR;\r
-               xTaskWokenByPost = xQueueSendFromISR( xRxedChars, &cChar, xTaskWokenByPost );\r
+               xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
        }\r
 \r
        /* If a task was woken by either a character being received or a character\r
        being transmitted then we may need to switch to another task. */\r
-       portEND_SWITCHING_ISR( ( xTaskWokenByPost || xTaskWokenByTx ) );\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 \r
        /* End the interrupt in the EIC. */\r
        portCLEAR_EIC();\r
index 944b9ce970233194785f3b41b4cf5228dd405340..3e77a6a9b608d1d5648e4de8b5b0e22c24da814f 100644 (file)
@@ -77,7 +77,7 @@ void vConfigureQueues( xQueueHandle xQForRx, xQueueHandle xQForTx, portBASE_TYPE
 void vSerialISR( void )\r
 {\r
 signed portCHAR cChar;\r
-portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        do\r
        {\r
@@ -85,7 +85,7 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;
                {\r
                        /* The interrupt was caused by the THR becoming empty.  Are there any\r
                        more characters to transmit? */\r
-                       if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+                       if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                        {\r
                                /* A character was retrieved from the queue so can be sent to the\r
                                THR now. */\r
@@ -105,14 +105,14 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;
                        character from the RHR and place it in the queue of received\r
                        characters. */\r
                        cChar = UART0->DR;\r
-                       xTaskWokenByPost = xQueueSendFromISR( xRxedChars, &cChar, xTaskWokenByPost );\r
+                       xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
                        UART_ClearITPendingBit( UART0, UART_IT_Receive );\r
                }\r
        } while( UART0->MIS );\r
 \r
        /* If a task was woken by either a character being received or a character\r
        being transmitted then we may need to switch to another task. */\r
-       portEND_SWITCHING_ISR( ( xTaskWokenByPost || xTaskWokenByTx ) );\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 }\r
 \r
 \r
index 8f9f3c83f55bcbf6a6fae60dff4a3b8264e520c5..29548a8098b3f4406f66fe78a7c19cf5e72a3ee7 100644 (file)
@@ -235,7 +235,7 @@ void vSerialClose( xComPortHandle xPort )
 __arm void vSerialISR( void )\r
 {\r
 signed portCHAR cChar;\r
-portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        do\r
        {\r
@@ -243,7 +243,7 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;
                {\r
                        /* The interrupt was caused by the THR becoming empty.  Are there any\r
                        more characters to transmit? */\r
-                       if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+                       if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                        {\r
                                /* A character was retrieved from the queue so can be sent to the\r
                                THR now. */\r
@@ -263,14 +263,14 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;
                        character from the RHR and place it in the queue of received\r
                        characters. */\r
                        cChar = UART0->DR;\r
-                       xTaskWokenByPost = xQueueSendFromISR( xRxedChars, &cChar, xTaskWokenByPost );\r
+                       xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
                        UART_ClearITPendingBit( UART0, UART_IT_Receive );\r
                }\r
        } while( UART0->MIS );\r
 \r
        /* If a task was woken by either a character being received or a character\r
        being transmitted then we may need to switch to another task. */\r
-       portEND_SWITCHING_ISR( ( xTaskWokenByPost || xTaskWokenByTx ) );\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 }\r
 \r
 \r
index 8279e352b780585845202fa156e0694eef419266..c6834ac3dbd8b67e86c5c854020029df59cbf3c8 100644 (file)
@@ -415,16 +415,16 @@ ethernetif_init(struct netif *netif)
 \r
 void ENET_IRQHandler(void)\r
 {\r
-portBASE_TYPE xSwitchRequired;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* Give the semaphore in case the lwIP task needs waking. */\r
-       xSwitchRequired = xSemaphoreGiveFromISR( s_xSemaphore, pdFALSE );\r
+       xSemaphoreGiveFromISR( s_xSemaphore, &xHigherPriorityTaskWoken );\r
        \r
        /* Clear the interrupt. */\r
        ENET_DMA->ISR = DMI_RX_CURRENT_DONE;\r
        \r
        /* Switch tasks if necessary. */        \r
-       portEND_SWITCHING_ISR( xSwitchRequired );\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
index 47abd1a8324418b065da03da8f192cdc0ddd0368..6df42f0c4d7042dcf23366d525df3666418a69ba 100644 (file)
@@ -270,7 +270,7 @@ void vSerialClose( xComPortHandle xPort )
 void UART1_IRQHandler( void )\r
 {\r
 signed portCHAR cChar;\r
-portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        while( UART1->RIS &     mainRXRIS )\r
        {\r
@@ -278,7 +278,7 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;
                character from the DR and place it in the queue of received\r
                characters. */\r
                cChar = UART1->DR;\r
-               xTaskWokenByPost = xQueueSendFromISR( xRxedChars, &cChar, xTaskWokenByPost );\r
+               xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
        }       \r
        \r
        if( UART1->RIS & mainTXRIS )\r
@@ -287,7 +287,7 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;
                {\r
                        /* This interrupt was caused by space becoming available on the Tx\r
                        FIFO, wake any task that is waiting to post (if any). */\r
-                       xTaskWokenByTx = xSemaphoreGiveFromISR( xTxFIFOSemaphore, xTaskWokenByTx );\r
+                       xSemaphoreGiveFromISR( xTxFIFOSemaphore, &xHigherPriorityTaskWoken );\r
                        lTaskWaiting = pdFALSE;\r
                }\r
                \r
@@ -296,7 +296,7 @@ portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;
 \r
        /* If a task was woken by either a character being received or a character\r
        being transmitted then we may need to switch to another task. */\r
-       portEND_SWITCHING_ISR( ( xTaskWokenByPost || xTaskWokenByTx ) );\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 }\r
 \r
 \r
index 2a65be3ddcbb1af1979614b09ef5b7626086181d..8921c7f42324c469a18d8446ef000dc77a071750 100644 (file)
@@ -297,16 +297,16 @@ static unsigned portCHAR *pcTxData;
 \r
 void ENET_IRQHandler(void)\r
 {\r
-portBASE_TYPE xSwitchRequired;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* Give the semaphore in case the uIP task needs waking. */\r
-       xSwitchRequired = xSemaphoreGiveFromISR( xSemaphore, pdFALSE );\r
+       xSemaphoreGiveFromISR( xSemaphore, &xHigherPriorityTaskWoken );\r
        \r
        /* Clear the interrupt. */\r
        ENET_DMA->ISR = uipDMI_RX_CURRENT_DONE;\r
        \r
        /* Switch tasks if necessary. */        \r
-       portEND_SWITCHING_ISR( xSwitchRequired );\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
index 410ecbabd83dc40d764f6125ca02999d8876e709..c8e602098b344d5ee09f2c3e4ed5872ccdbb4e68 100644 (file)
@@ -25,7 +25,7 @@
 "C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\bin\cspybat" "C:\Devtools\IAR Systems\Embedded Workbench 4.0\avr32\bin\avr32proc.dll" "C:\Devtools\IAR Systems\Embedded Workbench 4.0\avr32\bin\avr32jtagicemkII.dll"  %1 --plugin "C:\Devtools\IAR Systems\Embedded Workbench 4.0\avr32\bin\<libsupport_plugin>" --backend -B "--core" "avr32a" "--avr32_simd_instructions" "disabled" "--avr32_dsp_instructions" "enabled" "--avr32_rmw_instructions" "enabled" "-p" "C:\Devtools\IAR Systems\Embedded Workbench 4.0\avr32\config\iouc3a0512.ddf" "-d" "jtagicemkII" "--drv_communication" "USB" "--jtagice_clock" "100000" \r
 \r
 \r
-@REM loaded plugins:\r
+@REM Loaded plugins:\r
 @REM    avr32LibSupport.dll\r
 @REM    C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\plugins\CodeCoverage\CodeCoverage.dll\r
 @REM    C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\plugins\Profiling\Profiling.dll\r
index c9424b55d8943cf4da6c85efda700e0a0b846b1e..2f1b1194dcc2d75a1a868d5332654518c69ff805 100644 (file)
@@ -89,7 +89,7 @@ static portBASE_TYPE prvUSART_ISR_NonNakedBehaviour( void )
 {\r
        /* Now we can declare the local variables. */\r
        signed portCHAR     cChar;\r
-       portBASE_TYPE     xTaskWokenByTx = pdFALSE, xTaskWokenByRx = pdFALSE;\r
+       portBASE_TYPE     xHigherPriorityTaskWoken = pdFALSE;\r
        unsigned portLONG     ulStatus;\r
        volatile avr32_usart_t  *usart = serialPORT_USART;\r
        portBASE_TYPE retstatus;\r
@@ -104,7 +104,7 @@ static portBASE_TYPE prvUSART_ISR_NonNakedBehaviour( void )
                Because FreeRTOS is not supposed to run with nested interrupts, put all OS\r
                calls in a critical section . */\r
                portENTER_CRITICAL();\r
-                       retstatus = xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx );\r
+                       retstatus = xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken );\r
                portEXIT_CRITICAL();\r
 \r
                if (retstatus == pdTRUE)\r
@@ -128,18 +128,13 @@ static portBASE_TYPE prvUSART_ISR_NonNakedBehaviour( void )
                /* Because FreeRTOS is not supposed to run with nested interrupts, put all OS\r
                calls in a critical section . */\r
                portENTER_CRITICAL();\r
-                       retstatus = xQueueSendFromISR(xRxedChars, &cChar, pdFALSE);\r
+                       retstatus = xQueueSendFromISR(xRxedChars, &cChar, &xHigherPriorityTaskWoken);\r
                portEXIT_CRITICAL();\r
-\r
-               if( retstatus )\r
-               {\r
-                       xTaskWokenByRx = pdTRUE;\r
-               }\r
        }\r
 \r
        /* The return value will be used by portEXIT_SWITCHING_ISR() to know if it\r
        should perform a vTaskSwitchContext(). */\r
-       return ( xTaskWokenByTx || xTaskWokenByRx );\r
+       return ( xHigherPriorityTaskWoken );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
index b5aaf9d54c99a7b150b983616b8b38ecef713869..e6e5d8e144889564e5a547ff747b5016cb1b68e9 100644 (file)
@@ -181,13 +181,16 @@ unsigned portCHAR ucByte;
 __interrupt void SIG_UART_RECV( void )\r
 {\r
 signed portCHAR cChar;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* Get the character and post it on the queue of Rxed characters.\r
        If the post causes a task to wake force a context switch as the woken task\r
        may have a higher priority than the task we have interrupted. */\r
        cChar = UDR;\r
 \r
-       if( xQueueSendFromISR( xRxedChars, &cChar, pdFALSE ) )\r
+       xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
+\r
+       if( xHigherPriorityTaskWoken != pdFALSE )\r
        {\r
                taskYIELD();\r
        }\r
index 76e723534baeb49173f36a9613ecd9ee987680c5..20b013caaf7d60efab0c2ea5431e8c83fe8bc6c1 100644 (file)
@@ -188,7 +188,7 @@ portSHORT main( void )
        vStartRegTestTasks();\r
        \r
        /* Create the tasks defined within this file. */\r
-       xTaskCreate( vErrorChecks, "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );\r
+       xTaskCreate( vErrorChecks, ( signed portCHAR * ) "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );\r
 \r
        /* Create the co-routines that flash the LED's. */\r
        vStartFlashCoRoutines( mainNUM_FLASH_COROUTINES );\r
index 24f33fc30e4fa94e1fea95b6791e10de4b41e529..268d99161d0dbeffd885e2054e8f29f5c2a96c0b 100644 (file)
@@ -210,13 +210,16 @@ unsigned portCHAR ucByte;
 SIGNAL( SIG_UART_RECV )\r
 {\r
 signed portCHAR cChar;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* Get the character and post it on the queue of Rxed characters.\r
        If the post causes a task to wake force a context switch as the woken task\r
        may have a higher priority than the task we have interrupted. */\r
        cChar = UDR;\r
 \r
-       if( xQueueSendFromISR( xRxedChars, &cChar, pdFALSE ) )\r
+       xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
+\r
+       if( xHigherPriorityTaskWoken != pdFALSE )\r
        {\r
                taskYIELD();\r
        }\r
index 5587f16d32756ad660e8e6193067a13c06963aec..0c9a4da1faf882d9c2feb523cb432d237219f603 100644 (file)
@@ -124,7 +124,7 @@ unsigned portCHAR ucOriginalSFRPage;
 void vSerialISR( void ) interrupt 4\r
 {\r
 portCHAR cChar;\r
-portBASE_TYPE xTaskWokenByRx = pdFALSE, xTaskWokenByTx = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* 8051 port interrupt routines MUST be placed within a critical section\r
        if taskYIELD() is used within the ISR! */\r
@@ -134,20 +134,17 @@ portBASE_TYPE xTaskWokenByRx = pdFALSE, xTaskWokenByTx = pdFALSE;
                if( RI ) \r
                {\r
                        /* Get the character and post it on the queue of Rxed characters.\r
-                       If the post causes a task to wake force a context switch as the woken task\r
-                       may have a higher priority than the task we have interrupted. */\r
+                       If the post causes a task to wake force a context switch if the woken task\r
+                       has a higher priority than the task we have interrupted. */\r
                        cChar = SBUF;\r
                        RI = 0;\r
 \r
-                       if( xQueueSendFromISR( xRxedChars, &cChar, pdFALSE ) )\r
-                       {\r
-                               xTaskWokenByRx = ( portBASE_TYPE ) pdTRUE;\r
-                       }\r
+                       xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
                }\r
 \r
                if( TI ) \r
                {\r
-                       if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == ( portBASE_TYPE ) pdTRUE )\r
+                       if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == ( portBASE_TYPE ) pdTRUE )\r
                        {\r
                                /* Send the next character queued for Tx. */\r
                                SBUF = cChar;\r
@@ -161,7 +158,7 @@ portBASE_TYPE xTaskWokenByRx = pdFALSE, xTaskWokenByTx = pdFALSE;
                        TI = 0;\r
                }\r
        \r
-               if( xTaskWokenByRx || xTaskWokenByTx )\r
+               if( xHigherPriorityTaskWoken )\r
                {\r
                        portYIELD();\r
                }\r
index 80fee2837c41ef511f0ed1aaf2e4ceeac4730382..948bf1b51d1adebd97073e2104093a1e44da9645 100644 (file)
@@ -435,7 +435,7 @@ static portBASE_TYPE xComPortISR( xComPort * const pxPort )
 {\r
 unsigned portSHORT usStatusRegister;\r
 portCHAR cChar;\r
-portBASE_TYPE xTaskWokenByPost = pdFALSE, xAnotherTaskWokenByPost = pdFALSE, xTaskWokenByTx = pdFALSE, xContinue = pdTRUE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE, xContinue = pdTRUE;\r
 \r
        /* NOTE:  THIS IS NOT AN EFFICIENT ISR AS IT IS DESIGNED SOLELY TO TEST\r
        THE SCHEDULER FUNCTIONALITY.  REAL APPLICATIONS SHOULD NOT USE THIS\r
@@ -450,10 +450,10 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE, xAnotherTaskWokenByPost = pdFALSE, xTa
                if( usStatusRegister & serRX_READY )\r
                {\r
                        cChar = ( portCHAR ) portINPUT_WORD( pxPort->usRxReg );\r
-                       xTaskWokenByPost = xQueueSendFromISR( pxPort->xRxedChars, &cChar, xTaskWokenByPost );\r
+                       xQueueSendFromISR( pxPort->xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
 \r
                        /* Also release the semaphore - this does nothing interesting and is just a test. */\r
-                       xAnotherTaskWokenByPost = xSemaphoreGiveFromISR( pxPort->xTestSem, xAnotherTaskWokenByPost );\r
+                       xSemaphoreGiveFromISR( pxPort->xTestSem, &xHigherPriorityTaskWoken );\r
 \r
                        /* We have performed an action this cycle - there may be other to perform. */\r
                        xContinue = pdTRUE;\r
@@ -461,7 +461,7 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE, xAnotherTaskWokenByPost = pdFALSE, xTa
 \r
                if( pxPort->sTxInterruptOn && ( usStatusRegister & serTX_EMPTY ) )\r
                {\r
-                       if( xQueueReceiveFromISR( pxPort->xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+                       if( xQueueReceiveFromISR( pxPort->xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                        {\r
                                portOUTPUT_WORD( pxPort->usTxReg, ( unsigned portSHORT ) cChar );\r
 \r
@@ -481,17 +481,11 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE, xAnotherTaskWokenByPost = pdFALSE, xTa
        /* If posting to the queue woke a task that was blocked on the queue we may\r
        want to switch to the woken task - depending on its priority relative to\r
        the task interrupted by this ISR. */\r
-       if( xTaskWokenByPost || xAnotherTaskWokenByPost || xTaskWokenByTx)\r
-       {\r
-               return pdTRUE;\r
-       }\r
-       else\r
-       {\r
-               return pdFALSE;\r
-       }\r
+       return xHigherPriorityTaskWoken;\r
 }\r
 \r
 \r
 \r
 \r
 \r
+\r
index a4e0d326935fb61a2f1a6d340ac50feaf2702521..21cd3a1ec88dd64b98d276c20dc2224fd34a3db7 100644 (file)
@@ -204,14 +204,16 @@ void vCOM_1_Rx_ISR( void )
        /* As this is a switching ISR the local variables must be declared as \r
        static. */\r
        static portCHAR cRxByte;\r
-       static portBASE_TYPE xTaskWokenByPost;\r
+       static portBASE_TYPE xHigherPriorityTaskWoken;\r
+\r
+               xHigherPriorityTaskWoken = pdFALSE;\r
 \r
                /* Get the character. */\r
                cRxByte = RDR1;\r
 \r
                /* Post the character onto the queue of received characters - noting\r
                whether or not this wakes a task. */\r
-               xTaskWokenByPost = xQueueSendFromISR( xRxedChars, &cRxByte, pdFALSE );          \r
+               xQueueSendFromISR( xRxedChars, &cRxByte, &xHigherPriorityTaskWoken );\r
 \r
                /* Clear the interrupt. */\r
                SSR1 &= ~serRX_INTERRUPT;\r
@@ -219,7 +221,7 @@ void vCOM_1_Rx_ISR( void )
        /* This must be the last line in the function.  We pass cTaskWokenByPost so \r
        a context switch will occur if the received character woke a task that has\r
        a priority higher than the task we interrupted. */\r
-       portEXIT_SWITCHING_ISR( xTaskWokenByPost );\r
+       portEXIT_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
index 6649211842717d3fa604ed4558ffdf1b2f5d0291..31ea8f341e4456e37b9b65d95a08662cfc6fde86 100644 (file)
@@ -146,7 +146,7 @@ void vSerialClose( xComPortHandle xPort )
 __interrupt void vCOM0_ISR( void )\r
 {\r
 volatile unsigned portCHAR ucByte, ucStatus;\r
-portBASE_TYPE xTaskWokenByPost = pdFALSE, xTaskWokenByTx = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* What caused the interrupt? */\r
        ucStatus = SCI0SR1;\r
@@ -166,13 +166,13 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE, xTaskWokenByTx = pdFALSE;
 \r
                /* Post the character onto the queue of received characters - noting\r
                whether or not this wakes a task. */\r
-               xTaskWokenByPost = xQueueSendFromISR( xRxedChars, ( void * ) &ucByte, pdFALSE );                \r
+               xQueueSendFromISR( xRxedChars, ( void * ) &ucByte, &xHigherPriorityTaskWoken );\r
        }\r
        \r
        if( ( ucStatus & serTX_INTERRUPT ) && ( SCI0CR2_SCTIE ) )\r
        {       \r
                /* The interrupt was caused by a character being transmitted. */\r
-               if( xQueueReceiveFromISR( xCharsForTx, ( void * ) &ucByte, &xTaskWokenByTx ) == pdTRUE )\r
+               if( xQueueReceiveFromISR( xCharsForTx, ( void * ) &ucByte, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                {\r
                        /* Clear the SCRF bit. */\r
                        SCI0DRL = ucByte;\r
@@ -184,7 +184,7 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE, xTaskWokenByTx = pdFALSE;
                }\r
        }\r
 \r
-       if( ( xTaskWokenByPost ) || ( xTaskWokenByTx ) )\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                portYIELD();\r
        }\r
index e11f2945e33794f8f4f671b0c09a6181a1f7f67e..7d91b1f02881285d1c711e64ffdea3a321c1b09d 100644 (file)
@@ -355,6 +355,9 @@ unsigned portBASE_TYPE uxExpected = 1, uxReceived;
        void interrupt vButtonPush( void )\r
        {\r
                static unsigned portBASE_TYPE uxValToSend = 0;\r
+               static unsigned portLONG xHigherPriorityTaskWoken;\r
+\r
+               xHigherPriorityTaskWoken = pdFALSE;\r
                \r
                /* Send an incrementing value to the button push task each run. */\r
                uxValToSend++;          \r
@@ -366,7 +369,9 @@ unsigned portBASE_TYPE uxExpected = 1, uxReceived;
                blocked waiting for the data.  As the button push task is high priority\r
                it will wake and a context switch should be performed before leaving\r
                the ISR. */\r
-               if( xQueueSendFromISR( xButtonQueue, &uxValToSend, pdFALSE ) )\r
+               xQueueSendFromISR( xButtonQueue, &uxValToSend, &xHigherPriorityTaskWoken );\r
+\r
+               if( xHigherPriorityTaskWoken )\r
                {\r
                        /* NOTE: This macro can only be used if there are no local\r
                        variables defined.  This function uses a static variable so it's\r
index 93bc3b5d20a14820891146b666d93ba1f8fb1a81..73078a107c3d5bacd1c6f8de3095afa736a04bb2 100644 (file)
@@ -103,7 +103,7 @@ void ATTR_INT ATTR_NEAR vCOM_ISR( void );
 void vCOM_ISR( void )\r
 {\r
 volatile unsigned portCHAR ucByte, ucStatus;\r
-portBASE_TYPE xTaskWokenByPost = pdFALSE, xTaskWokenByTx = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* What caused the interrupt? */\r
        ucStatus = SCISR1;\r
@@ -123,13 +123,13 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE, xTaskWokenByTx = pdFALSE;
 \r
                /* Post the character onto the queue of received characters - noting\r
                whether or not this wakes a task. */\r
-               xTaskWokenByPost = xQueueSendFromISR( xRxedChars, ( void * ) &ucByte, pdFALSE );\r
+               xQueueSendFromISR( xRxedChars, ( void * ) &ucByte, &xHigherPriorityTaskWoken );\r
        }\r
        \r
        if( ( ucStatus & serTX_INTERRUPT ) && ( SCICR2 & 0x80 ) )\r
        {       \r
                /* The interrupt was caused by a character being transmitted. */\r
-               if( xQueueReceiveFromISR( xCharsForTx, ( void * ) &ucByte, &xTaskWokenByTx ) == pdTRUE )\r
+               if( xQueueReceiveFromISR( xCharsForTx, ( void * ) &ucByte, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                {\r
                        /* Clear the SCRF bit. */\r
                        SCIDRL = ucByte;\r
@@ -141,10 +141,9 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE, xTaskWokenByTx = pdFALSE;
                }\r
        }\r
 \r
-       if( ( xTaskWokenByPost ) || ( xTaskWokenByTx ) )\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                portYIELD();\r
        }\r
-\r
 }\r
 \r
index 875a21cea6422aadaa335797a0730eb1e625e18e..72d60e173c1593cef8a79c93692ef0ac17ae7133 100644 (file)
@@ -176,12 +176,15 @@ signed portBASE_TYPE xReturn;
  __interrupt void UART2_RxISR (void)\r
 {\r
        signed portCHAR cChar;\r
+       portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* Get the character from the UART and post it on the queue of Rxed \r
        characters. */\r
        cChar = RDR02;\r
 \r
-       if( xQueueSendFromISR( xRxedChars, &cChar, pdFALSE ) )\r
+       xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
+\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                /*If the post causes a task to wake force a context switch \r
                as the woken task may have a higher priority than the task we have \r
index 6670a1f763d87cda0862b63b453734e0f6a0466c..1af945a9d8f4f8d0a581cd7fe67b16c6d9a66403 100644 (file)
@@ -209,7 +209,8 @@ static void vUART5Task( void *pvParameters )
 __interrupt void UART5_RxISR( void )\r
 {\r
 unsigned portCHAR ch;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        ch = RDR05;\r
-       xQueueSendFromISR( xQueue, &ch, pdFALSE );\r
+       xQueueSendFromISR( xQueue, &ch, &xHigherPriorityTaskWoken );\r
 }\r
index 1cbcfbd2c5f5f19033e9bd26a7cd9ddb83f07cd6..511360c58917a9a73bf4ab2021e7ee918a0f2e3b 100644 (file)
@@ -184,12 +184,15 @@ signed portBASE_TYPE      xReturn;
 __interrupt void UART0_RxISR( void )\r
 {\r
 volatile signed portCHAR       cChar;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* Get the character from the UART and post it on the queue of Rxed \r
        characters. */\r
        cChar = RDR0;\r
 \r
-       if( xQueueSendFromISR( xRxedChars, ( const void *const ) &cChar, (signed portBASE_TYPE) pdFALSE ) )\r
+       xQueueSendFromISR( xRxedChars, ( const void *const ) &cChar, &xHigherPriorityTaskWoken );\r
+\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                /*If the post causes a task to wake force a context switch \r
                as the woken task may have a higher priority than the task we have \r
index c0e77027f18d78fe060c8491c25be97153ddc2bf..db6664ac50c928676a34e5ed794fdc8ad54b7f33 100644 (file)
@@ -220,7 +220,8 @@ static void vUART0Task( void *pvParameters )
 __interrupt void UART0_TraceRxISR( void )\r
 {\r
 unsigned portCHAR ch;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        ch = RDR0;\r
-       xQueueSendFromISR( xQueue, &ch, pdFALSE );\r
+       xQueueSendFromISR( xQueue, &ch, &xHigherPriorityTaskWoken );\r
 }\r
index 1c2e31e512066cc73d35f21c32b787ed54019f1a..85593c9767d09387a1ffb3368e2800a688c4a53b 100644 (file)
@@ -270,7 +270,7 @@ void
 prvSerialISR( void )\r
 {\r
     static signed portCHAR cChar;\r
-    static portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByRx = pdFALSE;\r
+    static portBASE_TYPE xHigherPriorityTaskWoken;\r
 \r
     /* We have to remvoe the effect of the GCC. Please note that the\r
      * __attribute__ ((interrupt_handler)) does not work here because we\r
@@ -285,12 +285,13 @@ prvSerialISR( void )
      * variable declarations.\r
      */\r
     portENTER_SWITCHING_ISR();\r
+       xHigherPriorityTaskWoken = pdFALSE;\r
 \r
     /* Ready to send a character from the buffer. */\r
     if( MCF_UART_USR0 & MCF_UART_USR_TXRDY )\r
     {\r
         /* Transmit buffer is ready. Test if there are characters available. */\r
-        if( xQueueReceiveFromISR( xComPortIF[ 0 ].xTXChars, &cChar, &xTaskWokenByTx ) ==\r
+        if( xQueueReceiveFromISR( xComPortIF[ 0 ].xTXChars, &cChar, &xHigherPriorityTaskWoken ) ==\r
             pdTRUE )\r
         {\r
             /* A character was retrieved from the queue so can be sent. */\r
@@ -305,11 +306,10 @@ prvSerialISR( void )
     if( MCF_UART_USR0 & MCF_UART_USR_RXRDY )\r
     {\r
         cChar = MCF_UART_URB0;\r
-        xTaskWokenByRx =\r
-            xQueueSendFromISR( xComPortIF[ 0].xRXChars, &cChar, xTaskWokenByRx );\r
+        xQueueSendFromISR( xComPortIF[ 0].xRXChars, &cChar, &xHigherPriorityTaskWoken );\r
     }\r
     /* Exit the ISR.  If a task was woken by either a character being\r
      * or transmitted then a context switch will occur.\r
      */\r
-    portEXIT_SWITCHING_ISR( ( xTaskWokenByTx || xTaskWokenByRx ) );\r
+    portEXIT_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 }\r
index 1560ffed7ccbe327b3297bd44ca33a9a1fee0bf6..11045951ae98c2605c8c9c253f00b7b5dfb1a1c9 100644 (file)
@@ -178,7 +178,7 @@ void vSerialClose( xComPortHandle xPort )
 void vSerialISR( void *pvBaseAddress )\r
 {\r
 unsigned portLONG ulISRStatus;\r
-portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByRx = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 portCHAR cChar;\r
 \r
        /* Determine the cause of the interrupt. */\r
@@ -190,7 +190,7 @@ portCHAR cChar;
                characters.  This might wake a task that was blocked waiting for \r
                data. */\r
                cChar = ( portCHAR )XIo_In32( XPAR_RS232_UART_BASEADDR + XUL_RX_FIFO_OFFSET );\r
-               xTaskWokenByRx = xQueueSendFromISR( xRxedChars, &cChar, xTaskWokenByRx );\r
+               xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
     }\r
 \r
     if( ( ulISRStatus & XUL_SR_TX_FIFO_EMPTY ) != 0 )\r
@@ -198,14 +198,14 @@ portCHAR cChar;
                /* There is space in the FIFO - if there are any characters queue for\r
                transmission they can be send to the UART now.  This might unblock a\r
                task that was waiting for space to become available on the Tx queue. */\r
-               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                {\r
                        XIo_Out32( XPAR_RS232_UART_BASEADDR + XUL_TX_FIFO_OFFSET, cChar );\r
                }\r
     }\r
 \r
        /* If we woke any tasks we may require a context switch. */\r
-       if( xTaskWokenByTx || xTaskWokenByRx )\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                portYIELD_FROM_ISR();\r
        }\r
index 34b63398411ea6458f579da0a67a6b3fcb17a298..798b237a29cf6e1a6e9ade697a9078b8d5229d44 100644 (file)
@@ -204,6 +204,7 @@ void vSerialClose( xComPortHandle xPort )
 void vSerialRxISR( void )\r
 {\r
 portCHAR cChar;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* Get the character and post it on the queue of Rxed characters.\r
        If the post causes a task to wake force a context switch as the woken task\r
@@ -217,7 +218,9 @@ portCHAR cChar;
                RCSTAbits.CREN = serCONTINUOUS_RX;      \r
        }\r
 \r
-       if( xQueueSendFromISR( xRxedChars, ( const void * ) &cChar, pdFALSE ) )\r
+       xQueueSendFromISR( xRxedChars, ( const void * ) &cChar, &xHigherPriorityTaskWoken );\r
+\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                taskYIELD();\r
        }\r
index 4d0edf677bf5a4780e4b1e550736246e635138de..5e3bb03a9e7422355b777aaa743361e9797e30ab 100644 (file)
@@ -83,6 +83,7 @@ Changes from V3.0.1
                 * because this SFR will be restored before exiting the ISR.\r
                 */\r
                extern portCHAR                 cChar;\r
+               extern portBASE_TYPE xHigherPriorityTaskWoken;\r
                #pragma locate cChar    &PRODL\r
 \r
                /*\r
@@ -112,7 +113,10 @@ Changes from V3.0.1
                                bCREN = serCONTINUOUS_RX;       \r
                        }\r
 \r
-                       if( xQueueSendFromISR( xRxedChars, ( const void * ) &cChar, pdFALSE ) )\r
+                       xHigherPriorityTaskWoken = pdFALSE;\r
+                       xQueueSendFromISR( xRxedChars, ( const void * ) &cChar, &xHigherPriorityTaskWoken );\r
+\r
+                       if( xHigherPriorityTaskWoken )\r
                        {\r
                                uxSwitchRequested = pdTRUE;\r
                        }\r
index 9cba729018212813d23740b007690d600677f57f..1546982ad0c9162a13515eca816ea835dfab70cc 100644 (file)
@@ -80,6 +80,7 @@ Changes from V3.0.1
 /* Queues to interface between comms API and interrupt routines. */\r
 xQueueHandle xRxedChars; \r
 xQueueHandle xCharsForTx;\r
+portBASE_TYPE xHigherPriorityTaskWoken;\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
index fa2889b9b572306cc5e98031058b7dafdccbe2cd..0924485de9f285d9a02e7ae0cc5bb816d7df0d9a 100644 (file)
@@ -197,7 +197,7 @@ void vSerialClose( xComPortHandle xPort )
 void __attribute__((__interrupt__, auto_psv)) _U2RXInterrupt( void )\r
 {\r
 portCHAR cChar;\r
-portBASE_TYPE xYieldRequired = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* Get the character and post it on the queue of Rxed characters.\r
        If the post causes a task to wake force a context switch as the woken task\r
@@ -206,10 +206,10 @@ portBASE_TYPE xYieldRequired = pdFALSE;
        while( U2STAbits.URXDA )\r
        {\r
                cChar = U2RXREG;\r
-               xYieldRequired = xQueueSendFromISR( xRxedChars, &cChar, xYieldRequired );\r
+               xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
        }\r
 \r
-       if( xYieldRequired != pdFALSE )\r
+       if( xHigherPriorityTaskWoken != pdFALSE )\r
        {\r
                taskYIELD();\r
        }\r
index 449ab9afd6df9825691c060a2e26c96349fe448d..4fd9f0bb52cbb0c201798923d6c97b3bdc89e71d 100644 (file)
@@ -153,9 +153,9 @@ void vU2InterruptHandler( void )
 {\r
 /* Declared static to minimise stack use. */\r
 static portCHAR cChar;\r
-static portBASE_TYPE xYieldRequired;\r
+static portBASE_TYPE xHigherPriorityTaskWoken;\r
 \r
-       xYieldRequired = pdFALSE;\r
+       xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* Are any Rx interrupts pending? */\r
        if( mU2RXGetIntFlag() )\r
@@ -165,7 +165,7 @@ static portBASE_TYPE xYieldRequired;
                        /* Retrieve the received character and place it in the queue of\r
                        received characters. */\r
                        cChar = U2RXREG;\r
-                       xYieldRequired = xQueueSendFromISR( xRxedChars, &cChar, xYieldRequired );\r
+                       xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
                }\r
                mU2RXClearIntFlag();\r
        }\r
@@ -175,7 +175,7 @@ static portBASE_TYPE xYieldRequired;
        {\r
                while( !( U2STAbits.UTXBF ) )\r
                {\r
-                       if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xYieldRequired ) == pdTRUE )\r
+                       if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                        {\r
                                /* Send the next character queued for Tx. */\r
                                U2TXREG = cChar;\r
@@ -192,7 +192,7 @@ static portBASE_TYPE xYieldRequired;
        }\r
 \r
        /* If sending or receiving necessitates a context switch, then switch now. */\r
-       portEND_SWITCHING_ISR( xYieldRequired );\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 }\r
 \r
 \r
index a610822d718fbc3d45cc19a47cec33d10ee6603b..e343284d900901e4959c9ac92691c781a40d94bd 100644 (file)
@@ -184,7 +184,7 @@ void vSerialClose( xComPortHandle xPort )
 static void vSerialISR( XUartLite *pxUART )
 {
 unsigned portLONG ulISRStatus;
-portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByRx = pdFALSE, lDidSomething;
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE, lDidSomething;
 portCHAR cChar;
 
        do
@@ -199,7 +199,7 @@ portCHAR cChar;
                        characters.  This might wake a task that was blocked waiting for 
                        data. */
                        cChar = ( portCHAR ) XIo_In32( XPAR_RS232_UART_BASEADDR + XUL_RX_FIFO_OFFSET );
-                       xTaskWokenByRx = xQueueSendFromISR( xRxedChars, &cChar, xTaskWokenByRx );
+                       xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );
                        lDidSomething = pdTRUE;
                }
                
@@ -208,7 +208,7 @@ portCHAR cChar;
                        /* There is space in the FIFO - if there are any characters queue for
                        transmission they can be sent to the UART now.  This might unblock a
                        task that was waiting for space to become available on the Tx queue. */
-                       if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )
+                       if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )
                        {
                                XIo_Out32( XPAR_RS232_UART_BASEADDR + XUL_TX_FIFO_OFFSET, cChar );
                                lDidSomething = pdTRUE;
@@ -217,7 +217,7 @@ portCHAR cChar;
        } while( lDidSomething == pdTRUE );
 
        /* If we woke any tasks we may require a context switch. */
-       if( xTaskWokenByTx || xTaskWokenByRx )
+       if( xHigherPriorityTaskWoken )
        {
                portYIELD_FROM_ISR();
        }
index e0ce5a77cb905ebabe84d97f74fa602299303a3f..3f353dd43c2f3b6792d7f3b4f52110370bd79cc1 100644 (file)
@@ -76,10 +76,10 @@ static portLONG lDummyVariable;
 void vEINT0_ISR_Handler( void )\r
 {\r
 extern xQueueHandle xTCPISRQueue;\r
-portBASE_TYPE xTaskWoken = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* Just wake the TCP task so it knows an ISR has occurred. */\r
-       xTaskWoken = xQueueSendFromISR( xTCPISRQueue, ( void * ) &lDummyVariable, xTaskWoken ); \r
+       xQueueSendFromISR( xTCPISRQueue, ( void * ) &lDummyVariable, &xHigherPriorityTaskWoken );       \r
 \r
        /* We cannot carry on processing interrupts until the TCP task has \r
        processed this one - so for now interrupts are disabled.  The TCP task will\r
@@ -89,7 +89,7 @@ portBASE_TYPE xTaskWoken = pdFALSE;
        /* Clear the interrupt bit. */  \r
        VICVectAddr = tcpCLEAR_VIC_INTERRUPT;\r
 \r
-       if( xTaskWoken )\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                portYIELD_FROM_ISR();\r
        }\r
index 45b94708e6123f280d0d4de129c856e88b891243..d62a813c730bdfaaba8742721433dff969a3c568 100644 (file)
@@ -161,7 +161,7 @@ void vI2C_ISR_Handler( void )
 /* Holds the current transmission state. */                                                    \r
 static I2C_STATE eCurrentState = eSentStart;\r
 static portLONG lMessageIndex = -i2cBUFFER_ADDRESS_BYTES; /* There are two address bytes to send prior to the data. */\r
-portBASE_TYPE xTaskWokenByTx = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 portLONG lBytesLeft;\r
 \r
        /* The action taken for this interrupt depends on our current state. */\r
@@ -268,11 +268,11 @@ portLONG lBytesLeft;
                                                must 'give' the semaphore so the task is woken.*/\r
                                                if( pxCurrentMessage->xMessageCompleteSemaphore )\r
                                                {\r
-                                                       xTaskWokenByTx = xSemaphoreGiveFromISR( pxCurrentMessage->xMessageCompleteSemaphore, xTaskWokenByTx );\r
+                                                       xSemaphoreGiveFromISR( pxCurrentMessage->xMessageCompleteSemaphore, &xHigherPriorityTaskWoken );\r
                                                }\r
 \r
                                                /* Are there any other messages to transact? */\r
-                                               if( xQueueReceiveFromISR( xMessagesForTx, &pxCurrentMessage, &xTaskWokenByTx ) == pdTRUE )\r
+                                               if( xQueueReceiveFromISR( xMessagesForTx, &pxCurrentMessage, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                                                {\r
                                                        /* Start the next message - which was\r
                                                        retrieved from the queue. */\r
@@ -336,11 +336,11 @@ portLONG lBytesLeft;
                                                semaphore must be 'given' to wake the task. */\r
                                                if( pxCurrentMessage->xMessageCompleteSemaphore )\r
                                                {\r
-                                                       xTaskWokenByTx = xSemaphoreGiveFromISR( pxCurrentMessage->xMessageCompleteSemaphore, xTaskWokenByTx );\r
+                                                       xSemaphoreGiveFromISR( pxCurrentMessage->xMessageCompleteSemaphore, &xHigherPriorityTaskWoken );\r
                                                }\r
 \r
                                                /* Are there any other messages to transact? */\r
-                                               if( xQueueReceiveFromISR( xMessagesForTx, &pxCurrentMessage, &xTaskWokenByTx ) == pdTRUE )\r
+                                               if( xQueueReceiveFromISR( xMessagesForTx, &pxCurrentMessage, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                                                {\r
                                                        /* Start the next message from the Tx queue. */\r
                                                        I2C_I2CONSET = i2cSTA_BIT;\r
@@ -371,7 +371,7 @@ portLONG lBytesLeft;
        I2C_I2CONCLR = i2cSI_BIT;\r
        VICVectAddr = i2cCLEAR_VIC_INTERRUPT;\r
 \r
-       if( xTaskWokenByTx )\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                portYIELD_FROM_ISR();\r
        }\r
index 0494ec61743a285b83a4370e7835feaa9aa4ffd8..c3872e3747678abd44328b045df16d7a90b974c9 100644 (file)
@@ -409,7 +409,7 @@ static portBASE_TYPE xComPortISR( xComPort * const pxPort )
 {\r
 unsigned portSHORT usStatusRegister;\r
 portCHAR cChar;\r
-portBASE_TYPE xTaskWokenByPost = pdFALSE, xAnotherTaskWokenByPost = pdFALSE, xTaskWokenByTx = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* NOTE:  THIS IS NOT AN EFFICIENT ISR AS IT IS DESIGNED SOLELY TO TEST\r
        THE SCHEDULER FUNCTIONALITY.  REAL APPLICATIONS SHOULD NOT USE THIS\r
@@ -420,14 +420,14 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE, xAnotherTaskWokenByPost = pdFALSE, xTa
        if( usStatusRegister & serRX_READY )\r
        {\r
                cChar = ( portCHAR ) portINPUT_WORD( pxPort->usRxReg );\r
-               xTaskWokenByPost = xQueueSendFromISR( pxPort->xRxedChars, &cChar, xTaskWokenByPost );\r
+               xQueueSendFromISR( pxPort->xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
 \r
                /* Also release the semaphore - this does nothing interesting and is just a test. */\r
-               xAnotherTaskWokenByPost = xSemaphoreGiveFromISR( pxPort->xTestSem, xAnotherTaskWokenByPost );\r
+               xSemaphoreGiveFromISR( pxPort->xTestSem, &xHigherPriorityTaskWoken );\r
        }\r
        else if( pxPort->sTxInterruptOn && ( usStatusRegister & serTX_EMPTY ) )\r
        {\r
-               if( xQueueReceiveFromISR( pxPort->xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+               if( xQueueReceiveFromISR( pxPort->xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
                {\r
                        portOUTPUT_WORD( pxPort->usTxReg, ( unsigned portSHORT ) cChar );\r
                }\r
@@ -443,7 +443,7 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE, xAnotherTaskWokenByPost = pdFALSE, xTa
        /* If posting to the queue woke a task that was blocked on the queue we may\r
        want to switch to the woken task - depending on its priority relative to\r
        the task interrupted by this ISR. */\r
-       if( xTaskWokenByPost || xAnotherTaskWokenByPost || xTaskWokenByTx)\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                return pdTRUE;\r
        }\r
index 4749e16d8625a0a188e251f712ff8c863878d446..adfc54814dd7b750bcc3741d7da93fd3708c9948 100644 (file)
@@ -80,7 +80,7 @@ portBASE_TYPE prvProcessISR( void )
 {\r
 unsigned char status;\r
 extern xSemaphoreHandle xTCPSemaphore;\r
-portBASE_TYPE xSwitchRequired = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
 #ifdef I2CHIP_WINDOW\r
 u_int current_window = i2chip_get_window();\r
@@ -91,7 +91,7 @@ status = READ_VALUE(INT_REG);
 \r
 if (status)\r
   {\r
-  xSwitchRequired = pdTRUE;\r
+  xHigherPriorityTaskWoken = pdTRUE;\r
   // channel 0 interrupt(sysinit, sockinit, established, closed, timeout, send_ok, recv_ok)\r
   if (status & 0x01)\r
     {\r
@@ -178,12 +178,12 @@ WRITE_VALUE(INT_REG, 0xFF);
 i2chip_set_window(current_window);\r
 #endif\r
 \r
-       if( xSwitchRequired == pdTRUE )\r
+       if( xHigherPriorityTaskWoken == pdTRUE )\r
     {\r
-               xSwitchRequired = xSemaphoreGiveFromISR( xTCPSemaphore, pdFALSE );\r
+               xSemaphoreGiveFromISR( xTCPSemaphore, &xHigherPriorityTaskWoken );\r
     }\r
 \r
-       return xSwitchRequired;\r
+       return xHigherPriorityTaskWoken;\r
 }\r
 \r
 void far interrupt in4_isr_i2chip(void)\r
index 6a0e6ace9db33baef6749949c49b580a229f0828..063b74a39c117aa3d489acd841ab2c492422dab4 100644 (file)
@@ -196,7 +196,7 @@ void vSerialClose( xComPortHandle xPort )
 void __attribute__((__interrupt__, auto_psv)) _U2RXInterrupt( void )\r
 {\r
 portCHAR cChar;\r
-portBASE_TYPE xYieldRequired = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* Get the character and post it on the queue of Rxed characters.\r
        If the post causes a task to wake force a context switch as the woken task\r
@@ -205,10 +205,10 @@ portBASE_TYPE xYieldRequired = pdFALSE;
        while( U2STAbits.URXDA )\r
        {\r
                cChar = U2RXREG;\r
-               xYieldRequired = xQueueSendFromISR( xRxedChars, &cChar, xYieldRequired );\r
+               xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
        }\r
 \r
-       if( xYieldRequired != pdFALSE )\r
+       if( xHigherPriorityTaskWoken != pdFALSE )\r
        {\r
                taskYIELD();\r
        }\r
index e4043a2fbb22cb2daa429bdc0a600bad09b1817c..a56d18ef58731764051cab62c1508680940f0f13 100644 (file)
@@ -900,7 +900,7 @@ static long prvMACB_ISR_NonNakedBehaviour( void )
 \r
   // Variable definitions can be made now.\r
   volatile unsigned long ulIntStatus, ulEventStatus;\r
-  long xSwitchRequired = FALSE;\r
+  long xHigherPriorityTaskWoken = FALSE;\r
 \r
   // Find the cause of the interrupt.\r
   ulIntStatus = AVR32_MACB.isr;\r
@@ -912,7 +912,7 @@ static long prvMACB_ISR_NonNakedBehaviour( void )
     // the Rx descriptors.\r
     portENTER_CRITICAL();\r
 #ifdef FREERTOS_USED\r
-    xSwitchRequired = xSemaphoreGiveFromISR( xSemaphore, FALSE );\r
+    xSemaphoreGiveFromISR( xSemaphore, &xHigherPriorityTaskWoken );\r
 #else\r
     DataToRead = TRUE;   \r
 #endif      \r
@@ -930,7 +930,7 @@ static long prvMACB_ISR_NonNakedBehaviour( void )
     AVR32_MACB.tsr;\r
   }\r
 \r
-  return ( xSwitchRequired );\r
+  return ( xHigherPriorityTaskWoken );\r
 }\r
 \r
 \r
index fe4f70646790a2d23dd9fb33c110c61dddb89e45..2bb15455c7c778de3f636bddfaf95c0a2b1445d3 100644 (file)
@@ -88,7 +88,7 @@ static portBASE_TYPE prvUSART0_ISR_NonNakedBehaviour( void )
 {\r
   /* Now we can declare the local variables. */\r
   signed portCHAR     cChar;\r
-  portBASE_TYPE     xTaskWokenByTx = pdFALSE, xTaskWokenByRx = pdFALSE;\r
+  portBASE_TYPE     xHigherPriorityTaskWoken = pdFALSE;\r
   unsigned portLONG     ulStatus;\r
   volatile avr32_usart_t  *usart0 = &AVR32_USART0;\r
   portBASE_TYPE retstatus;\r
@@ -103,7 +103,7 @@ static portBASE_TYPE prvUSART0_ISR_NonNakedBehaviour( void )
     /* Because FreeRTOS is not supposed to run with nested interrupts, put all OS\r
       calls in a critical section . */\r
     portENTER_CRITICAL();\r
-    retstatus = xQueueReceiveFromISR(xCharsForTx, &cChar, &xTaskWokenByTx);\r
+    retstatus = xQueueReceiveFromISR(xCharsForTx, &cChar, &xHigherPriorityTaskWoken);\r
     portEXIT_CRITICAL();\r
     if (retstatus == pdTRUE)\r
     {\r
@@ -126,17 +126,13 @@ static portBASE_TYPE prvUSART0_ISR_NonNakedBehaviour( void )
     /* Because FreeRTOS is not supposed to run with nested interrupts, put all OS\r
       calls in a critical section . */\r
     portENTER_CRITICAL();\r
-    retstatus = xQueueSendFromISR(xRxedChars, &cChar, pdFALSE);\r
+       xQueueSendFromISR(xRxedChars, &cChar, &xHigherPriorityTaskWoken);\r
     portEXIT_CRITICAL();\r
-    if (retstatus)\r
-    {\r
-      xTaskWokenByRx = pdTRUE;\r
-    }\r
   }\r
 \r
   /* The return value will be used by portEXIT_SWITCHING_ISR() to know if it\r
   should perform a vTaskSwitchContext(). */\r
-  return ( xTaskWokenByTx || xTaskWokenByRx );\r
+  return ( xHigherPriorityTaskWoken );\r
 }\r
 \r
 \r
index ab9a197959dbd8079591fb96b9d97694c1ed2336..15e9d682af2e5e19761219a4016c1cdb132c2ee4 100644 (file)
@@ -74,7 +74,7 @@ void vEMACISR_Handler( void );
 void vEMACISR_Handler( void )\r
 {\r
 volatile unsigned portLONG ulIntStatus, ulEventStatus;\r
-portBASE_TYPE xSwitchRequired = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 extern void vClearEMACTxBuffer( void );\r
 \r
        /* Find the cause of the interrupt. */\r
@@ -85,7 +85,7 @@ extern void vClearEMACTxBuffer( void );
        {\r
                /* A frame has been received, signal the lwIP task so it can process\r
                the Rx descriptors. */\r
-               xSwitchRequired = xSemaphoreGiveFromISR( xSemaphore, pdFALSE );\r
+               xSemaphoreGiveFromISR( xSemaphore, &xHigherPriorityTaskWoken );\r
                AT91C_BASE_EMAC->EMAC_RSR = AT91C_EMAC_REC;\r
        }\r
 \r
@@ -104,7 +104,7 @@ extern void vClearEMACTxBuffer( void );
        switch to another task.  If the unblocked task was of higher priority then\r
        the interrupted task it will then execute immediately that the ISR\r
        completes. */\r
-       if( xSwitchRequired )\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                portYIELD_FROM_ISR();\r
        }\r
index 54cf9959c08eaaea39a994a7b9e75bad9925fbaf..6892ff28b696a9aea51c9f0eaded7f7406676d30 100644 (file)
@@ -68,7 +68,7 @@ void vUSB_ISR_Handler( void );
 \r
 void vUSB_ISR_Handler( void )\r
 {\r
-portCHAR cTaskWokenByPost = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 static volatile unsigned portLONG ulNextMessage = 0;\r
 xISRStatus *pxMessage;\r
 unsigned portLONG ulRxBytes;\r
@@ -145,13 +145,13 @@ unsigned portCHAR ucFifoIndex;
        AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_3 ] &= ~usbINT_CLEAR_MASK;\r
 \r
        /* Post ISR data to queue for task-level processing */\r
-       cTaskWokenByPost = xQueueSendFromISR( xUSBInterruptQueue, &pxMessage, cTaskWokenByPost );\r
+       xQueueSendFromISR( xUSBInterruptQueue, &pxMessage, &xHigherPriorityTaskWoken );\r
 \r
        /* Clear AIC to complete ISR processing */\r
        AT91C_BASE_AIC->AIC_EOICR = 0;\r
 \r
        /* Do a task switch if needed */\r
-       if( cTaskWokenByPost )\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                /* This call will ensure that the unblocked task will be executed\r
                immediately upon completion of the ISR if it has a priority higher\r
index a1c7605e311b40e01b5dcf93fed6c74029902ab5..fdac3c98f0de0acb90557193f83841aefbaa0b34 100644 (file)
@@ -346,7 +346,7 @@ eth_input( struct netif *netif, struct pbuf *p )
 void\r
 mcf523xfec_rx_irq( void )\r
 {\r
-    static portBASE_TYPE xNeedSwitch = pdFALSE;\r
+    static portBASE_TYPE xHigherPriorityTaskWoken;\r
 \r
     /* Workaround GCC if frame pointers are enabled. This is an ISR and\r
      * we must not modify the stack before portENTER_SWITCHING_ISR( )\r
@@ -359,7 +359,7 @@ mcf523xfec_rx_irq( void )
      * a call to the portENTER_SWITCHING_ISR() macro.\r
      */\r
     portENTER_SWITCHING_ISR(  );\r
-\r
+       xHigherPriorityTaskWoken = pdFALSE;\r
     /* Set Debug PIN to high to measure RX latency. */\r
     FEC_DEBUG_RX_TIMING( 1 );\r
 \r
@@ -368,9 +368,9 @@ mcf523xfec_rx_irq( void )
     {\r
         /* Clear interrupt from EIR register immediately */\r
         MCF_FEC_EIR = ( MCF_FEC_EIR_RXB | MCF_FEC_EIR_RXF );\r
-        xNeedSwitch = xSemaphoreGiveFromISR( fecif_g->rx_sem, pdFALSE );\r
+        xSemaphoreGiveFromISR( fecif_g->rx_sem, &xHigherPriorityTaskWoken );\r
     }\r
-    portEXIT_SWITCHING_ISR( xNeedSwitch );\r
+    portEXIT_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 }\r
 \r
 void\r
index 1c2e31e512066cc73d35f21c32b787ed54019f1a..85593c9767d09387a1ffb3368e2800a688c4a53b 100644 (file)
@@ -270,7 +270,7 @@ void
 prvSerialISR( void )\r
 {\r
     static signed portCHAR cChar;\r
-    static portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByRx = pdFALSE;\r
+    static portBASE_TYPE xHigherPriorityTaskWoken;\r
 \r
     /* We have to remvoe the effect of the GCC. Please note that the\r
      * __attribute__ ((interrupt_handler)) does not work here because we\r
@@ -285,12 +285,13 @@ prvSerialISR( void )
      * variable declarations.\r
      */\r
     portENTER_SWITCHING_ISR();\r
+       xHigherPriorityTaskWoken = pdFALSE;\r
 \r
     /* Ready to send a character from the buffer. */\r
     if( MCF_UART_USR0 & MCF_UART_USR_TXRDY )\r
     {\r
         /* Transmit buffer is ready. Test if there are characters available. */\r
-        if( xQueueReceiveFromISR( xComPortIF[ 0 ].xTXChars, &cChar, &xTaskWokenByTx ) ==\r
+        if( xQueueReceiveFromISR( xComPortIF[ 0 ].xTXChars, &cChar, &xHigherPriorityTaskWoken ) ==\r
             pdTRUE )\r
         {\r
             /* A character was retrieved from the queue so can be sent. */\r
@@ -305,11 +306,10 @@ prvSerialISR( void )
     if( MCF_UART_USR0 & MCF_UART_USR_RXRDY )\r
     {\r
         cChar = MCF_UART_URB0;\r
-        xTaskWokenByRx =\r
-            xQueueSendFromISR( xComPortIF[ 0].xRXChars, &cChar, xTaskWokenByRx );\r
+        xQueueSendFromISR( xComPortIF[ 0].xRXChars, &cChar, &xHigherPriorityTaskWoken );\r
     }\r
     /* Exit the ISR.  If a task was woken by either a character being\r
      * or transmitted then a context switch will occur.\r
      */\r
-    portEXIT_SWITCHING_ISR( ( xTaskWokenByTx || xTaskWokenByRx ) );\r
+    portEXIT_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 }\r
index cf345f33a20a9044ff437fd6aa8661308f83cf39..fda0b684db83e86d2d2dea1951d96553ea9ff9c4 100644 (file)
@@ -210,12 +210,15 @@ signed portBASE_TYPE xReturn;
        void vRxISR( void ) __interrupt[ UART1RX_VECTOR ]\r
        {\r
        signed portCHAR cChar;\r
+       portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
        \r
                /* Get the character from the UART and post it on the queue of Rxed \r
                characters. */\r
                cChar = U1RXBUF;\r
        \r
-               if( xQueueSendFromISR( xRxedChars, &cChar, pdFALSE ) )\r
+               xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
+\r
+               if( xHigherPriorityTaskWoken )\r
                {\r
                        /*If the post causes a task to wake force a context switch \r
                        as the woken task may have a higher priority than the task we have \r
@@ -258,12 +261,15 @@ signed portBASE_TYPE xReturn;
        void ISRCom1Rx( void )\r
        {\r
        signed portCHAR cChar;\r
+       portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
        \r
                /* Get the character from the UART and post it on the queue of Rxed \r
                characters. */\r
                cChar = U1RXBUF;\r
        \r
-               if( xQueueSendFromISR( xRxedChars, &cChar, pdFALSE ) )\r
+               xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
+\r
+               if( xHigherPriorityTaskWoken )\r
                {\r
                        /*If the post causes a task to wake force a context switch \r
                        as the woken task may have a higher priority than the task we have \r
index c18c374cbc7c7b9f667511f3a9ff68014ed708fd..fdad7e8be945d5d2d185a4cc48b78e73e646b325 100644 (file)
@@ -211,12 +211,15 @@ signed portBASE_TYPE xReturn;
 interrupt (UART1RX_VECTOR) vRxISR( void )\r
 {\r
 signed portCHAR cChar;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        /* Get the character from the UART and post it on the queue of Rxed \r
        characters. */\r
        cChar = U1RXBUF;\r
 \r
-       if( xQueueSendFromISR( xRxedChars, &cChar, pdFALSE ) )\r
+       xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
+\r
+       if( xHigherPriorityTaskWoken )\r
        {\r
                /*If the post causes a task to wake force a context switch \r
                as the woken task may have a higher priority than the task we have \r
index 7f7c228466fadf461a3fec153807561b3c44ad59..dbb192501ddcace09c688899f84e5ec3bf977e42 100644 (file)
@@ -515,7 +515,7 @@ static void prvSetupEMACInterrupt( void )
 __arm void vEMACISR( void )\r
 {\r
 volatile unsigned portLONG ulIntStatus, ulRxStatus;\r
-portBASE_TYPE xSwitchRequired = pdFALSE;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        ulIntStatus = AT91C_BASE_EMAC->EMAC_ISR;\r
        ulRxStatus = AT91C_BASE_EMAC->EMAC_RSR;\r
@@ -524,13 +524,13 @@ portBASE_TYPE xSwitchRequired = pdFALSE;
        {\r
                /* A frame has been received, signal the uIP task so it can process\r
                the Rx descriptors. */\r
-               xSwitchRequired = xSemaphoreGiveFromISR( xSemaphore, pdFALSE );\r
+               xSemaphoreGiveFromISR( xSemaphore, &xHigherPriorityTaskWoken );\r
                AT91C_BASE_EMAC->EMAC_RSR = AT91C_EMAC_REC;\r
        }\r
 \r
        /* If a task was woken by either a character being received or a character\r
        being transmitted then we may need to switch to another task. */\r
-       portEND_SWITCHING_ISR( xSwitchRequired );\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
 \r
        /* Clear the interrupt. */\r
        AT91C_BASE_AIC->AIC_EOICR = 0;\r