FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [February 2009 Threads] Context swicht on PIC32Posted 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 PIC32Posted 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 xHigherPriorityTaskWoken. */ 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.
Regards.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|