Hi zusammen,
ich möchte einen DMA-FIFO leeren. Über "Clear (FIFO)" geht es nicht und in der Hilfe steht dazu folgendes:
Zitat:Clear (FIFO Method)
Requires: FPGA Module
Clears a target-scoped or VI-defined FIFO on the FPGA.
You cannot use this method with DMA FIFOs. To clear DMA FIFOs from the host VI, use the Stop method on the Invoke Method function.
Das Problem ist jedoch, dass das Stoppen des FPGA-VIs das FPGA-VI anhält. Dieses soll weiterlaufen.
Ich nutze mehrere FIFOS, die z.T. parallel gefüllt werden. Und einzelne FIFOs möchte ich leeren können. Ob vom FPGA- oder vom Host-VI ist mir im Prinzip egal.
Wie geht das?
Nachtrag: Ah, da gibt es auch FIFO-Stop. Vermutlich funktioniert's dann doch damit:
[
attachment=29084]
Ich würde es ganz einfach machen: In einer Schleife alle Elemente aus der FIFO lesen und dies so lange bis die FIFO leer ist.
Schöne Grüße
Falk
Hi,
das, was Falk da beschreibt, ist in meinen Augen die Funktion "Auslesen". "Leeren" heißt, alle Daten im FIFO zu löschen, ohne auf sie zugreifen zu können. Das wird auch von den "Stop FIFO" und "Empty FIFO"-Methoden auch nur so unterstützt, sprich es gibt keinen Ausgang "Im Fifo enthaltene Daten" (wie z.B. beim Queue-Leeren...)
ch
Hallo Zusammen
Ich habe ein ähnliches Problem und wollte es mit der While-Schleife lösen (vorher einfach den Elements Remaining ausgelesen und das FIFO nochmals ausgelesen). Nun bekomme ich einen Fehler beim 2mal lesen (While-Schleife) im FIFO-READ. Das FIFO ist noch nicht leer.
Mache ich einen allgemeinen Fehler bei der Verwendung des FIFO's ?
Ich verwende LabVIEW 8.5.1 ein cRIO 9104 und FPGA's 9401
' schrieb:das, was Falk da beschreibt, ist in meinen Augen die Funktion "Auslesen". "Leeren" heißt, alle Daten im FIFO zu löschen, ohne auf sie zugreifen zu können. Das wird auch von den "Stop FIFO" und "Empty FIFO"-Methoden auch nur so unterstützt, sprich es gibt keinen Ausgang "Im Fifo enthaltene Daten" (wie z.B. beim Queue-Leeren...)
Jep schon richtig. Aber wenn das "Leeren" auf Seite des FPGA gemacht werden soll besteht nur die Möglichkeit die FIFO so lange zu lesen bis sie leer ist. Ich weiß nicht ob sich das vielleicht mit neueren LabVIEW- und FPGA Module-Versionen geändert hat, aber unter 8.2.1 habe ich leider nichts entsprechendes gefunden.
Schöne Grüße
Falk
' schrieb:Jep schon richtig. Aber wenn das "Leeren" auf Seite des FPGA gemacht werden soll besteht nur die Möglichkeit die FIFO so lange zu lesen bis sie leer ist.
Ich sehe da bei aktuellen LabVIEW-Versionen auch keine Möglichkeit, es auf FPGA-Ebene anders zu lösen.
Da ich jedoch vom RT-Host aus dem FPGA mitteile, wann Werte erfasst werden sollen und wann nicht, kann ich das Leeren des DMA-FIFO (beim Stoppen der Erfassung) auch über den Host erledigen.
Moin Mechatronik-Ingenieur!
' schrieb:Nachtrag: Ah, da gibt es auch FIFO-Stop. Vermutlich funktioniert's dann doch damit:
[attachment=57939:fifo_stop.PNG]
Wollte mal nachfragen, ob dein Problem sich mit genannter Methode zufriedenstellend lösen ließ?
Schöne Grüße
Falk
Hallo Falk,
ja, das funktioniert einwandfrei.
"FIFO.Start" nutze ich übrigens nirgendwo. Das nur als Info, weil man denken könnte ".Start" und ".Stop" gehören zusammen.
Nach dem Stoppen kann ich direkt Werte in den FIFO schreiben ohne vorigen Aufruf von "FIFO.Start".