From: rtel Date: Fri, 13 Jun 2014 14:08:28 +0000 (+0000) Subject: Simplify the assert that checks if a non-ISR safe function is called from an ISR... X-Git-Tag: V8.1.0~32 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=91024f01b131e336e67057d38aa1aba8bffe613d;p=freertos Simplify the assert that checks if a non-ISR safe function is called from an ISR in the GCC Cortex-A9 port. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2260 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- 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