Schritt 5: SetIntPriority(): was geht?
Was in aller Welt ist eine "Interrupt-Priorität" und warum brauchen wir es eingerichtet?
Nehmen wir an, dass der ISR (Interrupt Service Routine, wenn Sie aus Teil 1 erinnern) für Int1 beschäftigt ausführen, aber bevor es fertig ist, Int2 ausgelöst wird, und versucht anzurufen ist es eigenen ISR (nennen wir sie ISR1 und ISR2, für Bequemlichkeit). Was passiert? Setzt ISR1 bekommen auf Pause während ISR2 ausgeführt wird, oder hat ISR2 zu warten, bis die ISR1 abgeschlossen ist? Die Antwort hängt von der Priorität des Int1 und Int2.
Lassen Sie uns sagen, dass Int1 eine Priorität der 4 hat und Int2 eine Priorität von 5 hat. Da Int2 eine höhere Priorität hat, bekommt in diesem Fall ISR1 angehalten, so dass ISR2 ausgeführt werden können. ISR2 erledigt, nimmt ISR1 dann, wo es aufgehört hat.
Es wechseln wir jetzt so Int1 eine Priorität von 5 hat und Int2 eine Priorität der 4 hat. In diesem Fall da Int1 die höhere Priorität hat, hat ISR2 zu warten, bis ISR1 erfolgt ausführen, bevor sie beginnen können.
Priorität Ebenen reichen von 1 bis 7, wobei 7 ist am höchsten. Eigentlich gibt es auch eine Prioritätsstufe 0, aber das gilt Menschen mit Behinderungen, und wird nicht ausgeführt. Bei unserem Programm setzen wir die Priorität der Int2 auf 4.
(Beachten Sie, wie wir noch "_EXTERNAL_2_VECTOR" verwenden? "Das werden ein bisschen wichtig sein.)
"Warten..." Ich höre Sie denken (mit meine Gedanken zu lesen-Kräfte), "was passiert, wenn zwei mit der gleichen Priorität unterbricht werden ausgelöst?"
Gute Frage! In unseren bisherigen Beispielen haben Int1 und Int2 Priorität 4, wartet dann ISR2 immer auf ISR1 bis Ende ausführen, bevor sie beginnen können.
Aber warten Sie! Es gibt noch mehr!