Update to use new xQueueSendFromISR() and xSemaphoreGiveFromISR() function semantics.

This commit is contained in:
Richard Barry 2008-04-12 23:34:13 +00:00
parent f4dd20dffc
commit c1e9f859c8
9 changed files with 56 additions and 73 deletions

View file

@ -503,7 +503,7 @@ void vUART_ISR(void)
{ {
unsigned portLONG ulStatus; unsigned portLONG ulStatus;
portCHAR cRxedChar; portCHAR cRxedChar;
portBASE_TYPE xTaskWokenByPost = pdFALSE; portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
/* What caused the interrupt. */ /* What caused the interrupt. */
ulStatus = UARTIntStatus( UART0_BASE, pdTRUE ); ulStatus = UARTIntStatus( UART0_BASE, pdTRUE );
@ -520,7 +520,7 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE;
Rxed chars. Posting the character should wake the task that is Rxed chars. Posting the character should wake the task that is
blocked on the queue waiting for characters. */ blocked on the queue waiting for characters. */
cRxedChar = ( portCHAR ) HWREG( UART0_BASE + UART_O_DR ); cRxedChar = ( portCHAR ) HWREG( UART0_BASE + UART_O_DR );
xTaskWokenByPost = xQueueSendFromISR( xCommsQueue, &cRxedChar, xTaskWokenByPost ); xQueueSendFromISR( xCommsQueue, &cRxedChar, &xHigherPriorityTaskWoken );
} }
} }
@ -538,14 +538,11 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE;
} }
} }
if( xTaskWokenByPost )
{
/* If a task was woken by the character being received then we force /* If a task was woken by the character being received then we force
a context switch to occur in case the task is of higher priority than a context switch to occur in case the task is of higher priority than
the currently executing task (i.e. the task that this interrupt the currently executing task (i.e. the task that this interrupt
interrupted.) */ interrupted.) */
portEND_SWITCHING_ISR( xTaskWokenByPost ); portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
}
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/

View file

@ -503,7 +503,7 @@ void vUART_ISR(void)
{ {
unsigned portLONG ulStatus; unsigned portLONG ulStatus;
portCHAR cRxedChar; portCHAR cRxedChar;
portBASE_TYPE xTaskWokenByPost = pdFALSE; portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
/* What caused the interrupt. */ /* What caused the interrupt. */
ulStatus = UARTIntStatus( UART0_BASE, pdTRUE ); ulStatus = UARTIntStatus( UART0_BASE, pdTRUE );
@ -520,7 +520,7 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE;
Rxed chars. Posting the character should wake the task that is Rxed chars. Posting the character should wake the task that is
blocked on the queue waiting for characters. */ blocked on the queue waiting for characters. */
cRxedChar = ( portCHAR ) HWREG( UART0_BASE + UART_O_DR ); cRxedChar = ( portCHAR ) HWREG( UART0_BASE + UART_O_DR );
xTaskWokenByPost = xQueueSendFromISR( xCommsQueue, &cRxedChar, xTaskWokenByPost ); xQueueSendFromISR( xCommsQueue, &cRxedChar, &xHigherPriorityTaskWoken );
} }
} }
@ -538,14 +538,11 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE;
} }
} }
if( xTaskWokenByPost )
{
/* If a task was woken by the character being received then we force /* If a task was woken by the character being received then we force
a context switch to occur in case the task is of higher priority than a context switch to occur in case the task is of higher priority than
the currently executing task (i.e. the task that this interrupt the currently executing task (i.e. the task that this interrupt
interrupted.) */ interrupted.) */
portEND_SWITCHING_ISR( xTaskWokenByPost ); portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
}
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/

View file

