Default the definition of portASSERT_IF_IN_ISR() to nothing if it is not defined.

Helper updates to allow a count of the number of mutexes held to be added.
Updates to the CCS Cortex-R4 implementation necessitated by a change in compiler semantics.
Update PIC32MX and MZ ports to assert if a non ISR safe function is called from an ISR.
This commit is contained in:
Richard Barry 2014-06-16 12:51:35 +00:00
parent b4659d8872
commit 583b144bc3
7 changed files with 79 additions and 26 deletions

View file

@ -1,7 +1,7 @@
;/*
; FreeRTOS V8.0.1 - Copyright (C) 2014 Real Time Engineers Ltd.
; All rights reserved
;
;
;
; ***************************************************************************
; * *
@ -61,7 +61,7 @@
;/*-----------------------------------------------------------*/
;
; Save Task Context
; Save Task Context
;
portSAVE_CONTEXT .macro
DSB
@ -101,7 +101,7 @@ portSAVE_CONTEXT .macro
; If the task is not using a floating point context then skip the
; saving of the FPU registers.
BEQ PC+3
BEQ $+16
FSTMDBD LR!, {D0-D15}
FMRX R1, FPSCR
STMFD LR!, {R1}
@ -137,7 +137,7 @@ portRESTORE_CONTEXT .macro
; If the task is not using a floating point context then skip the
; VFP register loads.
BEQ PC+3
BEQ $+16
; Restore the floating point context.
LDMFD LR!, {R0}

View file

@ -315,6 +315,16 @@ 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 so
assert() if it is being called from an interrupt context. Only API
functions that end in "FromISR" can be used in an interrupt. Only assert if
the critical nesting count is 1 to protect against recursive calls if the
assert function also uses a critical section. */
if( ulCriticalNesting == 1 )
{
configASSERT( ulPortInterruptNesting == 0 );
}
}
/*-----------------------------------------------------------*/

View file

@ -204,8 +204,8 @@ uint32_t ulCause; \
_CP0_SET_CAUSE( ulCause ); \
}
#define portCURRENT_INTERRUPT_PRIORITY ( ( _CP0_GET_STATUS() & portALL_IPL_BITS ) >> portIPL_SHIFT )
#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( portCURRENT_INTERRUPT_PRIORITY <= configMAX_SYSCALL_INTERRUPT_PRIORITY )
extern volatile UBaseType_t uxInterruptNesting;
#define portASSERT_IF_IN_ISR() configASSERT( uxInterruptNesting == 0 )
#define portNOP() __asm volatile ( "nop" )

View file

@ -206,8 +206,8 @@ uint32_t ulCause; \
_CP0_SET_CAUSE( ulCause ); \
}
#define portCURRENT_INTERRUPT_PRIORITY ( ( _CP0_GET_STATUS() & portALL_IPL_BITS ) >> portIPL_SHIFT )
#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT( portCURRENT_INTERRUPT_PRIORITY <= configMAX_SYSCALL_INTERRUPT_PRIORITY )
extern volatile UBaseType_t uxInterruptNesting;
#define portASSERT_IF_IN_ISR() configASSERT( uxInterruptNesting == 0 )
#define portNOP() __asm volatile ( "nop" )