Spinlocks können nur innerhalb einer geladenen Applikation benutzt werden, da der Code
direkt eingebunden wird. Der Code wird für jede geladene Applikation neu dazugebunden.
Da die Spinlocks keine Betriebssystemaufrufe sind, werden die entsprechenden Aufrufe
nicht vom Profiler aufgezeichnet.
Beim Aufruf
Interrupts werden gesperrt, das Spinlock angefordert. Später wird mit dem Aufruf
RmReleaseSpinLockIRQ
RmGetSpinLockIRQ
Die Spinlocks können auch auf einem Singlecoresystem verwendet werden, machen aber
dort keinen Sinn, da durch die Interruptsperre der Prozessor nichts anderes ausführen kann.
In der nachfolgenden Abbildung wird der Zugriff auf gemeinsame Variablen demonstriert.
Im abgebildeten Zustand kann nur Task 2 auf die Variable zugreifen, da es mit
RmGetSpinLock
erhalten.
Bild 8-13
8.4.4
Kommunikation über Ereignisflags
Ereignisflags
Ein Ereignisflag, kurz Flag, ist eine Datenstruktur, die durch ein einzelnes Bit im Speicher
implementiert wird. Alle Flags sind in Flaggruppen zu je 32 Bit zusammengefasst, die jeweils
eine eigene ID besitzen. Es gibt sowohl lokale als auch globale Flaggruppen.
Beim Erzeugen einer Task wird bereits eine einzige lokale Flaggruppe angelegt. Diese
lokale Flaggruppe besitzt immer die Flag-ID Null. Globale Flaggruppen müssen statisch
konfiguriert oder dynamisch erzeugt werden und erhalten Flag-IDs ungleich Null.
RMOS3 V3.50 Benutzerhandbuch
Bedienhandbuch, 07/2012, A5E03692290-01
wird der Zustand vom Interruptflag abgespeichert, die
RmGetSpinLockIRQ
der Interrupt nur dann wieder freigegeben, wenn er vor dem Aufruf
freigegeben war.
den Spinlock erhalten hat. Task 1 versucht vergeblich, auch den Spinlock zu
Verwendung von Spinlocks zur Task-Kommunikation und –Koordination
Betriebssystem-Eigenschaften von RMOS3
8.4 Taskkommunikation, -koordination, -synchronisierung
111