www.mikrocontroller.net

Forum: PC Hard- und Software allgemeine Problemlösung für DMA FIFO überlauf gesucht


Autor: Benjamin A. (ben83)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

DMA = "Direct Memory Access"
für was dann noch ein FIFO?

MfG

Autor: Mr. Machine (machine123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grösse des FIFOS erhöhen, drastisch. Etwas anderes bleibt meiner Meinung 
nach nicht. Es muss so gross sein, dass (theoretisch) es nie zu einem 
Überlauf kommt wenn Windows gerade andestwo beschäftigt ist.

Autor: Benjamin A. (ben83)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das FIFO ist eigentlich mehr als genügen gross aber klar grösser geht 
fast immer. Das habe ich mir auch überlegt, nur werden dann die Daten so 
sehr verzögert, dass die Darstellung unnatürlich wird.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, entweder FIFO drastisch vergrößern, oder dafür sorgen, dass die 
mittlere Lesedatenrate aus dem FIFO größer als die mittlere 
Schreibdatenrate ist. Oder das Schreiben in den FIFO unterbinden, wenn 
der fast voll ist. Oder kommen die Daten kontinuierlich, ohne dass du 
sie stoppen kannst?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benjamin A. (ben83)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.