Hallo, irgendwie werde ich aus den Beispielen für meinen Atmega3290p nicht schlau. Ich habe nun zwei verschiedene ISR-Definitionen, von denen ich der Glaube, dass sie das gleiche bewirken. Bin mir aber nicht 100%ig sicher. Kann mir jemand sagen ob die zwei nachfolgenden code-Schnipsel das gleiche tun? (also gleich schnell aufgerufen werden und beide den Stack sichern usw.) [c]// code 2: ISR(PCINT0_vect, __attribute__((signal))) { } [c] [c]// code 2: void __attribute__((signal)) PCINT0_vect(void); void PCINT0_vect(void) { } [c]
Das steht übrigens ausführlich inklusive Tabelle aller Interrupts in der Anleitung zur C-Bibliothek des AVR-GCC beschrieben. Kurzum: erstere Variante, aber ohne das Attributgedöhns.
Dort habe ich die erste Variante auch her. So wie ich es dort raus gelesen habe, muss ich das Atribut mit angeben, damit der Stack gesichert wird. (Quelle: It's important that these registers, as well as the status register, get saved and restored. The extra code needed to do this is enabled by tagging the interrupt function with __attribute__((signal)).) Die zweite Variante habe ich aus einem Beispiel und ich frage mich ob dieses Beispiel falsch ist, da es ebenfalls funktioniert.
Hans Wurst wrote: > Dort habe ich die erste Variante auch her. So wie ich es dort raus > gelesen habe, muss ich das Atribut mit angeben, damit der Stack > gesichert wird. Den Stack kann man so nicht mitsichern, macht auch keinen Sinn, dafür ist es ja ein Stack. > (Quelle: It's important that these registers, as well as the status > register, get saved and restored. The extra code needed to do this is > enabled by tagging the interrupt function with __attribute__((signal)).) Jo, schon richtig, aber du sollst die Interrupt-FUNKTION damit ausstatten. Und genau dazu gibts ISR.
OK, dann werde ich den zusätzlichen Parameter wieder löschen. Danke dir für die Hilfe, Sven. Was ich allerdings noch nicht verstanden habe ist, wofür (bzw. wann) ich dann diese Interrupt-FUNKTIONEN gebrauchen kann?
Das, was du da schreibst, sind Interrupt-Funktionen. Entweder, du baust die von Hand (Prototyp + Attribut, in etwa das zweite Beispiel in deinem ursprünglichen Beitrag), ODER du benutzt einfach das vorgefertigte ISR-Makro, welches den Rest übernimmt. Letztlich kommt da auch irgendwas mit Attributen bei rum, aber das braucht dich ja dann nicht mehr zu interessieren.
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.