INTERRUPT ist vor allem dann zweckmässig, wenn manche ISRs eine kleine Interrupt-Respond-Time haben müssen und andere ISRs vergleichsweise komplex sind und lange dauern.
Dann macht man die lange ISR unterbrechbar und die kurzen, schnell abzuarbeitenden als normale SIGNAL().
Abstürzen tut da nix. Ein fehlerhaftes Programm nur mit SIGNAL() schmiert genauso ab
In der 4er Version scheint es kein Analogon zu INTERRUPT zu geben, da muss man selber mit den Attributen rumhudeln.
Übrigens ist
SIGNAL (...)
{
sei();
...
}
NICHT gleichbedeitend mit
INTERRUPT (...)
{
...
}
Letzteres führt zu teilweise deutlich kleineren Response-Zeiten, weil das sei schon am Anfang des ISR-Prologs eingefügt wird!
Ein cli() am Ende der ISR braucht man übrigens nicht. SREG steht ja aufm Stack.
Lesezeichen