[ TAG 117 ][16.08.2021] -Erfolgreich -IAP-20210601-20210722-1145 -FSM-Methoden

 Ich führe meine Worksession vom [15.08.2021] fort. Bei dieser Worksession möchte ich die [FSM]-Methoden erarbeiten und deren Benutzung schriftlich festhalten.

glb.SHM_ALOG_OBJ = glb.SHM_ALOG_CREATE()
glb.SHM_ALOG_DESTROY(glb.SHM_ALOG_OBJ)

Mit der Methode [glb.SHM_ALOG_CREATE()] werden die Speicherzellen reserviert und eine Verbindung zu den Speicherzellen hergestellt.

Mit der Methode [glb.SHM_ALOG_DESTROY(glb.SHM_ALOG_OBJ)] wird die Verbindung zu den Speicherzellen geschlossen und die Speicherzellen werden Freigegeben.

Meines Wissens nach existieren die reservierten Speicherzellen auch nach dem Beenden des Programms, wenn diese nicht Freigegeben werden.

Getestet habe ich es jedoch nicht. Somit kann ich dieses Systemverhalten nicht bestätigen.

# glb.SHM_ALOG_OBJ.buf[glb.STATE_INDX] = glb.FLAG_STATE_NONE_BIN
glb.FLAG_STATE_NONE(glb.SHM_ALOG_OBJ, True)
print(f"glb.FLAG_STATE_NONE_BIN: {glb.FLAG_STATE_NONE_BIN:b}")
print(f"glb.SHM_ALOG_OBJ.buf[glb.STATE_INDX]: "
f"{glb.SHM_ALOG_OBJ.buf[glb.STATE_INDX]:b}")
print(f"glb.FLAG_STATE_NONE(glb.SHM_ALOG_OBJ): "
f"{glb.FLAG_STATE_NONE(glb.SHM_ALOG_OBJ):b}")
print("")

Das ist der Grundaufbau des Versuchs. In der ersten Zeile erfolgt der Zugriff manuell. In der Zweiten Zeile, wird die [FSM]-Methode dazu verwendet, den zu der Methode zugewiesenen Flag auf [1] zu setzen.

Wichtig! Alle anderen Flags werden auf [0] gesetzt. Diese Funktion hat einen semantisch, technischen Grund. Das Programm bzw. das IAP-Modul kann sich nicht im Augenblick in zwei [STATES] befinden.

Betrachtet man es aus der semantischen Perspektive, so kann man sagen, das Programm kann nicht auf den Aufnahmebefehl warten [FLAG_STATE_1_BIN = 0b00000010] und zugleich im Aufnahmemodus [FLAG_STATE_2_BIN = 0b00000100] befinden.

Betrachtet man die selbe Situation aus der technischen Perspektive, so kann das Programm nicht zu selben Zeit an zwei WHILE-Schleifen sich befinden. Während das IAP-Modul auf ein Befehl wartet, befindet es sich in der WHILE-Schleife, die als [SUBROUTINE_ZERO()] bezeichnet wird. Es kann nicht zum selben Zeitpunkt an der WHILE-Schleife [SUBROUTINE_REC] befinden.

Die Befehle eines Programms oder Prozesses werden vom Prozessor sequenziell abgearbeitet, auch der Thread-Technologie. Bei Multiprocessing werden separate Prozesse auf separaten Kernen gestartet.

glb.SHM_ALOG_OBJ.buf[glb.STATE_INDX] = glb.FLAG_STATE_NONE_BIN
glb.FLAG_STATE_NONE(glb.SHM_ALOG_OBJ, True)
glb.FLAG_STATE_NONE(glb.SHM_ALOG_OBJ)

glb.SHM_ALOG_OBJ.buf[glb.STATE_INDX] = glb.FLAG_STATE_0_BIN
glb.FLAG_STATE_0(glb.SHM_ALOG_OBJ, True)
glb.FLAG_STATE_0(glb.SHM_ALOG_OBJ)

glb.SHM_ALOG_OBJ.buf[glb.STATE_INDX] = glb.FLAG_STATE_1_BIN
glb.FLAG_STATE_1(glb.SHM_ALOG_OBJ, True)
glb.FLAG_STATE_1(glb.SHM_ALOG_OBJ)

