Forum: Mikrocontroller und Digitale Elektronik Atmel, Interrupt


von Hans W. (hans_wurst)


Lesenswert?

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]

von Sven P. (Gast)


Lesenswert?

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.

von Hans W. (hans_wurst)


Lesenswert?

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.

von Sven P. (Gast)


Lesenswert?

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.

von Hans W. (hans_wurst)


Lesenswert?

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?

von Sven P. (Gast)


Lesenswert?

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.

von Hans W. (hans_wurst)


Lesenswert?

OK, danke dir.

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
Noch kein Account? Hier anmelden.