Das ist kein Bug. Die Variable wird wegoptimiert. Der compiler denkt das der Interrupt nicht ausgeführt wird und dadurch die Variable unnötig Platz verschwendet (weil diese nicht gesetzt wird). Du kannst dem Compiler aber sagen das er diese Variable nicht wegoptimieren darf indem du "volatile" verwendest.

Z.B.: volatile int detect=0;

Wenn du es so schreibst wird es funktionieren. Wenn du es debuggst, kannst du die Variable beobachten. Normalerweise steht dann "optimized away".

MfG Hannes