Pufferstrategie für AVR-Oszilloskop

Gast #3419342
Lesenswert?

Hallo zusammen,
für ein Projekt mit einem AVR und einem Grafik-LCD will ich eine 
Oszilloskopanzeige implementieren. Das Ganze ist kein Selbstzweck, 
sondern nur eine Anzeigeoption für einen dynamischen Regelvorgang, der 
schon auf dem AVR implementiert ist.
Ich habe also Werte, die äquidistant in einem Interrupt erzeugt werden, 
und von denen die letzten N (z.B. N=128) Werte in einer 
nicht-zeitkonstaten Hauptschleife dargestellt werden. Während der 
Anzeige in der Hauptschleife werden im Interrupt sicherlich mehrere neue 
Werte erzeugt.

Momentan suche ich noch nach der geeigneten Pufferstrategie: Im 
Interrupt muß ein Puffer A gefüllt werden, in der Hauptschleife muß ein 
anderer Puffer B abgearbeitet werden, der zeitlich konstant ist. Wenn 
dieser Puffer B mit weniger als N Werten gefüllt ist, müssen der auch 
noch mit Werten aus einem vorherigen Durchgang von Puffer A oder älteren 
Werten aus Puffer B aufgefüllt werden. Also bräuchte ich wohl eine 
Dreifachpufferstrategie?

Es müßte sich ja eigentlich um ein Standardproblem mit Standardlösungen 
handeln: Ich will immer N letzte Werte unverändert anzeigen - wenn in 
der Zwischenzeit mehr als N Werte erzeugt werden können die ältesten 
verworfen werden, eine Abarbeitung darf dagegen nicht die alten Werte 
entfernen. Ist Dreifachpufferung die richtige Strategie oder habe ich 
etwas einfacheres übersehen?

Viele Grüße
W.T.
(Firma: www.dossmatik.de) #3419349
Lesenswert?

denk mal über einen Ringpuffer nach

Das ist eine Pointerlösung auf ein array
Ein Pointer zeigt den aktuellen gültigen Bereich zum auslesen und ein 
Pointer zeigt auf den zu schreibenden Bereich. Wenn der Pointer am Ende 
angekommen ist wird er auf den Anfang gesetzt.
Gast #3419421
Lesenswert?

Es ist keine gute Idee. Der Interrupt, der die Werte bereitstellt, hat 
eine Periode von 50µs. Die Anzeige hat eine Periode von 20ms. Der Puffer 
müßte dann mehr als 100000 Bytes lang sein, damit er sicher nicht 
während der Darstellung durchlaufen wird. Für 128 Bytes 
Darstellungslänge.

Aber diese Beispielrechnung hat mir zumindest die Augen geöffnet, daß 
der Fall, daß der Puffer nicht ausreichend gefüllt ist gar nicht 
vorkommen kann- eine Doppelpufferstrategie mit 2x128 Bytes reicht also.

Viele Grüße
W.T.

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