Interruptpriorität

Gast
Lesenswert?
• ▲
▼
>INT5 vor INT1


Machbar wäre es aber, oder!?

z.B indem man das globale I-Flag im INT1 setzt. Natürlich ist dies
nicht schön und kann zu unüberschaubaren Problemen führen. Außerdem
müßte man alle anderen Interrupts, die man nicht benötigt deaktivieren.
Zudem kann der INT5 auch nur einmal in der INT1 aufgerufen werden, es
sei denn, man setzt das I-Flag mehrmals. Aufpassen müsste man auch mit
den Rücksprungadressen, welche sich im Stack unkontrolliert vermehren,
sollte man nicht mit einem ordentlichen "reti" zurückkehren.

Grüße
Gast
Lesenswert?
• ▲
▼
Ich benutze den ATMega128 mit WinAVR. Ist es wirklich nicht möglich die
Interrupts a la Daisy Chain zu priorisieren?? Das kann ich mir nicht
vorstellen.
Ist es des weiteren möglich im Ablauf einer Interrupt Service Routine
die globalen Interrupts mit cli() zu verbieten? Hat bei mir nicht
geklappt! Danke
Moderator Persönliche Seite
Lesenswert?
• ▲
▼
> Ist es wirklich nicht möglich die Interrupts a la Daisy Chain zu
> priorisieren?

Ja, ist es nicht.

> Das kann ich mir nicht vorstellen.

Es gibt halt Dinge zwischen Himmel und Erden, die sich unserer
Vorstellungswelt entziehen. ;-)

Typischerweise wird eine solche Priorisierung nur von denjenigen
vermisst, die zuvor 8051 programmiert haben...  Der AVR ist schnell
genug, man packt einfach das Notwendigste in die ISR, damit wird die
hinreichend kurz.  Dann setzt man ein Flag, und lässt den Rest in
aller Ruhe in der main loop ausführen.

> Ist es des weiteren möglich im Ablauf einer Interrupt Service
> Routine die globalen Interrupts mit cli() zu verbieten?

Nein, ist es nicht -- die sind nämlich bereits verboten.

Lass mich raten, willst du etwa mit einem externen Interrupt einen
(mechanischen) Taster abfragen?  Das tut man nicht.  Die Dinger
prellen so sehr, dass du das sowieso in Software tiefpassfiltern
musst, da kannst du die ganze Abfrage dann auch gleich in den
Timerinterrupt verlagern.

Ansonsten Grundregel #1 für externe Interrupts: in der ISR als
Allererstes mal den Interrupt selbst verbieten.  Damit ist
sichergestellt, dass er nicht bei immer noch anhängiger
Interruptbedingung zu schnell hintereinander wieder aufgerufen wird.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.