LabVIEWForum.de - Ausführungsreihenfolge?

LabVIEWForum.de

Normale Version: Ausführungsreihenfolge?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

Ich versuche möglichst einfach zu Beginn eines Programmablaufs den FIFO zu löschen.
Im Bild habe ich die beiden interssanten Blockschaltbilder zusammengefasst. Im unteren Teil lese ich so lange aus dem FIFO bis ich einen Timeout bekomme. Dann setze ich das Flag "FIFO_clear", welches ich vorher gesetzt habe um diesen Vorgang zu starten, wieder auf false. In meinem eigentlich Programmablauf bleibe ich solange im Zustand Init bis dieses Flag auf false steht. Ich setze aber im gleichen State dieses Flag erst auf true. Funktioniert dieses? Wird also immer erst das flag auf true gesetzt bevor es ausgelesen wird? Hat jemand eine sauberere genauso einfache Lösung? Ich wollte nicht extra einen weiteren State einführen.

Danke
Hallo,
ich hatte gerade eine andere Idee, einfach die Clear Methode des Fifos aufrufen. Leider bekomme ich dann die Fehlermeldung "FIFO Clear ... : method not supported".
Wieso kann ich diese Funktion nicht nutzen?
Gruß
Hallo Werner,

Zitat:Wird also immer erst das flag auf true gesetzt bevor es ausgelesen wird?
Hast du das mit dem Datenfluss und der parallelen Ausführung unabhängiger Codeteile schon mal verinnerlicht? Und dir angelesen, was eine Race-Condition ist?

Zitat:Ich setze aber im gleichen State dieses Flag erst auf true. Funktioniert dieses?
Jein. Mal ja, mal nein - wie das eben so ist bei Race-Conditions...
Hallo,
mir ist schon klar was Race-Conditions sind und mir war auch klar, dass dies wahrscheinlich nicht immer funktioniert. Deswegen habe ich auch nachgefragt, ob jemand dazu eine wenig aufwendige Lösung hat.
Gruß
Hallo Werner,

wenn du wirklich im gleichen State das Flag setzen und lesen willst, könntest du eine Sequenzstruktur einsetzen.

Aber:
Was soll es bringen? Erst setzt du das Flag, dann fragst du es ab und entscheidest: "diesen State nochmal durchführen"! Bei der nächsten Iteration setzt du das Flag (und überschriebst wahrscheinlich das Ergebnis deiner anderen Schleife) und fragst es dann erneut ab - um eine weitere Iteration zu starten usw. usf. bis in alle Ewigkeit...
Lösung:
Mach aus einem zwei States...
Also, wenn ich den Sinn deiner beiden Schleifen richtig verstehe, dann willst du doch einfach slange den INIT-Case ausführen, bis dein FIFO leer ist? Dann kannst du auch einfach in einem INIT-Case die "While-Schliefe" mit dem auslesen reinbauen und fertig ist es. Dann wird der INIT-Case einmal ausgeführt und endet, wenn das FIFO leer ist.

MfG Carsten
Referenz-URLs