This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Please assist with Usage Fault /Illegal unaligned load or store Cortex M7 Keil MDK-PRO

Problem

Once in a blue moon (every ~500 hours of run time, non-deterministic) I am getting a Usage Fault/ Illegal unaligned load or store. Please, help me to trace the fault to actual offending instruction and extract additional info.

What have I done so far:

Per ARM AN209 (http://www.keil.com/appnotes/files/apnt209.pdf) I have installed a hard fault handler.

extern C void HardFault_Handler(void) 
{
    __asm volatile
    (
         tst lr, #4                                                \n
         ite eq                                                    \n
         mrseq r0, msp                                             \n
         mrsne r0, psp                                             \n
         ldr r1, [r0, #24]                                         \n
         ldr r2, handler2_address_const                            \n
         bx r2                                                     \n
         handler2_address_const: .word prvGetRegistersFromStack    \n
    );
}

Values of the registers extracted from the exception stack frame are:

HFSR is 0x40000000 indicating Forced (I do not have a separate handler for UsageFaults)

CFSR is 0x01000000 indicating UsageFault, UNALIGNED access

xSPR is 0100 0003

MMFAR is 0

BFAR is 0

pc (0x0803A758)  points to 

a dead loop of osRtxIdleThread. 

This could not be the offending instruction, could it? What am I missing?

I have checked the RM0385 Reference manual, I see that the exception stack  has been parsed properly:

My system is:

Cortex M7 (STM32F746NG..) 

Keil RTOS

Once the unit is stalled, I have connected to it using SEGGER J-Link/J-Trace for Cortex M (using Ozone), stopped the program, and examined the memory contents.

Unaligned access fault trap (UNALIGN_TRP) is disabled ( per reference it means that only ... can generate this fault)

I read:

https://community.arm.com/developer/tools-software/tools/f/armds-forum/402/debugging-a-usage-fault-for-an-unaligned-memory-access

http://www.keil.com/support/docs/3777.htm (but no external SDRAM is used)

 RM0385 Reference manual

also read:

https://medium.com/@iLevex/the-curious-case-of-unaligned-access-on-arm-5dd0ebe24965

https://stackoverflow.com/questions/18269181/unaligned-access-causes-error-on-arm-cortex-m4

https://stackoverflow.com/questions/20926386/what-is-non-aligned-access-arm-keil

https://stackoverflow.com/questions/5119496/arm-unaligned-memory-access-workaround

https://stackoverflow.com/questions/18269181/unaligned-access-causes-error-on-arm-cortex-m4