glb.SHM_ALOG_OBJ.buf[glb.STATE_INDX] = glb.FLAG_STATE_2_BIN
glb.FLAG_STATE_2(glb.SHM_ALOG_OBJ, True)
glb.FLAG_STATE_2(glb.SHM_ALOG_OBJ)

glb.SHM_ALOG_OBJ.buf[glb.STATE_INDX] = glb.FLAG_STATE_3_BIN
glb.FLAG_STATE_3(glb.SHM_ALOG_OBJ, True)
glb.FLAG_STATE_3(glb.SHM_ALOG_OBJ)

glb.SHM_ALOG_OBJ.buf[glb.STATE_INDX] = glb.FLAG_STATE_4_BIN
glb.FLAG_STATE_4(glb.SHM_ALOG_OBJ, True)
glb.FLAG_STATE_4(glb.SHM_ALOG_OBJ)
Das ist die Verwendungsweise der [FSM-AS]-Methoden. Hier werden drei Möglichkeiten präsentiert. Die erste Variante besteht darin, den Byte direkt über [.buf(indx)] zu bearbeiten. Bei der zweiten Variante wird eine [FSM-AS]-Methode mit dem zweiten [True]-Attribut benutzt um den dazugehörigen FLAG des [STATE-Bytes] auf [1] zu setzen. Alle anderen FLAGS werden auf [0] gesetzt.

Die letzte Variante ließt den FLAG des [STATE-Bytes] aus und gibt ein Boolean zurück. Der FLAG-Wert [1] entspricht [True]. Der FLAG-Wert [0] entspricht [False].

glb.SHM_ALOG_OBJ.buf[glb.STATE_INDX] = glb.FLAG_STATE_5_BIN
glb.FLAG_STATE_5(glb.SHM_ALOG_OBJ, True)
glb.FLAG_STATE_5(glb.SHM_ALOG_OBJ)

glb.SHM_ALOG_OBJ.buf[glb.SUBROUTINE_INDX] = glb.FLAG_SUB_ALOG_BIN
glb.FLAG_SUB_ALOG(glb.SHM_ALOG_OBJ)
glb.FLAG_SUB_ALOG(glb.SHM_ALOG_OBJ)

glb.SHM_ALOG_OBJ.buf[glb.SUBROUTINE_INDX] = glb.FLAG_SUB_END_BIN
glb.FLAG_SUB_END(glb.SHM_ALOG_OBJ, True)
glb.FLAG_SUB_END(glb.SHM_ALOG_OBJ)

glb.SHM_ALOG_OBJ.buf[glb.SUBROUTINE_INDX] = glb.FLAG_SUB_ZERO_BIN
glb.FLAG_SUB_ZERO(glb.SHM_ALOG_OBJ, True)
glb.FLAG_SUB_ZERO(glb.SHM_ALOG_OBJ)

glb.SHM_ALOG_OBJ.buf[glb.SUBROUTINE_INDX] = glb.FLAG_SUB_REC_BIN
glb.FLAG_SUB_REC(glb.SHM_ALOG_OBJ, True)
glb.FLAG_SUB_REC(glb.SHM_ALOG_OBJ)

glb.SHM_ALOG_OBJ.buf[glb.SUBROUTINE_INDX] = glb.FLAG_SUB_MP3CONV_BIN
glb.FLAG_SUB_MP3CONV(glb.SHM_ALOG_OBJ, True)
glb.FLAG_SUB_MP3CONV(glb.SHM_ALOG_OBJ)

Das selbe Chema haben wir auch bei den [FSM-SS]-Methoden.

Die [FSM]-Methoden haben im Grunde nur zwei Aufgaben.

  1. STATUS-setzen
  2. STATUS-auslesen


Kommentare

Beliebte Posts aus diesem Blog

[ TAG 38 ][29.05.2021] - Erfolgreich - Freelancer-Portale

[ TAG 747 ][07.04.2023] -Erfolgreich -BNKTRS -Google Code -Objekt und Methodenliste

[ TAG 52 ][12.06.2021] - Erfolgreich - IAP-20210601-20210609-2325