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] [August 2016 Threads] Enter critical section from ISR for Cortex-A9Posted by wonger on August 18, 2016 I'm using FreeRTOS on a Zynq 7000. The ARM_CA9 port.c has vPortEnterCritical() function which states this is not the interrupt safe version of the enter critical function and it asserts if called from an interrupt. But I do not see an ISR safe version of this. I have a critical section I want to enter, from a task and from an ISR. How would I do this? The complete function is below for reference.
Thank you for any help.
void vPortEnterCritical( void )
{
/* Mask interrupts up to the max syscall interrupt priority. */
ulPortSetInterruptMask();
/* Now interrupts are disabled ulCriticalNesting can be accessed
directly. Increment ulCriticalNesting to keep a count of how many times
portENTER_CRITICAL() has been called. */
ulCriticalNesting++;
/* This is not the interrupt safe version of the enter critical function so
assert() if it is being called from an interrupt context. Only API
functions that end in "FromISR" can be used in an interrupt. Only assert if
the critical nesting count is 1 to protect against recursive calls if the
assert function also uses a critical section. */
if( ulCriticalNesting == 1 )
{
configASSERT( ulPortInterruptNesting == 0 );
}
}
Enter critical section from ISR for Cortex-A9Posted by wonger on August 18, 2016 Upon further research, I think calling vPortEnterCritical() from the task is enough. It ensures the ISR won't run when the task is in the critical section. When the ISR is running, the task is not running and can not run until the ISR is done.
I was just a couple more google searches from unveiling this new information. Sorry for the post, but would appreciate confirmation of this finding though. Thanks.
Enter critical section from ISR for Cortex-A9Posted by rtel on August 18, 2016 That is correct.
For future reference http://www.freertos.org/taskENTERCRITICALFROMISRtaskEXITCRITICALFROM_ISR.html
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|