@ -496,7 +496,7 @@ void vUART_ISR(void)
{ {
unsigned portLONG ulStatus; unsigned portLONG ulStatus;
portCHAR cRxedChar; portCHAR cRxedChar;
portBASE_TYPE xTaskWokenByPost = pdFALSE; portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
/* What caused the interrupt. */ /* What caused the interrupt. */
ulStatus = UARTIntStatus( UART0_BASE, pdTRUE ); ulStatus = UARTIntStatus( UART0_BASE, pdTRUE );
@ -513,7 +513,7 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE;
Rxed chars. Posting the character should wake the task that is Rxed chars. Posting the character should wake the task that is
blocked on the queue waiting for characters. */ blocked on the queue waiting for characters. */
cRxedChar = ( portCHAR ) HWREG( UART0_BASE + UART_O_DR ); cRxedChar = ( portCHAR ) HWREG( UART0_BASE + UART_O_DR );
xTaskWokenByPost = xQueueSendFromISR( xCommsQueue, &cRxedChar, xTaskWokenByPost ); xQueueSendFromISR( xCommsQueue, &cRxedChar, &xHigherPriorityTaskWoken );
} }
} }
@ -531,14 +531,11 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE;
} }
} }
if( xTaskWokenByPost )
{
/* If a task was woken by the character being received then we force /* If a task was woken by the character being received then we force
a context switch to occur in case the task is of higher priority than a context switch to occur in case the task is of higher priority than
the currently executing task (i.e. the task that this interrupt the currently executing task (i.e. the task that this interrupt
interrupted.) */ interrupted.) */
portEND_SWITCHING_ISR( xTaskWokenByPost ); portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
}
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/

View file

@ -496,7 +496,7 @@ void vUART_ISR(void)
{ {
unsigned portLONG ulStatus; unsigned portLONG ulStatus;
portCHAR cRxedChar; portCHAR cRxedChar;
portBASE_TYPE xTaskWokenByPost = pdFALSE; portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
/* What caused the interrupt. */ /* What caused the interrupt. */
ulStatus = UARTIntStatus( UART0_BASE, pdTRUE ); ulStatus = UARTIntStatus( UART0_BASE, pdTRUE );
@ -513,7 +513,7 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE;
Rxed chars. Posting the character should wake the task that is Rxed chars. Posting the character should wake the task that is
blocked on the queue waiting for characters. */ blocked on the queue waiting for characters. */
cRxedChar = ( portCHAR ) HWREG( UART0_BASE + UART_O_DR ); cRxedChar = ( portCHAR ) HWREG( UART0_BASE + UART_O_DR );
xTaskWokenByPost = xQueueSendFromISR( xCommsQueue, &cRxedChar, xTaskWokenByPost ); xQueueSendFromISR( xCommsQueue, &cRxedChar, &xHigherPriorityTaskWoken );
} }
} }
@ -531,14 +531,11 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE;
} }
} }
if( xTaskWokenByPost )
{
/* If a task was woken by the character being received then we force /* If a task was woken by the character being received then we force
a context switch to occur in case the task is of higher priority than a context switch to occur in case the task is of higher priority than
the currently executing task (i.e. the task that this interrupt the currently executing task (i.e. the task that this interrupt
interrupted.) */ interrupted.) */
portEND_SWITCHING_ISR( xTaskWokenByPost ); portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
}
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/

View file

@ -504,7 +504,7 @@ void vUART_ISR(void)
{ {
unsigned portLONG ulStatus; unsigned portLONG ulStatus;
portCHAR cRxedChar; portCHAR cRxedChar;
portBASE_TYPE xTaskWokenByPost = pdFALSE; portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
/* What caused the interrupt. */ /* What caused the interrupt. */
ulStatus = UARTIntStatus( UART0_BASE, pdTRUE ); ulStatus = UARTIntStatus( UART0_BASE, pdTRUE );
@ -521,7 +521,7 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE;
Rxed chars. Posting the character should wake the task that is Rxed chars. Posting the character should wake the task that is
blocked on the queue waiting for characters. */ blocked on the queue waiting for characters. */
cRxedChar = ( portCHAR ) HWREG( UART0_BASE + UART_O_DR ); cRxedChar = ( portCHAR ) HWREG( UART0_BASE + UART_O_DR );
xTaskWokenByPost = xQueueSendFromISR( xCommsQueue, &cRxedChar, xTaskWokenByPost ); xQueueSendFromISR( xCommsQueue, &cRxedChar, &xHigherPriorityTaskWoken );
} }
} }
@ -539,14 +539,11 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE;
} }
} }
if( xTaskWokenByPost )
{
/* If a task was woken by the character being received then we force /* If a task was woken by the character being received then we force
a context switch to occur in case the task is of higher priority than a context switch to occur in case the task is of higher priority than
the currently executing task (i.e. the task that this interrupt the currently executing task (i.e. the task that this interrupt
interrupted.) */ interrupted.) */
portEND_SWITCHING_ISR( xTaskWokenByPost ); portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
}
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/

