Karl schrieb:
> Bei meinem aktuellen
> Programm ist sie notwendig damit das Programm nach einem Sleep Mode an
> der Stelle weiter arbeitet an der es in den Sleep Modus gegangen ist und
> nicht komplett neu startet. Aber warum?
Weil du aus dem Schlaf nur durch einen Interrupt geweckt werden
kannst, und ein aktivierter Interrupt springt immer zu seinem
Interruptvektor. Auf diesem musst du eine gültige ISR hinterlegen,
da die Bibliothek ansonsten einen Sprung auf die Adresse 0 als
default-ISR einträgt (da ein aktivierter Interrupt mit fehlender
ISR in aller Regel ein Programmierfehler ist, auf den man auf diese
Weise am ehesten aufmerksam gemacht wird).
In deinem Falle braucht die ISR selbst aber keinen Code, da kannst
du auch schreiben:
1 | EMPTY_INTERRUPT(INT0_vect);
|
Andererseits: je nachdem, wer den Interrupt auslöst, wirst du u. U.
den Interrupt selbst in der ISR abschalten wollen, damit er nicht
zu schnell wieder triggert. Das ist insbesondere bei einem
pegelgetriggerten Externinterrupt praktisch zwingend notwendig.