LabVIEWForum.de
Queued State Machine: IDLE Optimierung - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Queued State Machine: IDLE Optimierung (/Thread-Queued-State-Machine-IDLE-Optimierung)



Queued State Machine: IDLE Optimierung - ALuehmann - 13.02.2017 14:31

Hallo liebes Forum,

ich habe eine recht komplexe Queued State Machine (QSM) für Kontrolle und Data-Logging von selbtgebauter Hardware aufgebaut - und versuche diese gerade bezgl. Rechnerauslastung zu optimieren.

Die QSM befindet sich, wenn keine Events/Daten eingehen, im IDLE modus, wo der nächste IDLE state in die queue geschoben wird.
Derzeit habe ich da keine wait/tick counter drin, d.h. es werden maximal schnell idle states erzeugt und abgerufen. Das ist natürlich quatsch.

Ich frage mich nun lediglich, welche timing funktion ich am besten verwende, weil ich nicht weiß, wie diese interne gehandabt werden:
eine "wait until next ms multiple" mit z.B. 10 ms könnte ich in den idle state einbauen.
Nur weiß ich nicht, ob dieses "wait" der _delay funktion auf einem µC gleichkommt (und im prinzip auch nur den prozessor Idlen lässt) - oder welche timing funktionen tatsächlich Betriebssystem Timer verwenden - und zwischendurch die Ressourcen freigeben. Oder tun das alle?

Ich freue mich über jegliche Tips, was zu verwenden die beste Idee ist!
LG
Alex


RE: Queued State Machine: IDLE Optimierung - GerdW - 13.02.2017 14:50

Hallo Alex,

Zitat:und im prinzip auch nur den prozessor Idlen lässt
Nein, dem ist nicht so!

Wait(UntilNextMultple) geben beide die CPU frei. Selbst mit einem Wait(0) sorgst du schon für das Freigeben der CPU - wenn auch nur für einen sehr kurzen Moment…
(Das gleiche gilt dann auch für die TimeOuts an diversen Funktionen wie QueueRead oder WaitOnNotification.)

Zitat:Ich frage mich nun lediglich, welche timing funktion ich am besten verwende
Wieso überhaupt andauernd "idle"-States aufrufen? Warum nicht einfach auf den nächsten "sinnvollen" State warten?


RE: Queued State Machine: IDLE Optimierung - ALuehmann - 13.02.2017 14:52

Hallo Gerd,
danke!

(13.02.2017 14:50 )GerdW schrieb:  Wieso überhaupt andauernd "idle"-States aufrufen? Warum nicht einfach auf den nächsten "sinnvollen" State warten?

Weil ich im IDLE state auch prüfe ob neue Daten am COM Port anliegen. Smile

Viele Grüße
Alex


RE: Queued State Machine: IDLE Optimierung - HVo - 14.02.2017 14:00

Sind dafür nicht die Events da?
Ansonsten kann man ja grob abschätzen wie lange die ersten 11 bits (oder die erste vollständige Meldung) über den COM-Port brauchen, und das als wait einfügen.