' schrieb:Hallo id2x,
ich habe das Prinzip schon verstanden. Die 80ms hatte ich als Timer gesetzt, bevor ich den IRQ benutzt habe. Mit IRQ wird die RT-Schleife ja jetzt mit der FPGA-Schleife synchronisiert.
Ich hatte aber übersehen, dass ich in der FPGA-Schleife noch einen Trigger eingebaut habe, der bei periodischen Signalen erst bei Nulldurchgang mit dem FIFO-Schreiben startet, so dass es im ungünstigsten Fall bei einem periodischen Signal von 50Hz eine Verzögerung von 20ms gibt. Außerdem werden die Daten in meiner "RT-Abholschleife" nach dem Auslesen noch verarbeitet (rechenintensivere Aufbereitung und Analyse).
Ich habe noch recht wenig praktische Erfahrung im Bereich RT-Programmierung. Würde es Sinn machen, die ganze Datenanalyse in eine extra Schleife zu packen? Ich habe noch zwei weitere für Regelung/Datenausgabe und den Datenaustausch über TCP/IP.
Schon mal Danke für deine bisherige Hilfe!
Ja, das macht IMHO schon Sinn. In der Abhol-Schleife wandle ich die Roh-Daten eigentlich nur in Spannungen um (=Verrechnung mit der Kalibrierung) und wende die Skalierung darauf an (Spannungen --> Messdaten). Anschließend schicke ich die Daten über einen RT-FIFO oder eine Queue* an die Auswerte-Schleife.
Wenn du einen Trigger in der FPGA-Schleife eingebaut hast ist das natürlich klar, dass sich der Takt verzögern kann. So lang dadurch der FIFO und das warten auf den IRQ nicht in einen Timeout laufen seh ich da auch kein Problem damit. Sehe ich das jetzt richtig, dass du nach einem Nulldurchgang genau 512 Samples pro Kanal aufzeichen willst?
* RT-FIFOs verwende ich eigentlich nur, wenn es richtig schnell gehen muss. Bei Beispielen wie diesem - weil die Übertragung alle 100ms doch recht langsam ist- nehm ich eine Queue (frag mich nicht warum, hat sich irgendwann so eingebürgert und wenn mir Tom gleich ne Watschen gibt, dann weiß ich dass das grundsätzlich falsch ist
) die ich am Anfang des Programms mal initialisiert hab: Erstellen, mit z.b. 200 werten füllen, Flush Queue => der Speicher für diese Queue ist initialisiert