mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik zu viele Interrupts?


Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute
Wenn ich mehrere Interrupts z.B. externe verwende, macht es dann Sinn
während der Interruptroutine die Interrupts zu sperren um ein
merhfaches auftreten zu verhindern?
Wie wirkt sich das z.B. af den Timer aus, der den Takt für die Interne
Uhr birgt?
Wie handhabt ihr das?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Plattform?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was fürn µC??? Bei den AVRs werden die Interrupts automatisch
(hardwaremäßig) während einer ISR gesperrt...

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Frage war allgemein gemeint, aber bei den Prozessoren geht es so um
die AVR-Megas und die Plattform wird in der Regel GCC sein.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...Und ob es im Einzelfall Sinn macht, hängt von der Anwendung ab.
Verschachtelte Interrupts sind gefährlich (möglicher Stacküberlauf ->
Systemabsturz) und sollten nur dann eingesetzt werden, wenns gar nicht
anders geht und der Programmierer genau weiß, was er tut. Grundsätzlich
sollte in einer ISR nur absolut notwendiger Code stehen und der Rest im
Hauptprogramm abgearbeitet werden, damit zeitkritische Interrupts auch
korrekt abgearbeitet werden können. Wenn man einige Grundregeln
beachtet (keine Warteschleifen und Funktionsaufrufe in ISRs), kann man
die Verwendung von verschachtelten Interrupts fast immer vermeiden.

P.S.: Da es sich tatsächlich um AVRs handelt, siehe oben...

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sperren geht automatisch. Entsperren geht in vielen Fällen, nämlich dort
wo mit der Routine automatisch der Interrupt zurückgesetzt wird.

Theoretisch kann man also vorne in manchen Interrupt-Routinen die
Interrupts wieder einschalten. Praktisch muss man dann aufpassen, dass
man genug Stack hat, um bei alle potentiell gleichzeitig auftretenden
Interrupts nicht abzusaufen.

Sollte man also nur machen, wenn's wirklich nicht anders geht.

Autor: Sebastian Heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe das schon gemacht mit nem avr einfach als ersten aufruf im
interrupt SEI aufrufen. Das problem ist (ich hatte infrarotsignale
ausgewertet, und benötigte timer+interrupt) wenn mal kurze unerwartete
flanken auftauchen kann das den programmablauf ungewollt beeinflussen,
besonders wenn zu oft interrupts etc auftreten..  habe dann für die
kritischen sachen einfach nen tinyAVR dazugenommen. dann ging es

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verstehe ic das recht?
Beim AVR macht es keinen Sinn die Int in der ISR zu blockieren, weil
keine Int abgearbeitet werden, wenn sich das Programm in einer ISR
befindet?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es macht keinen Sinn, sie zu blockieren, weil sie automatisch blockiert
werden. Beim Einsprung in die ISR löscht die Hardware automatisch das
I-Bit im SREG (was man sonst mit cli machen müsste) und setzt es erst
dann wieder, wenn die ISR abgeschlossen ist (in Assembler mit reti, in
C mit der abschließenden '}').

Wie oben gesagt, man kann nested Interrupts in bestimmten Fällen
zulassen, muss sich aber über sein tun im klaren sein (Beispiel: Ein
Timer-Interrupt, der sich selbst unterbrechen kann und der sich
schneller wiederholt, als die zugehörige ISR abgearbeitet ist,
unterbricht ständig die eigene ISR [Das auslösende Flag wird ja
ebenfalls bereits beim Einsprung in die ISR automatisch gelöscht und
kann durch ein erneutes Ereignis prinzipiell sofort wieder gesetzt
werden], was bereits nach kurzer Zeit zu einem Stacküberlauf führt).
Deshalb die Grundregeln für die Interrupt-Bearbeitung beachten (ISR
kurz halten, keine Funktionsaufrufe und Schleifen, irgendeine Variable
in der ISR als Job-Flag setzen und im Hauptprogramm abfragen), dann
kann eigentlich nicht viel schief gehen...

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.