www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmel, Interrupt


Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht 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]

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, danke dir.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.