]> git.sur5r.net Git - freertos/commitdiff
Update RX ports to only include additional check on the existing IPL (so it is not...
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sat, 13 Jul 2013 11:31:35 +0000 (11:31 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sat, 13 Jul 2013 11:31:35 +0000 (11:31 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1975 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/portable/GCC/RX100/portmacro.h
FreeRTOS/Source/portable/GCC/RX600/portmacro.h
FreeRTOS/Source/portable/IAR/RX100/portmacro.h
FreeRTOS/Source/portable/IAR/RX600/portmacro.h
FreeRTOS/Source/portable/MPLAB/PIC32MX/portmacro.h
FreeRTOS/Source/portable/Renesas/RX100/portmacro.h
FreeRTOS/Source/portable/Renesas/RX200/portmacro.h
FreeRTOS/Source/portable/Renesas/RX600/portmacro.h

index b3cff6084f015b7515fa4b3a9e3d34e1e763a750..3313b65ad2a0a4297f01572f0e189fe2c2f019f1 100644 (file)
@@ -115,10 +115,6 @@ portSTACK_TYPE and portBASE_TYPE. */
 #define portTICK_RATE_MS                       ( ( portTickType ) 1000 / configTICK_RATE_HZ )\r
 #define portNOP()                                      __asm volatile( "NOP" )\r
 \r
-#ifdef configASSERT\r
-       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( ulPortGetIPL() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
-#endif\r
-\r
 /* Save clobbered register, set ITU SWINR (at address 0x872E0), read the value\r
 back to ensure it is set before continuing, then restore the clobbered\r
 register. */\r
@@ -133,17 +129,22 @@ register. */
 \r
 #define portYIELD_FROM_ISR( x )        if( x != pdFALSE ) { portYIELD(); }\r
 \r
-/*\r
- * These macros should be called directly, but through the taskENTER_CRITICAL()\r
- * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then\r
- * the check to ensure the IPL is not being lowered will not be needed.  It is\r
- * included to ensure assert()s triggered by using an incorrect interrupt\r
- * priority do not result in the assert() handler inadvertently lowering the\r
- * priority mask, and in so doing allowing the offending interrupt to continue\r
- * triggering until stack space is exhausted.\r
- */\r
-#define portENABLE_INTERRUPTS()        __asm volatile ( "MVTIPL        #0" );\r
-#define portDISABLE_INTERRUPTS()       if( ulPortGetIPL() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) __asm volatile ( "MVTIPL    %0" ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) )\r
+/* These macros should not be called directly, but through the \r
+taskENTER_CRITICAL() and taskEXIT_CRITICAL() macros.  An extra check is \r
+performed if configASSERT() is defined to ensure an assertion handler does not \r
+inadvertently attempt to lower the IPL when the call to assert was triggered \r
+because the IPL value was found to be above    configMAX_SYSCALL_INTERRUPT_PRIORITY \r
+when an ISR safe FreeRTOS API function was executed.  ISR safe FreeRTOS API \r
+functions are those that end in FromISR.  FreeRTOS maintains a separate \r
+interrupt API to ensure API function and interrupt entry is as fast and as \r
+simple as possible. */\r
+#define portENABLE_INTERRUPTS()        __asm volatile ( "MVTIPL        #0" )\r
+#ifdef configASSERT\r
+       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( ulPortGetIPL() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
+       #define portDISABLE_INTERRUPTS()        if( ulPortGetIPL() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) __asm volatile ( "MVTIPL    %0" ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) )\r
+#else\r
+       #define portDISABLE_INTERRUPTS()        __asm volatile ( "MVTIPL        %0" ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) )\r
+#endif\r
 \r
 /* Critical nesting counts are stored in the TCB. */\r
 #define portCRITICAL_NESTING_IN_TCB ( 1 )\r
index 0e6c6d3e3c2a3fc704456adf7015885da0029a49..e2d7480f946d8989d493f332c32d47f42df2f6cb 100644 (file)
@@ -115,11 +115,6 @@ portSTACK_TYPE and portBASE_TYPE. */
 #define portTICK_RATE_MS                       ( ( portTickType ) 1000 / configTICK_RATE_HZ )          \r
 #define portNOP()                                      __asm volatile( "NOP" )\r
 \r
-#ifdef configASSERT\r
-       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( ulPortGetIPL() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
-#endif\r
-\r
-\r
 /* Yield equivalent to "*portITU_SWINTR = 0x01; ( void ) *portITU_SWINTR;"\r
 where portITU_SWINTR is the location of the software interrupt register\r
 (0x000872E0).  Don't rely on the assembler to select a register, so instead \r
@@ -136,17 +131,22 @@ save and restore clobbered registers manually. */
 \r
 #define portYIELD_FROM_ISR( x )        if( x != pdFALSE ) portYIELD()\r
 \r
-/*\r
- * These macros should be called directly, but through the taskENTER_CRITICAL()\r
- * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then\r
- * the check to ensure the IPL is not being lowered will not be needed.  It is\r
- * included to ensure assert()s triggered by using an incorrect interrupt\r
- * priority do not result in the assert() handler inadvertently lowering the\r
- * priority mask, and in so doing allowing the offending interrupt to continue\r
- * triggering until stack space is exhausted.\r
- */\r
-#define portENABLE_INTERRUPTS()        __asm volatile ( "MVTIPL        #0" );\r
-#define portDISABLE_INTERRUPTS()       if( ulPortGetIPL() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) __asm volatile ( "MVTIPL    %0" ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) )\r
+/* These macros should not be called directly, but through the \r
+taskENTER_CRITICAL() and taskEXIT_CRITICAL() macros.  An extra check is \r
+performed if configASSERT() is defined to ensure an assertion handler does not \r
+inadvertently attempt to lower the IPL when the call to assert was triggered \r
+because the IPL value was found to be above    configMAX_SYSCALL_INTERRUPT_PRIORITY \r
+when an ISR safe FreeRTOS API function was executed.  ISR safe FreeRTOS API \r
+functions are those that end in FromISR.  FreeRTOS maintains a separate \r
+interrupt API to ensure API function and interrupt entry is as fast and as \r
+simple as possible. */\r
+#define portENABLE_INTERRUPTS()        __asm volatile ( "MVTIPL        #0" )\r
+#ifdef configASSERT\r
+       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( ulPortGetIPL() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
+       #define portDISABLE_INTERRUPTS()        if( ulPortGetIPL() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) __asm volatile ( "MVTIPL    %0" ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) )\r
+#else\r
+       #define portDISABLE_INTERRUPTS()        __asm volatile ( "MVTIPL        %0" ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) )\r
+#endif\r
 \r
 /* Critical nesting counts are stored in the TCB. */\r
 #define portCRITICAL_NESTING_IN_TCB ( 1 )\r
index 0c50981af8a32e4292e6dd649689cd129a6489bf..37a51a97af880ab96ebb8be844d049da0228ddc9 100644 (file)
@@ -120,10 +120,6 @@ portSTACK_TYPE and portBASE_TYPE. */
 #define portTICK_RATE_MS                       ( ( portTickType ) 1000 / configTICK_RATE_HZ )\r
 #define portNOP()                                      __no_operation()\r
 \r
-#ifdef configASSERT\r
-       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( __get_interrupt_level() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
-#endif\r
-\r
 #define portYIELD()                                                    \\r
        __asm volatile                                                  \\r
        (                                                                               \\r
@@ -135,17 +131,22 @@ portSTACK_TYPE and portBASE_TYPE. */
 \r
 #define portYIELD_FROM_ISR( x )        if( ( x ) != pdFALSE ) { portYIELD(); }\r
 \r
-/*\r
- * These macros should be called directly, but through the taskENTER_CRITICAL()\r
- * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then\r
- * the check to ensure the IPL is not being lowered will not be needed.  It is\r
- * included to ensure assert()s triggered by using an incorrect interrupt\r
- * priority do not result in the assert() handler inadvertently lowering the\r
- * priority mask, and in so doing allowing the offending interrupt to continue\r
- * triggering until stack space is exhausted.\r
- */\r
+/* These macros should not be called directly, but through the\r
+taskENTER_CRITICAL() and taskEXIT_CRITICAL() macros.  An extra check is\r
+performed if configASSERT() is defined to ensure an assertion handler does not\r
+inadvertently attempt to lower the IPL when the call to assert was triggered\r
+because the IPL value was found to be above    configMAX_SYSCALL_INTERRUPT_PRIORITY\r
+when an ISR safe FreeRTOS API function was executed.  ISR safe FreeRTOS API\r
+functions are those that end in FromISR.  FreeRTOS maintains a separate\r
+interrupt API to ensure API function and interrupt entry is as fast and as\r
+simple as possible. */\r
 #define portENABLE_INTERRUPTS()        __set_interrupt_level( ( unsigned char ) 0 )\r
-#define portDISABLE_INTERRUPTS()       if( __get_interrupt_level() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) __set_interrupt_level( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#ifdef configASSERT\r
+       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( __get_interrupt_level() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
+       #define portDISABLE_INTERRUPTS()        if( __get_interrupt_level() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) __set_interrupt_level( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#else\r
+       #define portDISABLE_INTERRUPTS()        __set_interrupt_level( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#endif\r
 \r
 /* Critical nesting counts are stored in the TCB. */\r
 #define portCRITICAL_NESTING_IN_TCB ( 1 )\r
@@ -157,8 +158,6 @@ extern void vTaskExitCritical( void );
 #define portEXIT_CRITICAL()            vTaskExitCritical()\r
 \r
 /* As this port allows interrupt nesting... */\r
-unsigned long ulPortGetIPL( void );\r
-void vPortSetIPL( unsigned long ulNewIPL );\r
 #define portSET_INTERRUPT_MASK_FROM_ISR() __get_interrupt_level(); portDISABLE_INTERRUPTS()\r
 #define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ) __set_interrupt_level( ( unsigned char ) ( uxSavedInterruptStatus ) )\r
 \r
index 45b373af50b57d84c88f06263e446e4cabd9af61..9e8f9556ef13dc76c296fa9f01ee492314572cfd 100644 (file)
@@ -117,10 +117,6 @@ portSTACK_TYPE and portBASE_TYPE. */
 #define portTICK_RATE_MS                       ( ( portTickType ) 1000 / configTICK_RATE_HZ )\r
 #define portNOP()                                      __no_operation()\r
 \r
-#ifdef configASSERT\r
-       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( __get_interrupt_level() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
-#endif\r
-\r
 /* Yield equivalent to "*portITU_SWINTR = 0x01; ( void ) *portITU_SWINTR;"\r
 where portITU_SWINTR is the location of the software interrupt register\r
 (0x000872E0).  Don't rely on the assembler to select a register, so instead\r
@@ -137,17 +133,22 @@ save and restore clobbered registers manually. */
 \r
 #define portYIELD_FROM_ISR( x )        if( ( x ) != pdFALSE ) portYIELD()\r
 \r
-/*\r
- * These macros should be called directly, but through the taskENTER_CRITICAL()\r
- * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then\r
- * the check to ensure the IPL is not being lowered will not be needed.  It is\r
- * included to ensure assert()s triggered by using an incorrect interrupt\r
- * priority do not result in the assert() handler inadvertently lowering the\r
- * priority mask, and in so doing allowing the offending interrupt to continue\r
- * triggering until stack space is exhausted.\r
- */\r
+/* These macros should not be called directly, but through the \r
+taskENTER_CRITICAL() and taskEXIT_CRITICAL() macros.  An extra check is \r
+performed if configASSERT() is defined to ensure an assertion handler does not \r
+inadvertently attempt to lower the IPL when the call to assert was triggered \r
+because the IPL value was found to be above    configMAX_SYSCALL_INTERRUPT_PRIORITY \r
+when an ISR safe FreeRTOS API function was executed.  ISR safe FreeRTOS API \r
+functions are those that end in FromISR.  FreeRTOS maintains a separate \r
+interrupt API to ensure API function and interrupt entry is as fast and as \r
+simple as possible. */\r
 #define portENABLE_INTERRUPTS()        __set_interrupt_level( ( unsigned char ) 0 )\r
-#define portDISABLE_INTERRUPTS()       if( __get_interrupt_level() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) __set_interrupt_level( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#ifdef configASSERT\r
+       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( __get_interrupt_level() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
+       #define portDISABLE_INTERRUPTS()        if( __get_interrupt_level() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) __set_interrupt_level( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#else\r
+       #define portDISABLE_INTERRUPTS()        __set_interrupt_level( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#endif\r
 \r
 /* Critical nesting counts are stored in the TCB. */\r
 #define portCRITICAL_NESTING_IN_TCB ( 1 )\r
@@ -159,8 +160,6 @@ extern void vTaskExitCritical( void );
 #define portEXIT_CRITICAL()            vTaskExitCritical()\r
 \r
 /* As this port allows interrupt nesting... */\r
-unsigned long ulPortGetIPL( void );\r
-void vPortSetIPL( unsigned long ulNewIPL );\r
 #define portSET_INTERRUPT_MASK_FROM_ISR() __get_interrupt_level(); portDISABLE_INTERRUPTS()\r
 #define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ) __set_interrupt_level( ( unsigned char ) ( uxSavedInterruptStatus ) )\r
 \r
index c8a07856d3b15d0f2c9b41ffd21523ff0fc78f41..74dc76410fad5494bc53ce53e7a1b6db4f24c01b 100644 (file)
@@ -129,7 +129,6 @@ value was found to be above configMAX_SYSCALL_INTERRUPT_PRIORITY when an ISR
 safe FreeRTOS API function was executed.  ISR safe FreeRTOS API functions are\r
 those that end in FromISR.  FreeRTOS maintains a separate interrupt API to\r
 ensure API function and interrupt entry is as fast and as simple as possible. */\r
-\r
 #ifdef configASSERT\r
        #define portDISABLE_INTERRUPTS()                                                                                        \\r
        {                                                                                                                                                       \\r
@@ -145,7 +144,7 @@ ensure API function and interrupt entry is as fast and as simple as possible. */
                        _CP0_SET_STATUS( ( ulStatus | ( configMAX_SYSCALL_INTERRUPT_PRIORITY << portIPL_SHIFT ) ) ); \\r
                }                                                                                                                                               \\r
        }\r
-#else\r
+#else /* configASSERT */\r
        #define portDISABLE_INTERRUPTS()                                                                                \\r
        {                                                                                                                                               \\r
        unsigned long ulStatus;                                                                                                 \\r
index 736375eb1b451467f4ddb24c3c878259bb723024..ae9d9418d78e812febcb6bfb5b5ac6bf6a6aba16 100644 (file)
@@ -118,10 +118,6 @@ than portSTACK_TYPE and portBASE_TYPE. */
 #define portTICK_RATE_MS                               ( ( portTickType ) 1000 / configTICK_RATE_HZ )\r
 #define portNOP()                                              nop()\r
 \r
-#ifdef configASSERT\r
-       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( get_ipl() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
-#endif\r
-\r
 #pragma inline_asm vPortYield\r
 static void vPortYield( void )\r
 {\r
@@ -140,17 +136,22 @@ static void vPortYield( void )
 #define portYIELD()    vPortYield()\r
 #define portYIELD_FROM_ISR( x )        if( x != pdFALSE ) { portYIELD(); }\r
 \r
-/*\r
- * These macros should be called directly, but through the taskENTER_CRITICAL()\r
- * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then\r
- * the check to ensure the IPL is not being lowered will not be needed.  It is\r
- * included to ensure assert()s triggered by using an incorrect interrupt\r
- * priority do not result in the assert() handler inadvertently lowering the\r
- * priority mask, and in so doing allowing the offending interrupt to continue\r
- * triggering until stack space is exhausted.\r
- */\r
-#define portENABLE_INTERRUPTS()        set_ipl( 0 )\r
-#define portDISABLE_INTERRUPTS()       if( get_ipl() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) set_ipl( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+/* These macros should not be called directly, but through the \r
+taskENTER_CRITICAL() and taskEXIT_CRITICAL() macros.  An extra check is \r
+performed if configASSERT() is defined to ensure an assertion handler does not \r
+inadvertently attempt to lower the IPL when the call to assert was triggered \r
+because the IPL value was found to be above    configMAX_SYSCALL_INTERRUPT_PRIORITY \r
+when an ISR safe FreeRTOS API function was executed.  ISR safe FreeRTOS API \r
+functions are those that end in FromISR.  FreeRTOS maintains a separate \r
+interrupt API to ensure API function and interrupt entry is as fast and as \r
+simple as possible. */\r
+#define portENABLE_INTERRUPTS()        set_ipl( ( long ) 0 )\r
+#ifdef configASSERT\r
+       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( get_ipl() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
+       #define portDISABLE_INTERRUPTS()        if( get_ipl() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) set_ipl( ( long ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#else\r
+       #define portDISABLE_INTERRUPTS()        set_ipl( ( long ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#endif\r
 \r
 /* Critical nesting counts are stored in the TCB. */\r
 #define portCRITICAL_NESTING_IN_TCB ( 1 )\r
index 721334a4866b3263d659f8da217e16f8c2699a89..b6030cca76fbb46990cc2ab581edc8c6e16efb32 100644 (file)
@@ -118,10 +118,6 @@ portSTACK_TYPE and portBASE_TYPE. */
 #define portTICK_RATE_MS                               ( ( portTickType ) 1000 / configTICK_RATE_HZ )          \r
 #define portNOP()                                              nop()\r
 \r
-#ifdef configASSERT\r
-       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( get_ipl() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
-#endif\r
-\r
 #pragma inline_asm vPortYield\r
 static void vPortYield( void )\r
 {\r
@@ -140,17 +136,22 @@ static void vPortYield( void )
 #define portYIELD()    vPortYield()\r
 #define portYIELD_FROM_ISR( x )        if( x != pdFALSE ) portYIELD()\r
 \r
-/*\r
- * These macros should be called directly, but through the taskENTER_CRITICAL()\r
- * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then\r
- * the check to ensure the IPL is not being lowered will not be needed.  It is\r
- * included to ensure assert()s triggered by using an incorrect interrupt\r
- * priority do not result in the assert() handler inadvertently lowering the\r
- * priority mask, and in so doing allowing the offending interrupt to continue\r
- * triggering until stack space is exhausted.\r
- */\r
-#define portENABLE_INTERRUPTS()        set_ipl( 0 )\r
-#define portDISABLE_INTERRUPTS()       if( get_ipl() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) set_ipl( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+/* These macros should not be called directly, but through the \r
+taskENTER_CRITICAL() and taskEXIT_CRITICAL() macros.  An extra check is \r
+performed if configASSERT() is defined to ensure an assertion handler does not \r
+inadvertently attempt to lower the IPL when the call to assert was triggered \r
+because the IPL value was found to be above    configMAX_SYSCALL_INTERRUPT_PRIORITY \r
+when an ISR safe FreeRTOS API function was executed.  ISR safe FreeRTOS API \r
+functions are those that end in FromISR.  FreeRTOS maintains a separate \r
+interrupt API to ensure API function and interrupt entry is as fast and as \r
+simple as possible. */\r
+#define portENABLE_INTERRUPTS()        set_ipl( ( long ) 0 )\r
+#ifdef configASSERT\r
+       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( get_ipl() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
+       #define portDISABLE_INTERRUPTS()        if( get_ipl() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) set_ipl( ( long ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#else\r
+       #define portDISABLE_INTERRUPTS()        set_ipl( ( long ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#endif\r
 \r
 /* Critical nesting counts are stored in the TCB. */\r
 #define portCRITICAL_NESTING_IN_TCB ( 1 )\r
index 5a249d371fc295a0bfc09b99b7b861ad42a4294e..b6fe7bc7e3a07d2453a2d49fff461f2205f34552 100644 (file)
@@ -118,9 +118,6 @@ portSTACK_TYPE and portBASE_TYPE. */
 #define portTICK_RATE_MS                               ( ( portTickType ) 1000 / configTICK_RATE_HZ )\r
 #define portNOP()                                              nop()\r
 \r
-#ifdef configASSERT\r
-       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( get_ipl() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
-#endif\r
 \r
 #pragma inline_asm vPortYield\r
 static void vPortYield( void )\r
@@ -140,17 +137,22 @@ static void vPortYield( void )
 #define portYIELD()    vPortYield()\r
 #define portYIELD_FROM_ISR( x )        if( x != pdFALSE ) portYIELD()\r
 \r
-/*\r
- * These macros should be called directly, but through the taskENTER_CRITICAL()\r
- * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then\r
- * the check to ensure the IPL is not being lowered will not be needed.  It is\r
- * included to ensure assert()s triggered by using an incorrect interrupt\r
- * priority do not result in the assert() handler inadvertently lowering the\r
- * priority mask, and in so doing allowing the offending interrupt to continue\r
- * triggering until stack space is exhausted.\r
- */\r
-#define portENABLE_INTERRUPTS()        set_ipl( 0 )\r
-#define portDISABLE_INTERRUPTS()       if( get_ipl() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) set_ipl( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+/* These macros should not be called directly, but through the \r
+taskENTER_CRITICAL() and taskEXIT_CRITICAL() macros.  An extra check is \r
+performed if configASSERT() is defined to ensure an assertion handler does not \r
+inadvertently attempt to lower the IPL when the call to assert was triggered \r
+because the IPL value was found to be above    configMAX_SYSCALL_INTERRUPT_PRIORITY \r
+when an ISR safe FreeRTOS API function was executed.  ISR safe FreeRTOS API \r
+functions are those that end in FromISR.  FreeRTOS maintains a separate \r
+interrupt API to ensure API function and interrupt entry is as fast and as \r
+simple as possible. */\r
+#define portENABLE_INTERRUPTS()        set_ipl( ( long ) 0 )\r
+#ifdef configASSERT\r
+       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( get_ipl() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )\r
+       #define portDISABLE_INTERRUPTS()        if( get_ipl() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) set_ipl( ( long ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#else\r
+       #define portDISABLE_INTERRUPTS()        set_ipl( ( long ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#endif\r
 \r
 /* Critical nesting counts are stored in the TCB. */\r
 #define portCRITICAL_NESTING_IN_TCB ( 1 )\r