Ja, das würde ich auch immer empfehlen, ist auch der einfachste WegDen Blick in die io.h hät ich wirklich eher waagen sollen...![]()
Zu Deiner anderen Frage, es ist ziemlich einfach zu erklären, die Vektoren liegen alle ganz am Anfang von Flash, bei Adresse 0 reset, also die Stelle, wo der µC immer anfängt, Adresse 1 externer Interrupt INT0 usw. wie in der io8.h aufgelistet.
Wenn man das jetzt im Assembler schreibt sollte man die ganze Tabelle am Anfang ausschreiben z.B.
[code]
org 0x0000
rjmp reset
rjmp siginterrupt0
reti
reti
...
[code]
Wenn jetzt ein Ereignis eintrifft wird wie Du schon sagtest ein Flag gesetzt
hier z.B Register GIFR Bit INTF0.
Wenn jetzt Interrupts erlaubt sind (sei) und hier Register GICR bit INT0 wird zu Adresse 0x01 gesprungen, wo wiederum rjmp siginterrupt0
steht, womit Du dann irgendwo im label siginterrupt0 landest.
Andere Interrupts stoßen da direkt auf reti, kommen also sofort wieder zurück.
Die Vectortabelle ist stark µC abhängig!
also immer nachgucken wie sie heißen, der Kompiler prüft die Namen nicht
und wenn Du Dich vertippt hast klappt die ganze Sache nicht...
Ich hoffe das ist verständig genug, und alles so 100% richtig.
P.S. Welche avr-gcc Version hast Du eigentlich, ist aber nicht die neueste
man sollte nicht mehr mit SIG..... arbeiten, ich würde mal updaten sehe hier
Gruß Sebastian
Lesezeichen