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

pull/1/head
Richard Barry 12 years ago
parent 18caebf1d1
commit 5d902f2b9c

@ -115,6 +115,10 @@ portSTACK_TYPE and portBASE_TYPE. */
#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ ) #define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ )
#define portNOP() __asm volatile( "NOP" ) #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 /* Save clobbered register, set ITU SWINR (at address 0x872E0), read the value
back to ensure it is set before continuing, then restore the clobbered back to ensure it is set before continuing, then restore the clobbered
register. */ register. */
@ -131,10 +135,15 @@ register. */
/* /*
* These macros should be called directly, but through the taskENTER_CRITICAL() * 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 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. */ /* Critical nesting counts are stored in the TCB. */
#define portCRITICAL_NESTING_IN_TCB ( 1 ) #define portCRITICAL_NESTING_IN_TCB ( 1 )

@ -115,6 +115,11 @@ portSTACK_TYPE and portBASE_TYPE. */
#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ ) #define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ )
#define portNOP() __asm volatile( "NOP" ) #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;" /* Yield equivalent to "*portITU_SWINTR = 0x01; ( void ) *portITU_SWINTR;"
where portITU_SWINTR is the location of the software interrupt register where portITU_SWINTR is the location of the software interrupt register
(0x000872E0). Don't rely on the assembler to select a register, so instead (0x000872E0). Don't rely on the assembler to select a register, so instead
@ -133,10 +138,15 @@ save and restore clobbered registers manually. */
/* /*
* These macros should be called directly, but through the taskENTER_CRITICAL() * 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 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. */ /* Critical nesting counts are stored in the TCB. */
#define portCRITICAL_NESTING_IN_TCB ( 1 ) #define portCRITICAL_NESTING_IN_TCB ( 1 )

@ -120,6 +120,10 @@ portSTACK_TYPE and portBASE_TYPE. */
#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ ) #define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ )
#define portNOP() __no_operation() #define portNOP() __no_operation()
#ifdef configASSERT
#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( ( __get_interrupt_level() <= configMAX_SYSCALL_INTERRUPT_PRIORITY ) )
#endif
#define portYIELD() \ #define portYIELD() \
__asm volatile \ __asm volatile \
( \ ( \
@ -133,10 +137,15 @@ portSTACK_TYPE and portBASE_TYPE. */
/* /*
* These macros should be called directly, but through the taskENTER_CRITICAL() * 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 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. */ /* Critical nesting counts are stored in the TCB. */
#define portCRITICAL_NESTING_IN_TCB ( 1 ) #define portCRITICAL_NESTING_IN_TCB ( 1 )

@ -117,6 +117,10 @@ portSTACK_TYPE and portBASE_TYPE. */
#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ ) #define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ )
#define portNOP() __no_operation() #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;" /* Yield equivalent to "*portITU_SWINTR = 0x01; ( void ) *portITU_SWINTR;"
where portITU_SWINTR is the location of the software interrupt register where portITU_SWINTR is the location of the software interrupt register
(0x000872E0). Don't rely on the assembler to select a register, so instead (0x000872E0). Don't rely on the assembler to select a register, so instead
@ -135,10 +139,15 @@ save and restore clobbered registers manually. */
/* /*
* These macros should be called directly, but through the taskENTER_CRITICAL() * 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 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. */ /* Critical nesting counts are stored in the TCB. */
#define portCRITICAL_NESTING_IN_TCB ( 1 ) #define portCRITICAL_NESTING_IN_TCB ( 1 )

@ -142,10 +142,15 @@ static void vPortYield( void )
/* /*
* These macros should be called directly, but through the taskENTER_CRITICAL() * 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 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. */ /* Critical nesting counts are stored in the TCB. */
#define portCRITICAL_NESTING_IN_TCB ( 1 ) #define portCRITICAL_NESTING_IN_TCB ( 1 )

@ -142,10 +142,15 @@ static void vPortYield( void )
/* /*
* These macros should be called directly, but through the taskENTER_CRITICAL() * 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 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. */ /* Critical nesting counts are stored in the TCB. */
#define portCRITICAL_NESTING_IN_TCB ( 1 ) #define portCRITICAL_NESTING_IN_TCB ( 1 )

@ -142,10 +142,15 @@ static void vPortYield( void )
/* /*
* These macros should be called directly, but through the taskENTER_CRITICAL() * 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 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. */ /* Critical nesting counts are stored in the TCB. */
#define portCRITICAL_NESTING_IN_TCB ( 1 ) #define portCRITICAL_NESTING_IN_TCB ( 1 )

Loading…
Cancel
Save