View file

@ -209,7 +209,7 @@ void vUART_ISR( void )
{ {
unsigned portLONG ulStatus; unsigned portLONG ulStatus;
portCHAR cRxedChar; portCHAR cRxedChar;
portBASE_TYPE xTaskWokenByPost = pdFALSE; portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
/* What caused the interrupt. */ /* What caused the interrupt. */
ulStatus = UARTIntStatus( UART0_BASE, pdTRUE ); ulStatus = UARTIntStatus( UART0_BASE, pdTRUE );
@ -226,7 +226,7 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE;
Rxed chars. Posting the character should wake the task that is Rxed chars. Posting the character should wake the task that is
blocked on the queue waiting for characters. */ blocked on the queue waiting for characters. */
cRxedChar = ( portCHAR ) HWREG( UART0_BASE + UART_O_DR ); cRxedChar = ( portCHAR ) HWREG( UART0_BASE + UART_O_DR );
xTaskWokenByPost = xQueueSendFromISR( xCommsQueue, &cRxedChar, xTaskWokenByPost ); xQueueSendFromISR( xCommsQueue, &cRxedChar, &xHigherPriorityTaskWoken );
} }
} }
@ -244,14 +244,11 @@ portBASE_TYPE xTaskWokenByPost = pdFALSE;
} }
} }
if( xTaskWokenByPost )
{
/* If a task was woken by the character being received then we force /* If a task was woken by the character being received then we force
a context switch to occur in case the task is of higher priority than a context switch to occur in case the task is of higher priority than
the currently executing task (i.e. the task that this interrupt the currently executing task (i.e. the task that this interrupt
interrupted.) */ interrupted.) */
portEND_SWITCHING_ISR( xTaskWokenByPost ); portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
}
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/

View file

@ -350,14 +350,15 @@ unsigned portLONG ulStatus;
void vGPIO_ISR( void ) void vGPIO_ISR( void )
{ {
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
/* Clear the interrupt. */ /* Clear the interrupt. */
GPIOPinIntClear(GPIO_PORTC_BASE, mainPUSH_BUTTON); GPIOPinIntClear(GPIO_PORTC_BASE, mainPUSH_BUTTON);
/* Wake the button handler task. */ /* Wake the button handler task. */
if( xSemaphoreGiveFromISR( xButtonSemaphore, pdFALSE ) ) xSemaphoreGiveFromISR( xButtonSemaphore, &xHigherPriorityTaskWoken );
{
portEND_SWITCHING_ISR( pdTRUE ); portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
}
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/

View file

@ -350,14 +350,14 @@ unsigned portLONG ulStatus;
void vGPIO_ISR( void ) void vGPIO_ISR( void )
{ {
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
/* Clear the interrupt. */ /* Clear the interrupt. */
GPIOPinIntClear(GPIO_PORTC_BASE, mainPUSH_BUTTON); GPIOPinIntClear(GPIO_PORTC_BASE, mainPUSH_BUTTON);
/* Wake the button handler task. */ /* Wake the button handler task. */
if( xSemaphoreGiveFromISR( xButtonSemaphore, pdFALSE ) ) xSemaphoreGiveFromISR( xButtonSemaphore, &xHigherPriorityTaskWoken );
{ portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
portEND_SWITCHING_ISR( pdTRUE );
}
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/

View file

@ -352,14 +352,14 @@ unsigned portLONG ulStatus;
void vGPIO_ISR( void ) void vGPIO_ISR( void )
{ {
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
/* Clear the interrupt. */ /* Clear the interrupt. */
GPIOPinIntClear(GPIO_PORTC_BASE, mainPUSH_BUTTON); GPIOPinIntClear( GPIO_PORTC_BASE, mainPUSH_BUTTON );
/* Wake the button handler task. */ /* Wake the button handler task. */
if( xSemaphoreGiveFromISR( xButtonSemaphore, pdFALSE ) ) xSemaphoreGiveFromISR( xButtonSemaphore, &xHigherPriorityTaskWoken );
{ portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
portEND_SWITCHING_ISR( pdTRUE );
}
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/