Timeout-Angaben
Die SVCs werden mit dem Parameter
annehmen:
Wert
RM_CONTINUE
1 ... RM_MAXTIME
RM_WAIT
RM_MILLISECOND(ms)
RM_SECOND(sec)
RM_MINUTE(min)
RM_HOUR(hour)
Die Werte für Stunden, Minuten und Sekunden können miteinander verknüpft werden:
RM_HOUR(hour) + RM_MINUTE(min) + RM_SECOND(s)
Timeout-Behandlung von Geräten
Zeitüberwachung für Geräte
Um den Abschluss einer angeforderten E/A–Operation auch im Falle eines fehlerhaften
Peripheriegerätes zu sichern und dadurch ein einwandfreies Funktionieren des Systems zu
gewährleisten, bietet RMOS3 die Möglichkeit, in jedem Geräte–Software–Treiber ein
Zeitintervall, Geräte–Timeout genannt, zu definieren, das die maximal zugelassene Zeit für
die Durchführung einer E/A–Operation darstellt. Beim Starten jeder E/A–Operation wird das
Timeout–Intervall heruntergezählt und, falls die E/A–Operation innerhalb dieser Zeit nicht
abgeschlossen wurde, übernimmt der Geräte–Treiber die Steuerung und meldet der
anfordernden Task eine entsprechende Statusinformation zurück. Das Timeout–Intervall ist
frei wählbar und kann den Anforderungen des jeweiligen Steuerbausteins angepasst
werden.
Behandlung von Deadlocks
Verklemmung durch Timeout vermeiden
Es sind Konstellationen denkbar, in denen eine Task aufgrund einer (System–)
Verklemmung den Zustand WARTEND nicht mehr verlässt. Eine derartige gegenseitige
Blockierung tritt beispielsweise dann auf, wenn Task A das Semaphor X besitzt und auf
Semaphor Y wartet, während Task B Semaphor Y besitzt und auf Semaphor X wartet. Diese
Situationen können durch die Timeout–Behandlung für den SVC
vermieden werden.
RMOS3 V3.50 Benutzerhandbuch
Bedienhandbuch, 07/2012, A5E03692290-01
Betriebssystem-Eigenschaften von RMOS3
abgesetzt. Er kann folgende Werte
TimeOutValue
Bereich
1 ... 2^31
1 ... 2^31 / 1000
1 ... 2^31 / 60 000
1 ... 2^31 / 3 600 000
.
8.5 Betriebsmittelverwaltung
Bedeutung
Nicht warten. Die Funktion
kehrt sofort zurück.
Gibt das Zeitintervall in ms
an. Die Funktion kehrt
zurück, wenn entweder das
Ereignis eingetreten oder
das Zeitintervall abgelaufen
ist (Timeout).
Warten, bis das Ereignis
eingetreten ist (kein
Timeout)
Wartet
Millisekunden.
ms
Wartet
Sekunden.
sec
Wartet
Minuten.
min
Wartet
Stunden.
hour
RmGetBinSemaphore
121