]> git.sur5r.net Git - freertos/commitdiff
Simplify the assert that checks if a non-ISR safe function is called from an ISR...
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 13 Jun 2014 14:08:28 +0000 (14:08 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 13 Jun 2014 14:08:28 +0000 (14:08 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2260 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/portable/GCC/ARM_CA9/port.c

index b66a8c764415be4536ed0ef1eeeff55f4f0e5635..0f0cba0a37599f71fdc7bcfc3cb27b5fe756f813 100644 (file)
        #error configMAX_API_CALL_INTERRUPT_PRIORITY must be greater than ( configUNIQUE_INTERRUPT_PRIORITIES / 2 )\r
 #endif\r
 \r
-/* Used to check non ISR safe API functions are not called from inside an\r
-ISR. */\r
-#define portASSERT_IF_IN_INTERRUPT() configASSERT( ( portICCRPR_RUNNING_PRIORITY_REGISTER == 0xffUL ) || ( portICCRPR_RUNNING_PRIORITY_REGISTER == portLOWEST_INTERRUPT_PRIORITY ) )\r
-\r
 /* Some vendor specific files default configCLEAR_TICK_INTERRUPT() in\r
 portmacro.h. */\r
 #ifndef configCLEAR_TICK_INTERRUPT\r
@@ -375,10 +371,6 @@ void vPortEndScheduler( void )
 \r
 void vPortEnterCritical( void )\r
 {\r
-       /* This is not the interrupt safe version of the enter critical function.\r
-       Only API functions that end in "FromISR" can be used in an interrupt. */\r
-       portASSERT_IF_IN_INTERRUPT();\r
-\r
        /* Mask interrupts up to the max syscall interrupt priority. */\r
        ulPortSetInterruptMask();\r
 \r
@@ -386,15 +378,20 @@ void vPortEnterCritical( void )
        directly.  Increment ulCriticalNesting to keep a count of how many times\r
        portENTER_CRITICAL() has been called. */\r
        ulCriticalNesting++;\r
+\r
+       /* This is not the interrupt safe version of the enter critical function.\r
+       Only API functions that end in "FromISR" can be used in an interrupt.  The\r
+       test of ulCriticalNesting() guards against recursive calls to assert in the\r
+       case that assert itself contains a call to taskENTER_CRITICAL. */\r
+       if( ulCriticalNesting == 1 )\r
+       {\r
+               configASSERT( ulPortInterruptNesting == 0 );\r
+       }\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
 void vPortExitCritical( void )\r
 {\r
-       /* This is not the interrupt safe version of the enter critical function.\r
-       Only API functions that end in "FromISR" can be used in an interrupt. */\r
-       portASSERT_IF_IN_INTERRUPT();\r
-\r
        if( ulCriticalNesting > portNO_CRITICAL_NESTING )\r
        {\r
                /* Decrement the nesting count as the critical section is being\r