Interrupts Priorität

Gast #4904043
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.
Gast #4904059
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.
Gast #4904066
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?
#4904067
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.
#4904071
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
Gast #4904103
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.
#4904222
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren