-
-
Erfahrener Benutzer
Fleißiges Mitglied
Hallo ebby,
eigentlich mache ich eher 'C' aber ich kann mal das Prinzip beschreiben:
Für einen Ringpufferpuffer musst du erst mal Speicher für die Daten reservieren. Dann brauchst einen Merker, für die Stelle in Deinem Speicher an die Du das letzte mal geschrieben hast und einen Merker, für die Stelle in Deinem Speicher, von der Du das letzte mal gelesen hast. Das wars auch schon.
Jetzt musst Du nur noch jedesmal, wenn Du was in den Ringpuffer rein schreibst Deinen "SchreibeMerker" um eins erhöhen und wenn Du was Rausliest, Deinen "LeseMerker" um eins erhöhen.
Wenn Du jetzt noch nach dem Erhöhen von einem Merker den Merker wieder auf dan Anfang von Deinem Speicher setzt, wenn der Merker zu groß ist, bist Du fertig.
Das Erreichen des Pufferendes kannst Du erkennen, indem Du Deinen Merker mit der Endaddresse Deines Puffers (Startaddresse +Länge des Puffers) vergleichst.
Ich versuchs mal in pseudo 'C' vielleicht hilft es Dir...
Speicher reservieren:
------------------------
uint8 Puffer[GROESSE];
uint8 *LeseMerker;
uint8 *SchreibeMerker;
Init:
----
LeseMerker=&Puffer[0];
SchreibeMerker=&Puffer[0];
Schreiben:
-----------
SchreibeMerker++;
if( SchreibeMerker>=&Puffer[GROESSE] )
{ SchreibeMerker=&Puffer[0]; }
*SchreibeMerker=ZuSchreibenderWert;
Lesen:
------
LeseMerker++;
if( LeseMerker>=&Puffer[GROESSE] )
{ LeseMerker=&Puffer[0]; }
AusgelesenerWert=*LeseMerker;
Drew
PS.: Du kannst das ganze noch erweitern, in dem Du beim Lesen die beiden Merker vergleichst und so herausfinden, ob Du von einer Stelle liest, in die auch schon was geschrieben wurde, oder nicht (Overflow Error).
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen