Betriebssystem-Eigenschaften von RMOS3
8.3 Interrupt-Bearbeitung unter RMOS3
8.3.3
DI-Zustand
DI-Zustand
Disabled Interrupt Zustand der CPU. Keine Task und kein Interrupt kann diesen Zustand
unterbrechen. Dieser Zustand wird automatisch bei jedem Software- oder Hardware-
Interrupt eingenommen.
Nicht unterbrechbar
Der Prozessor speichert bei jedem Interrupt das Flag–Register (Programmstatuswort) und
die Rücksprungadresse auf den aktuellen Stack und setzt das Interrupt–Enable–Flag für die
Bearbeitung von weiteren Interrupts zurück (disable Interrupt).
Damit befindet sich der dann laufende Code, der Interrupthandler, automatisch im DI–
Zustand. Der DI–Zustand ist nicht unterbrechbar. Alle extrem zeitkritischen Anforderungen
müssen in diesem Zustand bearbeitet werden.
Unter zeitkritisch werden hier alle notwendigen Bearbeitungsschritte verstanden, die
unumgänglich sind, bevor der Interrupthandler selbst, eventuell durch einen Interrupt mit
höherer Priorität unterbrochen werden kann.
Max ca. 25 Assembler-Befehle
Die Dauer dieser Bearbeitungsschritte im DI–Zustand darf ca. 25 Assembler-Befehle nicht
überschreiten.
Wenn es von der Applikation her möglich und sinnvoll ist, einen Interrupthandler mit ca. 25
Befehlen vollständig zu realisieren, dann kann der Handler nach Bedienung des Interrupt-
Controllers mit einem IRET–Befehl beendet werden. Bei einem Hardware-Interrupt muss
zuvor noch der Eingang des Interrupt-Controllers wieder freigegeben werden (nonspecific
end of interrupt). Dies kann durch Aufruf des Unterprogramms
DI–Zustand beeinflusst dann keine anderen RMOS3–Zustände.
Baldmöglichst verlassen
Normalerweise sollte ein Interrupthandler den DI–Zustand baldmöglichst verlassen. Die
maximale Bearbeitungsdauer in diesem Zustand ist abhängig von der Prozessorfrequenz
und darf 5 μs bei einem 80486DX2/66-Prozessor nicht überschreiten.
Kann ein Interrupthandler die Interruptbearbeitung nicht im DI–Zustand beenden, sollte nur
der wichtigste Teil der Bearbeitung vorgenommen und die weitere Bearbeitung im I–Zustand
fortgesetzt werden. Normalerweise erfolgt die Umschaltung sofort am Beginn des Handlers,
da meistens genügend Zeit für die Bedienung des Controllers vorhanden ist, selbst nach der
Unterbrechung durch wichtigere Interrupts (festgelegt durch den Eingang am PIC
(Programmable Interrupt Controller)).
Der Übergang in den I–Zustand erfolgt durch den Aufruf des Unterprogramms
(siehe auch Hochsprachen–Interrupthandler).
unterbrochenen Programms und schaltet auf den RMOS3–Systemstack um, falls dieser
nicht schon aktiv ist. Vor Verlassen des DI–Zustandes müssen deshalb die Registerinhalte
wiederhergestellt werden, die zu Beginn der Interruptbehandlung gültig waren.
SVC RmSetIntDIHandler
RMOS3 bietet mit dem SVC
DI-Zustand zu schreiben.
98
x_elipse
die Möglichkeit, eigene Interruptroutinen im
RmSetIntDIHandler
geschehen. Der
x_call_eoi
rettet alle Register im Stack des
RMOS3 V3.50 Benutzerhandbuch
Bedienhandbuch, 07/2012, A5E03692290-01
x_elipse