PIC32MZ EF with FPU AddressErrorException in isr

Hello, the xISRStack needs to be 8 Byte aligned for PIC32 MZ EF with FPU and it is not 8 byte aligned. Error occurs only when the hardware floating point option is released in the compiler. The MIPS® Architecture For Programmers manual is written: Restrictions: An AddressErrorException occurs if EffectiveAddress2..0 ≠ 0 (not doubleword-aligned). Original FreeRTOS V9.00 Source: File port.c Line 192: StackTypet xISRStack[ configISRSTACKSIZE ] = { 0 }; const StackTypet * const xISRStackTop = &( xISRStack[ configISRSTACKSIZE – 7 ] ); My suggestion to improve is : StackTypet attribute ((aligned (8))) xISRStack[ (configISRSTACK_SIZE & 0xFFFFFFFE) ] = { 0 } const StackTypet * const xISRStackTop = &( xISRStack[ (configISRSTACK_SIZE & 0xFFFFFFFE) – 8 ] ); Best regards, Uli

PIC32MZ EF with FPU AddressErrorException in isr

Hi Uli – thanks for taking the time. This problem was already noted, although the fix in not publicly available yet. The relevant part of the updated code is below. I would be grateful if you could try it and confirm it fixes your issue. The original code is commented out, and the replacement code following immediately after:
/* The stack used by interrupt service routines that cause a context 
switch.  8
byte alignment is required to allow double word floating point stack pushes
generated by the compiler. */
//StackType_t xISRStack[ configISR_STACK_SIZE ] = { 0 };
StackType_t xISRStack[ configISR_STACK_SIZE ] __attribute__ ( ( aligned( 
8 ) ) ) = { 0 };

/* The top of stack value ensures there is enough space to store 6 
registers on
the callers stack, as some functions seem to want to do this. */
//const StackType_t * const xISRStackTop = &( xISRStack[ 
configISR_STACK_SIZE - 7 ] );
const StackType_t * const xISRStackTop = &( xISRStack[ 
configISR_STACK_SIZE - 8 ] );

PIC32MZ EF with FPU AddressErrorException in isr

Hi Real Time Engineers, this code fixed the issue and it’s semilar to my suggestion, excecpt the optional mask (configISRSTACKSIZE & 0xFFFFFFFE). I have made this to ensure that any defenition of configISRSTACKSIZE size will work. Default is 400 and it’s ok, but odd sizes may result in 4 Byte aligned top of stack. An additional information text in the FreeRTOSConfig.h would also be useful. Thank you also for your quick response!