Hallo zusammen, Bei einer Applikation werden Messdaten in einem FIFO-Speicher geschleift und dann alle 5ms an einer Steuerung geschickt. Wie kann man sicher sein bzw feststellen dass der FIFO-Speicher nie voll wird? Ich meine kann man einen Fehler bauen oder simulieren so dass der FIFO-Speicher voll wird? um zu prüfen ob das Programm eine entsprechende Fehlermeldung schickt? Gruß F
:
Verschoben durch Moderator
Fabian schrieb: > Wie kann man sicher sein bzw feststellen dass der FIFO-Speicher nie voll > wird? Indem man die Daten garantiert schneller abholt/verarbeitet als die Quelle sie füttern kann.
Wenn weniger Daten am Ziel ankommen als am Sensor generiert wurden, dann fehlt was ;) Also ich weiß nicht wie der FIFO programmiert ist, aber bei meiner Implementation geht bei einem Überlauf der gesamte Bufferinhalt auf einmal verloren und er macht dann weiter als wäre nichts...
Fabian schrieb: > Ich meine kann man einen Fehler bauen oder simulieren so dass der > FIFO-Speicher voll wird? um zu prüfen ob das Programm eine entsprechende > Fehlermeldung schickt? Uuhhhh, wie jetzt? Einfach keine Daten aus dem FIFO auslesen, dann wird er doch voll- und ueberlaufen? Oder meintest Du was total anderes als Du schrobst?
Guten Morgen es geht um ein Prüfprogramm bei dem eine MDF(enthält Messdaten) geöffnet wird und bearbeitet. Die Messdaten werden zuerst in einem FIFO geschleift und dann zur Steuerung geschickt. Da es auch eine Dauerprüfung gedacht muss vorher sichergestelt werden dass der FIFO nie überlaufen wird bzw wenn er voll ist dann muss das Prüfprogramm einen Fehler zurückmelden. Meine Frage ist wie man das simulieren kann bzw extra einen Fehler bauen um dies zu überprüfen. AN programm selbst kann ich nichts ändern Gruß F
Fabian schrieb: > Die Messdaten werden zuerst in einem FIFO geschleift und dann zur > Steuerung geschickt. Da es auch eine Dauerprüfung gedacht muss vorher > sichergestelt werden dass der FIFO nie überlaufen wird bzw wenn er voll > ist dann muss das Prüfprogramm einen Fehler zurückmelden. Dann musst Du den Punkt "und dann zur Steuerung geschickt" halt drosseln bzw. anhalten.
Rufus Τ. Firefly schrieb: > Dann musst Du den Punkt "und dann zur Steuerung geschickt" halt drosseln > bzw. anhalten. du meinst die Verbindung trennen?
Wie auch immer das bei Dir implementiert sein mag kannst nur Du wissen. Wenn der Teil, der dafür zuständig ist, mit der Steuerung zu kommunizieren, mitbekommt, daß die Steuerung keine Daten mehr entgegennimmt, dann ließe sich damit vermutlich das Verhalten erzielen.
gibt's anderen Weg oder idee wie man einen FIFO Speicher auf Überlauf testen kann?
Nein. Gibt es nicht. Ein Fifo läuft nur dann über, wenn er schneller beschrieben wird, als er ausgelesen wird. Wenn Du die Auslesegeschwindigkeit nicht ändern kannst, könntest Du versuchen, an der Füllgeschwindigkeit zu arbeiten, aber davon abgesehen gibt es keine anderen Möglichkeiten.
Rufus Τ. Firefly schrieb: > an der Füllgeschwindigkeit zu arbeiten, aber davon abgesehen > gibt es keine anderen Möglichkeiten. was meinst du denn damit
Was soll ich damit meinen? Ein Fifo wird von einer Seite befüllt und von einer anderen entleert. Das schreibst Du ja auch selber: > Bei einer Applikation werden Messdaten in einem FIFO-Speicher > geschleift und dann alle 5ms an einer Steuerung geschickt. Du musst also entweder seltener als alle 5ms Datensätze an die Steuerung weiterreichen oder mit mehr als 200 Datensätzen pro Sekunde das Fifo befüllen.
Fabian schrieb: > Rufus Τ. Firefly schrieb: >> an der Füllgeschwindigkeit zu arbeiten, aber davon abgesehen >> gibt es keine anderen Möglichkeiten. > > was meinst du denn damit Wenn du testen willst, ob der Überlauf deiner Badewanne funktioniert gibt es nur 2 Möglichkeiten: Entweder du vergrößerst den Wasserzulauf auf Feuerwehrschlauch-Niveau oder du stopfst den Abfluss zu. Wenn du an die Badewanne selber rankommst, kannst du zusätzlich zum normalen Wasserzulauf auch noch eimerweise selber Wasser zuschütten. Aber laut deiner Aussage hast du ja diese Option nicht. Also bleiben dir nur diese beiden Möglichkeiten.
Karl Heinz Buchegger schrieb: > Entweder du vergrößerst den Wasserzulauf auf Feuerwehrschlauch-Niveau > oder du stopfst den Abfluss zu. ich kann natürlich die Verbindung zwischen Steuergerät und Mikrocontroller trennen und somit werden keine Daten zur Steuerung geschickt. Aber ich gehe davon aus dass das Programm einen Kommunikation-Fehler melden wird das heisst in diesem Fall kann den FIFO-speicher auf Überlauf nicht prüfen. Die 2te Variante war dass ich die Datenmenge die der Speicher holen kann vergrößen muss. Das heisst wenn der Speicher 1mm Messwerte einliest dann soll ich die menge auf 200 erhöhen Darauf habe ich leider keinen Einfluß ich weiss nur dass die MDF datei schrittweise eingelesen wird und zwar alle 10ms werden zB. 100 Messwerte eingelesen. Die Datei liegt in einem vordefienierten Verzeichniss und wird durch Knopfdurck "Messung_Starten" geöffnet
Unter diesen Rahmenbedingungen, wenn Du also weder das eine noch das andere beeinflussen kannst, kannst Du Deinen gewünschten Fifo-Überlauftest nicht durchführen. Wasch mich, aber mach mich nicht nass.
Rufus Τ. Firefly schrieb: > Wasch mich, aber mach mich nicht nass. http://de.memory-alpha.org/wiki/Schalldusche
Fabian schrieb: > Karl Heinz Buchegger schrieb: >> Entweder du vergrößerst den Wasserzulauf auf Feuerwehrschlauch-Niveau >> oder du stopfst den Abfluss zu. > > ich kann natürlich die Verbindung zwischen Steuergerät und > Mikrocontroller trennen und somit werden keine Daten zur Steuerung > geschickt. Was zu beweisen wäre. Wenn dein µC, so wie meistens, die Daten einfach rausbläst und sich nicht darum kümmert ob ihm wer zuhört, dann kannst du die Verbindung trennen und der FIFO läuft deswegen immer noch nicht über. Ein nicht angestecktes Kabel bedeutet nicht automatisch, dass deswegen keine Daten an diesem Anschluss rausgesendet werden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.