mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 interrupts gleichzeitig


Autor: Felix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moin

was passiert eigentlich mit dem Programmablauf des µC (mega8) wenn ein 
interrupt ausgelöst wird, während ein anderes noch behandelt wird (vor 
reti..)
wird das sofort ausgeführt oder direkt nach dem anderen oder gar nicht 
wahrgenommen?

Vielen Dank für Antworten,

Felix

Autor: Suchst du? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hatten wir schon einige Male hier, die Suche hilft dir sicher 
weiter...

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hatter recht! - Aber sieh's wie der Highländer: "Es kann nur Einen 
geben"...

Denkanstoß: Der ISR-Aufruf löscht das I-Flag im SREG, RETI ist wie RET, 
setzt aber zusätzlich das I-Flag im SREG. Jeder Interrupt hat ein 
Freigabebit (Maske) und ein Ereignis-Flag.

~

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wenn ein interrupt ausgelöst wird, während ein anderes noch behandelt wird
>(vor reti..)

Du wirst lachen: das läuft dann tatsächlich genau so, wie es im 
Datenblatt auf Seite 12 (reset and interrupt handling) detailliert 
beschrieben ist.

Autor: Katapulski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber sieh's wie der Highländer: "Es kann nur Einen geben"...

Jawoll, Du paßt in die Welt! :-)

gez. Katapulski

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Da hatter recht! - Aber sieh's wie der Highländer: "Es kann nur Einen
>geben"...

quatsch in der ISR:

 sei

.. und die ISR lässt sich durch eine anderen Int. unterbrechen!

mfg Jens

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Katpaulski wrote:

> Jawoll, Du paßt in die Welt! :-)

Stimmt, wie'n Schwein auf's Sofa...

~

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> quatsch in der ISR:

> sei

> .. und die ISR lässt sich durch eine anderen Int. unterbrechen!

Das machen nur Dumme und Leute, die wirklich durchblicken, und Letztere 
machen das auch nur im Ausnahmefall. Einem Anfänger sollte man Sowas 
nicht empfehlen, wenn man nicht bereit ist, das damit zerschlagene 
Geschirr zu ersetzen.

~

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens wrote:
> quatsch in der ISR:
>
>  sei
>
> .. und die ISR lässt sich durch eine anderen Int. unterbrechen!

Aber dann wenigstens ganz zu Anfang des UART-Interrupts, dann weiß man 
gleich, wie ein Stackoverflow wirkt.


Peter

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Sinusgeek

>Das machen nur Dumme und Leute ...

um das nicht aus dem Ruder laufen zu lassen.
warum nicht? auch Anfänger nicht?

wenn jede ISR, selbst die benutzten Register selbst sichert,
MUß es doch gehen!

Wenn nicht der µC an der max Rechenleistung
angekommen ist!

auch auf einem AVR Mega

gez U880

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Das machen nur Dumme und Leute, die wirklich durchblicken, und Letztere
>machen das auch nur im Ausnahmefall. Einem Anfänger sollte man Sowas...

Damit war ich als Anfänger vor über 25 Jahren auch konfrontiert.
AVRs haben keine priorisierten Interrupts. Deswegen mag es hier einigen, 
die nichts anderes kennen, komisch vorkommen einen Interrupt durch einen 
Anderen zu unterbrechen. Bei anderen Architekturen ist das durchaus 
normal (z.B. Z80). Allerdings wird das das dann in die Hose gehen, wenn, 
wie hier im Tutorial favorisiert, ein Register zur Sicherung von SREG 
verwendet wird. Das wird dann gnadenlos überschrieben. Bei einer 
Sicherung aller verwendeten Register, incl. SREG auf den Stack gibt es 
mit geschachtelten Interrupts keine prinzipiellen Probleme. Timing ist 
eine andere Sache.

MfG Spess

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spess, die Frage bezog sich eindeutig auf den Mega8 (siehe ersten 
Beitrag), daher bezog sich meine Aussage ausschließlich auf AVRs. Ja, 
ich habe das auch schon gemacht (Tiny15, Software-ICP mit Int0 und 
Timer1, Timer0-ISR gab Interrupt sofort wieder frei), aber das will auf 
dem AVR recht genau durchdacht sein.

~

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
>die Frage bezog sich eindeutig auf den Mega8
> aber das will auf dem AVR recht genau durchdacht sein.

Ich weiss nicht, was man durchdenken muss, wenn man zu Beginn einer 
Routine alle Register, die verwendet werden sichert, und am Ende wieder 
zurückschreibt.

MfG Spess

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Die Assemblerprogrammierer der alten Schule können da nur lächeln. 
Schließlich sind sie zu jeder Zeit "Herr" über den Prozessor und damit 
der Situation. Jeder Gedanke: was könnte meine Variante des Compilers 
xyz aus dem Quellcode zaubern, oder hat gerade die Variante 14.5.7.3b 
einen Bug ? - erübrigt sich.
Es ist sicher nicht die feine englische Art, Interrupts durch Interrupts 
gewollt zu unterbrechen, den Profiprogrammierer läßt das aber kalt.
Schließlich kann jener auch gekonnt "ungeplante" INTs z.B. von 
Spannungsüberwachungen (Brown Out) oder externen Wachhunden (wofür auch 
immer) jederzeit ohne Systemversagen beherrschen.

Zusammengefasst: Der Programmierer hat es in den (Hard- und 
Software-)Grenzen des Systems in der Hand.   Aber VORSICHT !!!

[Beispiel Z80 ist gut!!!]

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maximal ein Interrupt wird per Flag vorgemerkt, dann wird mindestens ein 
Befehl des Hauptprogramms ausgefuehrt und sodann der vorgemerkte 
Interrupt ausgeloest. Treten mehr als ein Interrupt auf, so gehen diese 
verloren (es kann nur einer vorgemerkt werden). Nested Interrupts zu 
programmieren ist eher nicht empfehlenswert.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>es kann nur einer vorgemerkt werden

Man sollte vielleicht noch dazusagen: Einer der gleichen Art. Dagegen 
kann problemlos ein ADC-Complete- und ein Ext-Int-0- und ein Ext-Int-1- 
und ein EEPROM-Ready- und ein Timer0-Overlow-Interrupt gleichzeitig 
"pending" sein. Als erstes ausgeführt nach der I-Freigabe wird dann 
übrigens der Ext-Int-0, weil er in der Interruptvektor-Liste am 
weitesten oben steht.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 2 interrupts gleichzeitig
Auf so einem Prozessor passiert immer nur 1 Befehl gleichzeitig. Alle 
anderen Befehle haben sich hinten anzustellen.
Soviel zum Thema gleichzeitig.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Auf so einem Prozessor passiert immer nur 1 Befehl gleichzeitig.

Auf so einem Prozessor können in seinen I/O-Registern problemlos mehrere 
Bits gleichzeitig gesetzt sein, und das ist der Fall, wenn mehrere 
Interrupts vorgemerkt sind. Z. B. Bit ADIF im Register ADCSRA, und Bit 
TOV0 im TIFR, und Bit WDIF im WDTCSR.

Dass Interrupthandler nicht parallel ausgeführt werden, war dem 
Fragesteller glaube ich schon klar :-)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Auf so einem Prozessor passiert immer nur 1 Befehl gleichzeitig. Alle
>anderen Befehle haben sich hinten anzustellen.
>Soviel zum Thema gleichzeitig.

Entschuldige mal. Dieses Wissen setze ich voraus.

MfG Spess

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.