Context swicht on PIC32
Posted by Ariel Montero
on February 5, 2009
How can I force a context swicht after xSemaphoreGiveFromISR funtion return value equal pdTRUE in interrup handler on PIC32?.
What happens if the return value equal pdFALSE?. What does mean?.What should I do in this case?.
RE: Context swicht on PIC32
Posted by Richard
on February 5, 2009
> How can I force a context swicht after xSemaphoreGiveFromISR
> funtion return value equal pdTRUE in interrup handler on PIC32?.
A context switch should be forced if the last parameter to the xSemaphoreGiveFromISR() function is set to true within the function itself. On the PIC32 this is done using the portEND_SWITCHING_ISR() macro as follows:
/* Initialise xHigherPriorityTaskWoken to false. */
xHigherPriorityTaskWoken = pdFALSE;
/* Call the API function, passing in the address of
xSemaphoreGiveFromISR( xSemaphore, &xHigherPriorityTaskWoken );
/* Call the macro, passing in the value of xHigherPriorityTaskWoken.
If the semaphore caused a task to unblock, and the task that unblocked
Has a priority greater than the current task, then
xHigherPriorityTaskWoken will now be true and the macro will cause a
context switch. */
portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
See the file FreeRTOS\Demo\PIC32MX_MPLAB\serial\serial.c for a full example.
> What happens if the return value equal pdFALSE?. What does
> mean?.What should I do in this case?.
If pdFALSE is returned from the function itself then the semaphore could not be given because the semaphore already existed. In other words, nothing had taken the semaphore so the semaphore was already there. This is talking about the function return value though, not the value returned in xHigherPriorityTaskWoken. See http://www.freertos.org/a00124.html for an example, but note in this example the macro used to yield is called something else.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.