I have an interrupt handler that looks like this:
void FX::handleFXInterrupt() {
FXData d;
#if 0
TRACE("handleFXInterrupt");
#endif
interrupt_count += 1;
trigger1();
mag_interrupt_source = readByte(device, FXOS8700_M_INT_SOURCE);
interrupt_source = readByte(device, FXOS8700_INT_SOURCE);
while (interrupt_source | mag_interrupt_source) {
The attach looks like this:
ttachInterrupt(getInterruptPin(device), &FX::handleFXInterrupt, this, FALLING);
Part of the time this function is called properly in response to the pin interrupt and the stack walkback looks like this:
But a fraction of the time panic_ is called and the walkback looks like this:
Notice how similar the call sequence looks. It is as if it’s getting to prvGetRegistersFromStack because a bug is causing the wrong address to be passed to the C++ invocation code.
This has really ruined my day. I’ve got no choice but to make the handler a helper function instead of member function in the hope that deviceOS can get that right.
This is with deviceOS 2.1 (cannot use a more recent version). The hardware is an argon.