Hi, ich versuche mich gerade in GCC und verstehe nicht genau den Unterschied zwischen der Schreibweise ISR (TIMER0_OVF_vect) und INTERRUPT oder SIGNAL (SIG_OVERFLOW0). Beide Ausdrücke zeigen doch auf _VECTOR(9) und sollten somit identisch sein?
SIGNAL(SIG_xxx) ist veraltet und wird nur noch aus Kompatibilitätsgründen angeboten. Die aktuelle Version ist ISR(xxx_vect).
INNTERRUPT und SIGNAL sind veraltet (aber ich nutze sie auch noch ;-)) SIGNAL ist eine ununterbrechbare ISR, während bei INTERRUPT zu Anfang der ISR vom Compiler ein SEI ausgegeben wird um IRQs kaskadieren zu können. Dieses SEI steht früher im Code als bei
1 | SIGNAL (...) |
2 | {
|
3 | sei(); |
4 | }
|
weil es vor dem ISR-Prolog ausgegeben wird und nicht danach . Ein abschliessendes CLI ist nicht notwendig, weil das I-Flag durch RETI wieder aktiviert wird. Ausser natürlich die ISR ist NAKED.
Hallo, ich werde mich wohl aktualisieren müssen. Ich arbeite noch mit der ersten Ausgabe von Prof. Günter Schmitt! Schönen Dank für die Hinweise!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.