LabVIEWForum.de - FIFO in Abhängigkeit der verbleibenden Elemente im FIFO füllen

LabVIEWForum.de

Normale Version: FIFO in Abhängigkeit der verbleibenden Elemente im FIFO füllen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich möchte mit meinem cRIO im LV FPGA Modus unter anderem Analoge Kanäle ansteuern.
Dazu habe ich Daten in einem Array auf dem Host (cRIO) liegen. Über ein FIFO (Host to Target) möchte ich diese Daten auf das FPGA übertragen und die Analogen Kanäle damit ansteuern.
Die Befüllung des FIFOs soll in Abhängigkeit der verbleibenden Elemente im FIFO geschehen. Sobald die Anzahl der Elemente im FIFO beispielsweise unter 100 fällt sollen erneut 100 Elemente in das FIFO geladen werden. Falls die Anzahl der Elemente größer 100 ist, sollen keine Elemente in das FIFO geladen werden.
Die erste Frage lautet. Wie kann ich Hostseitig die aktuelle Anzahl der Elemente im FIFO abfragen?
In Angehängter Datei steht die Variable "FIFO befüllen" dafür das das FIFO weniger als 100 Elemente besitzt. Die Variable "Ausgabe" soll am Ende mit dem Eingang von FIFO.Write verbunden werden.
Als Beispielvektor und um zu sehen welche Daten in "Ausgabe" stehen, wird am Anfang ein Vektor kreiert der eine Größe von 100 Elementen besitzt und dessen Elemente gleich der Indexnummer sind.
Die Case-Struktur und Array-Subset sollen dazu dienen die passenden Elemente in das FIFO (Ausgabe) zu laden.
Leider funktioniert das noch nicht so ganz.
Entdeckt jemand meinen Fehler?
Danke Smile
(01.09.2013 20:25 )Mietzekatze schrieb: [ -> ]Die erste Frage lautet. Wie kann ich Hostseitig die aktuelle Anzahl der Elemente im FIFO abfragen?
Da fällt mir nur ein, ein leeres Array an "Write-FIFO" übergeben und dann die Antwort "Empty Elements Remaining" auswerten.

Gruß, Jens
Also die Initialisierung verstehe ich ja noch, auch wenn sie recht aufgebläht daherkommt:
[attachment=46113]
Okay wenn ich das sehe ist es ja auch viel einfacher mit der Initialisierung Smile

Wenn ich Empty Elements Remaining auslese bekomme ich doch aber den Platz angezeigt, welcher noch für Elemente frei ist. Ist das der hostseitige Platz, welcher bei ungefüllten FIFO 10.000 Elementen fast oder die Größe die ich im Projektexplorer für das FIFO einstellen kann?
Du kennst die Maximal-Größe des FIFO (aus der Konfiguration).
Du kannst Abfragen, wie viele Elemente frei sind.

Aus beiden Infos kannst du also filtern, wie viele Element noch im RT->FPGA FIFO hängen.

Gruß, Jens
Also leider funktioniert das mit den Empty Elements Remaining noch nicht so ganz.
Im Anhang befindet sich ein kleines Beispielprogramm.
Der FIFO ist auf die Größe 1029 eingestellt.
Beim Auslesen von Empty Elements Remaining erscheint allerdings eine viel höhere Zahl:(16384 mit 10 Elementen gefüllt)
Diese Zahl aktualisiert sich auch nicht. Das wäre das erste Mysterium.
Nun sollte die Case-struktur neue Daten in das FIFO schreiben, wenn die Empty Elements Remaining kleiner 10. Da diese allerdings konstant auf 16384 bleiben wird dieser Bereich nicht aktiviert und nach 10 Elementen bricht das Programm ab, da der FIFO leer ist.

Hm was zeigt dieses Empty Elements Remaining eigentlich an,wenn nicht die verbleibenden freien Plätze im FIFO?
Aus der Hilfe:

Empty Elements Remaining returns the number of empty elements remaining in the host memory part of the DMA FIFO.

Ich muss zugeben, mglw. habe das falsch interpretiert und es ist gar nicht die noch freie Größe im Bereich des FPGA. Probiere doch mal folgendes: Im FPGA-Code liest den FIFO gar nicht aus. Was passiert dann im RT? (Nach dem Motto: Probieren geht über studieren).

Jetzt aber nochmal zu deinem VI:
Direkt nach Start werden dir 16374 Elemente angezeigt.
Das passt ja (indirekt), denn du hast gerade 10 Elemente geschrieben.

Danach schreibst du aber auf den ersten Blick nur leere Arrays und somit ändert sich die Zahl auch nicht.

Gruß, Jens
Die Zahl sollte sich ändern, da ich auf der FPGA Seite Werte entnehme.
(15.09.2013 22:39 )Mietzekatze schrieb: [ -> ]Die Zahl sollte sich ändern, da ich auf der FPGA Seite Werte entnehme.
Die Zahl hat sich doch laut deinem Screenshot geändert. Direkt beim Schreiben kommt 16374 raus. FPGA entnimmt Elemente (auf FPGA-Seite). Im RT ist die Rückmeldung 16384.

Gruß, Jens
Referenz-URLs