Forum: Mikrocontroller und Digitale Elektronik Interrupts Priorität


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Timo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Wie dem Titel entnommen werden kann, habe ich eine Frage zu den 
Interrupts.

Wenn 2 Interrupts gleichzeitig auftreten, wird der mit der höheren 
Priorität ausgeführt, dass verstehe ich, was ist aber wenn bereits ein 
Interrupt mit der Priorität 1 arbeitet und ein Interrupt mit der 
Priorität 10 schreit urplötzlich auf, wird dieser dann aufgerufen?
Ich habe die Interrupts bisher immer nicht unterbrechbar gemacht indem 
ich cli und sei verwendet habe.

von Stefan K. (stefan64)


Bewertung
0 lesenswert
nicht lesenswert
Um welchen Controller geht es?

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Timo schrieb:
> Wie dem Titel entnommen werden kann, habe ich eine Frage zu den
> Interrupts.

um was für einen µC geht es denn?

von Sevn I. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
um den Tiny 44

von Sevn I. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
??

von Timo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nein um den Atmega 328P...

Das müsste aber doch uc unabhängig sein oder täusche ich mich da?

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Timo schrieb:
> wird dieser dann aufgerufen?
nein, er wird erst nach verlassen des ersten Interrupts aufgerufen

> Ich habe die Interrupts bisher immer nicht unterbrechbar gemacht indem
> ich cli und sei verwendet habe.
damit hast du dir sogar einen potenziellen Fehler eingebaut. Weil nach 
dem sei schon der nächste ISR aufgerufen werden kann du aber noch in der 
ISR bist.

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Timo schrieb:
> Das müsste aber doch uc unabhängig sein oder täusche ich mich da?

innerhalb der 8bitter Atmels ja, aber es gibt noch viel mehr.

von Timo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ahh kk, also würde das gegebeispiel so lauten:
ISR mit Priorität 10 läuft und es schreit ein ISR mit Prioriät 1 auf. 
Die ISR mit Prioriät 10 wird unterbrochen und die ISR mit Priorität 1 
wird ausgeführt?

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Timo schrieb:
> Nein um den Atmega 328P...
>
> Das müsste aber doch uc unabhängig sein oder täusche ich mich da?

Du täuscht Dich da. AVR kennt nur eine Interrupt Priorität, d.h. der 
später kommende wird erst nach Beenden der zuerst aufgerufenden Handler 
Funktion aktiv.


Die µC mit 8051 oder Cortex-M Architektur haben mehr als eine Interrupt 
Priorität, können also auch Interrupts interrupten.

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Timo schrieb:
> Die ISR mit Prioriät 10 wird unterbrochen und die ISR mit Priorität 1
> wird ausgeführt?

nein, auf einer Atmel wird keine ISR unterbrochen. Erst das RetI am ende 
gibt die die nächste ISR frei.

von Stefan K. (stefan64)


Bewertung
0 lesenswert
nicht lesenswert
Bei den Atmegas dient die Priorität nur dazu, bei 2 exakt gleichzeitig 
auftretenden Interrupts zu entscheiden, welcher als erstes zu behandeln 
ist.

Sobald ein IR aktiv ist, sind alle anderen IR gesperrt, allerdings 
können diese innerhalb der ISR auch wieder freigegeben werden. 
Allerdings nur alle zusammen und nicht nach Prioritäten geordnet.

Ich nehme an, der Tiny verhält sich hier ähnlich wie der Atmega.

Bei anderen Controllern, z.B. ARM-Cortex, dient die Priorität dazu, eine 
IR-Routine von höherprioren IR unterbrechbar zu machen. Werden bei einem 
ARM-Cortex zwei IR mit gleicher Priorität zum selben Zeitpunkt aktiv, 
dann dient die Sub-Priority dazu, die Bearbeitungsreichenfolge der 
beiden festzulegen.

Viele Grüße, Stefan

von A. S. (achs)


Bewertung
0 lesenswert
nicht lesenswert
1) es ist unklar, ob niedrige oder hohe Nummern die höhere Priorität 
haben (1 höher als 10 ODER 10 höher als 1)

2) die Hardware-Architektur gibt vor, ob Interrupts beliebig, begrenzt 
oder garnicht verschachtelt sein können. Z.B. indem es nur 2 feste 
Register-Sicherungen gibt (= 2 Interrupts) oder ob dies auf dem Stack 
geschieht (beliebig viel, also auch mehr als überhaupt Interrupt-Quellen 
verfügbar sind)

3) Davon unabhängig kannst du natürlich alle Interrupts in der Routine 
selber sperren. Ob der Befehl aber überhaupt in jedem Fall ausgeführt 
wird, ist wieder eine ganz andere Baustelle.

von Dietrich L. (dietrichl)


Bewertung
0 lesenswert
nicht lesenswert
Stefan K. schrieb:
> Bei den Atmegas dient die Priorität nur dazu, bei 2 exakt gleichzeitig
> auftretenden Interrupts zu entscheiden, welcher als erstes zu behandeln
> ist.

Nicht nur "wenn exact gleichzeitig", sondern auch, wenn während einer 
ISR mehrere neue Interrupts dazukommen. Dann entscheidet die Priorität, 
welcher nach der laufenden ISR als nächstes abgearbeitet wird.

von Route_66 H. (route_66)


Bewertung
0 lesenswert
nicht lesenswert
Dietrich L. schrieb:
> sondern auch, wenn während einer
> ISR ...

...oder anderen Interruptsperre...

> mehrere neue Interrupts dazukommen.

von Stefan K. (stefan64)


Bewertung
0 lesenswert
nicht lesenswert
Route 6. schrieb:
>> sondern auch, wenn während einer
>> ISR ...
>
> ...oder anderen Interruptsperre...

Exakt. Vielen Dank für die Präzisierung.

Viele Grüße, Stefan

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]
  • [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.