Forum: Mikrocontroller und Digitale Elektronik Interrupts Priorität


von Timo (Gast)


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)


Lesenswert?

Um welchen Controller geht es?

von Peter II (Gast)


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)


Lesenswert?

um den Tiny 44

von Sevn I. (Gast)


Lesenswert?

??

von Timo (Gast)


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)


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)


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)


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)


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)


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)


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. (Gast)


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)


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)


Lesenswert?

Dietrich L. schrieb:
> sondern auch, wenn während einer
> ISR ...

...oder anderen Interruptsperre...

> mehrere neue Interrupts dazukommen.

von Stefan K. (stefan64)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.