allgemeine Problemlösung für DMA FIFO überlauf gesucht

OP #1185569
Lesenswert?

Hallo Zusammen

Ich habe ein Problem mit einem DMA FIFO, dass mir überläuft und min nun 
auf der Suche nach Lösungen.

Zu meinem genauen Problem:
Ich habe eine Realtime System, dass Daten in einen FIFO schreibt. Diese 
Daten lese ich mit einer Hostapplikation, die unter Win XP/Vista läuft 
aus. Ich habe also 2 Systeme, 1 Realtime und ein Windows system, die in 
eine Richtung komunizieren.
Nun habe ich das Problem, dass die Hostapplikation unter Win XP in 
bestimmten Situationen nicht mehr nachkommt mit der Datenverarbeitung 
und irgendwann läuft das FIFO über.

Meine Frage:
Wie löst man solche Probleme grundsätzlich?
Ich hab mir überlegt, dass ich kurz vor einem Überlauf das FIFO leeren 
kann aber dann gehen mir Daten verloren, was ich nicht möchte.

Freundliche Grüsse
Ben
#1185713
Lesenswert?

Trivialerweise gilt: Wenn die Daten im langfristigen Mittel schneller 
produziert werden, als sie verarbeitet werden können, dann ist 
Datenverlust nicht vermeidbar.

Andernfalls ist das eine Frage der Tiefe des FIFO.

Wo genau sitzt eigentlich das FIFO? Genau zwischendrin in der 
Schnittstellenhardware? Wäre denkbar, die Vorgänge "Übertragung" und 
"Auswertung" zu trennen und "Übertragung" eindeutig zu priorisieren.
OP #1185822
Lesenswert?

@Christian:
Ja die Daten kommen kontinuierlich ohne, dass ich sie stoppen kann.

@ A.K:
Ich programmiere die Host- sowie die RT Applikation in Labview, da hab 
ich ein FIFO im FPGA auf dem RT und ein FIFO das 500 mal grösser ist auf 
dem Host.
Müsste nicht die Auswertung priorisiert werden?
Denn die Übertragung funktioniert ja gut, nur die Verarbeitung ist 
manchmal etwas zu langsam.


Danke für die Inputs bis jetzt
#1185850
Lesenswert?

Benjamin A. wrote:

> ich ein FIFO im FPGA auf dem RT und ein FIFO das 500 mal grösser ist auf
> dem Host.

Und welches davon läuft über? Ist ja wohl die Kernfrage.

> Müsste nicht die Auswertung priorisiert werden?

Kommt drauf an ob die Vorgänge überhaupt in getrennten Prozessen/Threads 
arbeiten. Ich kenne Labview nicht.

Wenn nicht, hast du ohnehin keine Auswahl.

Wenn doch, und da noch etwas ganz anderes drauf läuft, dann ja. Wenn die 
Anwendung aber sowieso schon mit 99% CPU läuft, dann wird sie durch's 
Priorisieren auch nicht schneller, dafür säuft dir dann bei weniger als 
2 Cores garantiert der Transferprozess ab.

Ich dachte allerdings eher an den Fall, dass das FPGA-FIFO überläuft, 
weil der Transferprozess nicht fix genug reagiert.

> Denn die Übertragung funktioniert ja gut, nur die Verarbeitung ist
> manchmal etwas zu langsam.

Wenn auch ein sehr grosses FIFO im Windows noch überläuft, dann solltest 
du an einen schnelleren Prozessor denken. Oder Labview rauswerfen, wenn 
das zuviel Leistung wegnehmen sollte.
#1185864
Lesenswert?

Benjamin A. wrote:
> @Christian:
> Ja die Daten kommen kontinuierlich ohne, dass ich sie stoppen kann.

Ist die mittlere Geschwindigkeit der ankommenden Daten höher als die 
mittlere Geschwindigkeit des Datentransfers zum PC (Software außen vor, 
also die Schnittstellengeschwindigkeit)?

Die Kernfrage ist, ob die Software zu langsam ist, oder ob das Konzept 
nicht passt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren