I'm stuck with a stupid issue on a Cortex-M3 (LPC1788 by NXP).
It's a classical issue that happens randomly and in different ways when
the code is slightly changed, so it's very difficult to debug.
MCUXpresso (IDE from NXP) and Ozone (a software from Segger) says that
IBUSERR and FORCED are set when HardFault exception occurs. I understand
it is related to a program counter with a wrong address, maybe a
corrupted function pointer. Indeed, when the HardFault triggers,
MCUExpresso shows the stacked PC register as 0x824490, that is
Stacked LR should say something about the calling function
(GUI__DoAlphaBlending of emWin). Following disassembly the faulty
instruction should be:
Stacked R3 (at the fault moment) is 0x24491 (_GetDevProp of emWin), that
should be correct, but stacked PC is 0x824490. It seems the 20-th bit
was flipped for some reason.
I can't explain why this happens, except for a hardware issue with the MCU.