www.mikrocontroller.net

Forum: Compiler & IDEs SIGNAL vs. INTERRUPT


Autor: Martin Raffelsieper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke an Florian und Jörg für die Anregungen

Ist es denn so, dass eine Interuptroutine

"SIGNAL" weitere Interrupts zulässt (und somit verschachtelte Aufrufe
gestattet)

dagegen "INTERRUPT" dies verhindert oder ist es umgekeht???


Gruß Martin

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
INTERRUPT läßt sofort alle Interrupts wieder zu. Man hat also keinerlei
Kontrolle welche Interrupts und wie oft sich diese schachteln und ob es
überhaupt jemals zur Abarbeitung aller Anforderungen kommt.

In meinen Augen ist sowas höchst gefährlich und daher unbedingt zu
vermeiden.

Wenn überhaupt, dann nur SIGNAL nehmen, zuerst alle nicht priorisierten
Interrupts sperren und dann mit "sei();" global wieder freigeben.
Am Ende muß man natürlich alles wieder zurückwursteln.


Peter

Autor: Martin Raffelsieper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter, danke für den Tip

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke mal, die INTERRUPTs mit sofortiger Freigabe kommen von solchen
Architekturen, die Software-Interrupts verwenden. Denn das sind ja gar
keine echten Interrupts, sondern nur Unterprogrammaufrufe und da kann
man natürlich die echten Hardwareinterrupts wieder zulassen.

Aber wie gesagt, beim AVR gibts das ja nicht und da sind dann solche
INTERRUPTs völlig nutzlos, weil kreuzgefährlich.


Und beim 8051 gibts das erst garnicht, weil das dort die CPU intern
macht. Man kann dort nur vorher per Prioritätslevel festlegen, welcher
Interrupt welchen anderen unterbrechen darf. Und dann gehts auch nur
soweit, wie verschieden Prioritäten vergeben wurden. Sich selbst kann
ein Interrupt in keinem Fall unterbrechen.


Peter

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

wenn man weiß was man tut kann INTERRUPT durchaus nützlich sein. Ich
verwende das z.B. um eine 4-Kanal-PWM halbwegs Jitterfrei hinzubekommen
obwohl nebenher noch ein zweiter Timer-INT kommt dessen Ausführung
etwas länger dauert. So generell kann man also nicht sagen das
INTERRUPT() kreuzgefährlich und nutzlos ist. Man muß eben wissen was
man tut. Wenn man das nicht so genau weiß -> SIGNAL()

Matthias

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.