diff --git a/FreeRTOS/Source/portable/GCC/ARM_CA9/port.c b/FreeRTOS/Source/portable/GCC/ARM_CA9/port.c index b66a8c764..0f0cba0a3 100644 --- a/FreeRTOS/Source/portable/GCC/ARM_CA9/port.c +++ b/FreeRTOS/Source/portable/GCC/ARM_CA9/port.c @@ -110,10 +110,6 @@ #error configMAX_API_CALL_INTERRUPT_PRIORITY must be greater than ( configUNIQUE_INTERRUPT_PRIORITIES / 2 ) #endif -/* Used to check non ISR safe API functions are not called from inside an -ISR. */ -#define portASSERT_IF_IN_INTERRUPT() configASSERT( ( portICCRPR_RUNNING_PRIORITY_REGISTER == 0xffUL ) || ( portICCRPR_RUNNING_PRIORITY_REGISTER == portLOWEST_INTERRUPT_PRIORITY ) ) - /* Some vendor specific files default configCLEAR_TICK_INTERRUPT() in portmacro.h. */ #ifndef configCLEAR_TICK_INTERRUPT @@ -375,10 +371,6 @@ void vPortEndScheduler( void ) void vPortEnterCritical( void ) { - /* This is not the interrupt safe version of the enter critical function. - Only API functions that end in "FromISR" can be used in an interrupt. */ - portASSERT_IF_IN_INTERRUPT(); - /* Mask interrupts up to the max syscall interrupt priority. */ ulPortSetInterruptMask(); @@ -386,15 +378,20 @@ void vPortEnterCritical( void ) 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. + Only API functions that end in "FromISR" can be used in an interrupt. The + test of ulCriticalNesting() guards against recursive calls to assert in the + case that assert itself contains a call to taskENTER_CRITICAL. */ + if( ulCriticalNesting == 1 ) + { + configASSERT( ulPortInterruptNesting == 0 ); + } } /*-----------------------------------------------------------*/ void vPortExitCritical( void ) { - /* This is not the interrupt safe version of the enter critical function. - Only API functions that end in "FromISR" can be used in an interrupt. */ - portASSERT_IF_IN_INTERRUPT(); - if( ulCriticalNesting > portNO_CRITICAL_NESTING ) { /* Decrement the nesting count as the critical section is being