Complete additions of portASSERT_IF_INTERRUPT_PRIORITY_INVALID() for all RX compiler ports.

diff --git a/FreeRTOS/Source/portable/GCC/RX100/portmacro.h b/FreeRTOS/Source/portable/GCC/RX100/portmacro.h
index f5317c0..b3cff60 100644
--- a/FreeRTOS/Source/portable/GCC/RX100/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/RX100/portmacro.h
@@ -115,6 +115,10 @@
 #define portTICK_RATE_MS			( ( portTickType ) 1000 / configTICK_RATE_HZ )

 #define portNOP()					__asm volatile( "NOP" )

 

+#ifdef configASSERT

+	#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( ulPortGetIPL() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )

+#endif

+

 /* Save clobbered register, set ITU SWINR (at address 0x872E0), read the value

 back to ensure it is set before continuing, then restore the clobbered

 register. */

@@ -131,10 +135,15 @@
 

 /*

  * These macros should be called directly, but through the taskENTER_CRITICAL()

- * and taskEXIT_CRITICAL() macros.

+ * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then

+ * the check to ensure the IPL is not being lowered will not be needed.  It is

+ * included to ensure assert()s triggered by using an incorrect interrupt

+ * priority do not result in the assert() handler inadvertently lowering the

+ * priority mask, and in so doing allowing the offending interrupt to continue

+ * triggering until stack space is exhausted.

  */

 #define portENABLE_INTERRUPTS() 	__asm volatile ( "MVTIPL	#0" );

-#define portDISABLE_INTERRUPTS() 	__asm volatile ( "MVTIPL	%0" ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) )

+#define portDISABLE_INTERRUPTS() 	if( ulPortGetIPL() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) __asm volatile ( "MVTIPL	%0" ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) )

 

 /* Critical nesting counts are stored in the TCB. */

 #define portCRITICAL_NESTING_IN_TCB ( 1 )

diff --git a/FreeRTOS/Source/portable/GCC/RX600/portmacro.h b/FreeRTOS/Source/portable/GCC/RX600/portmacro.h
index f92bf45..0e6c6d3 100644
--- a/FreeRTOS/Source/portable/GCC/RX600/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/RX600/portmacro.h
@@ -115,6 +115,11 @@
 #define portTICK_RATE_MS			( ( portTickType ) 1000 / configTICK_RATE_HZ )		

 #define portNOP()					__asm volatile( "NOP" )

 

+#ifdef configASSERT

+	#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( ulPortGetIPL() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )

+#endif

+

+

 /* Yield equivalent to "*portITU_SWINTR = 0x01; ( void ) *portITU_SWINTR;"

 where portITU_SWINTR is the location of the software interrupt register

 (0x000872E0).  Don't rely on the assembler to select a register, so instead 

@@ -133,10 +138,15 @@
 

 /*

  * These macros should be called directly, but through the taskENTER_CRITICAL()

- * and taskEXIT_CRITICAL() macros.

+ * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then

+ * the check to ensure the IPL is not being lowered will not be needed.  It is

+ * included to ensure assert()s triggered by using an incorrect interrupt

+ * priority do not result in the assert() handler inadvertently lowering the

+ * priority mask, and in so doing allowing the offending interrupt to continue

+ * triggering until stack space is exhausted.

  */

 #define portENABLE_INTERRUPTS() 	__asm volatile ( "MVTIPL	#0" );

-#define portDISABLE_INTERRUPTS() 	__asm volatile ( "MVTIPL	%0" ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) )

+#define portDISABLE_INTERRUPTS() 	if( ulPortGetIPL() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) __asm volatile ( "MVTIPL	%0" ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) )

 

 /* Critical nesting counts are stored in the TCB. */

 #define portCRITICAL_NESTING_IN_TCB ( 1 )

diff --git a/FreeRTOS/Source/portable/IAR/RX100/portmacro.h b/FreeRTOS/Source/portable/IAR/RX100/portmacro.h
index d8c421f..0c50981 100644
--- a/FreeRTOS/Source/portable/IAR/RX100/portmacro.h
+++ b/FreeRTOS/Source/portable/IAR/RX100/portmacro.h
@@ -120,6 +120,10 @@
 #define portTICK_RATE_MS			( ( portTickType ) 1000 / configTICK_RATE_HZ )

 #define portNOP()					__no_operation()

 

+#ifdef configASSERT

+	#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( __get_interrupt_level() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )

+#endif

+

 #define portYIELD()							\

 	__asm volatile							\

 	(										\

@@ -133,10 +137,15 @@
 

 /*

  * These macros should be called directly, but through the taskENTER_CRITICAL()

- * and taskEXIT_CRITICAL() macros.

+ * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then

+ * the check to ensure the IPL is not being lowered will not be needed.  It is

+ * included to ensure assert()s triggered by using an incorrect interrupt

+ * priority do not result in the assert() handler inadvertently lowering the

+ * priority mask, and in so doing allowing the offending interrupt to continue

+ * triggering until stack space is exhausted.

  */

 #define portENABLE_INTERRUPTS() 	__set_interrupt_level( ( unsigned char ) 0 )

-#define portDISABLE_INTERRUPTS() 	__set_interrupt_level( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )

+#define portDISABLE_INTERRUPTS() 	if( __get_interrupt_level() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) __set_interrupt_level( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )

 

 /* Critical nesting counts are stored in the TCB. */

 #define portCRITICAL_NESTING_IN_TCB ( 1 )

diff --git a/FreeRTOS/Source/portable/IAR/RX600/portmacro.h b/FreeRTOS/Source/portable/IAR/RX600/portmacro.h
index 3f409cf..45b373a 100644
--- a/FreeRTOS/Source/portable/IAR/RX600/portmacro.h
+++ b/FreeRTOS/Source/portable/IAR/RX600/portmacro.h
@@ -117,6 +117,10 @@
 #define portTICK_RATE_MS			( ( portTickType ) 1000 / configTICK_RATE_HZ )

 #define portNOP()					__no_operation()

 

+#ifdef configASSERT

+	#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( __get_interrupt_level() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )

+#endif

+

 /* Yield equivalent to "*portITU_SWINTR = 0x01; ( void ) *portITU_SWINTR;"

 where portITU_SWINTR is the location of the software interrupt register

 (0x000872E0).  Don't rely on the assembler to select a register, so instead

@@ -135,10 +139,15 @@
 

 /*

  * These macros should be called directly, but through the taskENTER_CRITICAL()

- * and taskEXIT_CRITICAL() macros.

+ * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then

+ * the check to ensure the IPL is not being lowered will not be needed.  It is

+ * included to ensure assert()s triggered by using an incorrect interrupt

+ * priority do not result in the assert() handler inadvertently lowering the

+ * priority mask, and in so doing allowing the offending interrupt to continue

+ * triggering until stack space is exhausted.

  */

 #define portENABLE_INTERRUPTS() 	__set_interrupt_level( ( unsigned char ) 0 )

-#define portDISABLE_INTERRUPTS() 	__set_interrupt_level( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )

+#define portDISABLE_INTERRUPTS() 	if( __get_interrupt_level() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) __set_interrupt_level( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )

 

 /* Critical nesting counts are stored in the TCB. */

 #define portCRITICAL_NESTING_IN_TCB ( 1 )

diff --git a/FreeRTOS/Source/portable/Renesas/RX100/portmacro.h b/FreeRTOS/Source/portable/Renesas/RX100/portmacro.h
index 66a59be..736375e 100644
--- a/FreeRTOS/Source/portable/Renesas/RX100/portmacro.h
+++ b/FreeRTOS/Source/portable/Renesas/RX100/portmacro.h
@@ -142,10 +142,15 @@
 

 /*

  * These macros should be called directly, but through the taskENTER_CRITICAL()

- * and taskEXIT_CRITICAL() macros.

+ * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then

+ * the check to ensure the IPL is not being lowered will not be needed.  It is

+ * included to ensure assert()s triggered by using an incorrect interrupt

+ * priority do not result in the assert() handler inadvertently lowering the

+ * priority mask, and in so doing allowing the offending interrupt to continue

+ * triggering until stack space is exhausted.

  */

 #define portENABLE_INTERRUPTS() 	set_ipl( 0 )

-#define portDISABLE_INTERRUPTS() 	set_ipl( configMAX_SYSCALL_INTERRUPT_PRIORITY )

+#define portDISABLE_INTERRUPTS() 	if( get_ipl() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) set_ipl( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )

 

 /* Critical nesting counts are stored in the TCB. */

 #define portCRITICAL_NESTING_IN_TCB ( 1 )

diff --git a/FreeRTOS/Source/portable/Renesas/RX200/portmacro.h b/FreeRTOS/Source/portable/Renesas/RX200/portmacro.h
index 4c9c88e..721334a 100644
--- a/FreeRTOS/Source/portable/Renesas/RX200/portmacro.h
+++ b/FreeRTOS/Source/portable/Renesas/RX200/portmacro.h
@@ -142,10 +142,15 @@
 

 /*

  * These macros should be called directly, but through the taskENTER_CRITICAL()

- * and taskEXIT_CRITICAL() macros.

+ * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then

+ * the check to ensure the IPL is not being lowered will not be needed.  It is

+ * included to ensure assert()s triggered by using an incorrect interrupt

+ * priority do not result in the assert() handler inadvertently lowering the

+ * priority mask, and in so doing allowing the offending interrupt to continue

+ * triggering until stack space is exhausted.

  */

 #define portENABLE_INTERRUPTS() 	set_ipl( 0 )

-#define portDISABLE_INTERRUPTS() 	set_ipl( configMAX_SYSCALL_INTERRUPT_PRIORITY )

+#define portDISABLE_INTERRUPTS() 	if( get_ipl() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) set_ipl( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )

 

 /* Critical nesting counts are stored in the TCB. */

 #define portCRITICAL_NESTING_IN_TCB ( 1 )

diff --git a/FreeRTOS/Source/portable/Renesas/RX600/portmacro.h b/FreeRTOS/Source/portable/Renesas/RX600/portmacro.h
index 4c9c88e..5a249d3 100644
--- a/FreeRTOS/Source/portable/Renesas/RX600/portmacro.h
+++ b/FreeRTOS/Source/portable/Renesas/RX600/portmacro.h
@@ -56,19 +56,19 @@
     ***************************************************************************

 

 

-    http://www.FreeRTOS.org - Documentation, books, training, latest versions, 

+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,

     license and Real Time Engineers Ltd. contact details.

 

     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,

     including FreeRTOS+Trace - an indispensable productivity tool, and our new

     fully thread aware and reentrant UDP/IP stack.

 

-    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High 

-    Integrity Systems, who sell the code with commercial support, 

+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High

+    Integrity Systems, who sell the code with commercial support,

     indemnification and middleware, under the OpenRTOS brand.

-    

-    http://www.SafeRTOS.com - High Integrity Systems also provide a safety 

-    engineered and independently SIL3 certified version for use in safety and 

+

+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety

+    engineered and independently SIL3 certified version for use in safety and

     mission critical applications that require provable dependability.

 */

 

@@ -84,7 +84,7 @@
 #include "machine.h"

 

 /*-----------------------------------------------------------

- * Port specific definitions.  

+ * Port specific definitions.

  *

  * The settings in this file configure FreeRTOS correctly for the

  * given hardware and compiler.

@@ -115,7 +115,7 @@
 /* Hardware specifics. */

 #define portBYTE_ALIGNMENT				8	/* Could make four, according to manual. */

 #define portSTACK_GROWTH				-1

-#define portTICK_RATE_MS				( ( portTickType ) 1000 / configTICK_RATE_HZ )		

+#define portTICK_RATE_MS				( ( portTickType ) 1000 / configTICK_RATE_HZ )

 #define portNOP()						nop()

 

 #ifdef configASSERT

@@ -142,10 +142,15 @@
 

 /*

  * These macros should be called directly, but through the taskENTER_CRITICAL()

- * and taskEXIT_CRITICAL() macros.

+ * and taskEXIT_CRITICAL() macros.  If the RTOS is being used correctly then

+ * the check to ensure the IPL is not being lowered will not be needed.  It is

+ * included to ensure assert()s triggered by using an incorrect interrupt

+ * priority do not result in the assert() handler inadvertently lowering the

+ * priority mask, and in so doing allowing the offending interrupt to continue

+ * triggering until stack space is exhausted.

  */

 #define portENABLE_INTERRUPTS() 	set_ipl( 0 )

-#define portDISABLE_INTERRUPTS() 	set_ipl( configMAX_SYSCALL_INTERRUPT_PRIORITY )

+#define portDISABLE_INTERRUPTS() 	if( get_ipl() < configMAX_SYSCALL_INTERRUPT_PRIORITY ) set_ipl( ( unsigned char ) configMAX_SYSCALL_INTERRUPT_PRIORITY )

 

 /* Critical nesting counts are stored in the TCB. */

 #define portCRITICAL_NESTING_IN_TCB ( 1 )