INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
"Ringspeicher" - hab keine Idee, bitte Hilfe...
07.05.2015, 08:27
Beitrag #1
"Ringspeicher" - hab keine Idee, bitte Hilfe...
Hallo Leute,

mir fällt absolut nichts ein wie ich mein Problem programmieren kann, vielleicht gibt mir mal einer einen Tipp?

Also ich will, sagen wir mal, 5 Werte (kurze Strings) abspeichern. Wenn jetzt ein weiterer String über die serielle Schnittstelle erscheint, dann soll der älteste dieser 5 gespeicherten Werte gelöscht werden. Stattdessen soll dieser neue String als neuester Wert gespeichert werden.

Also immer, wenn ein neuer kommt, soll der älteste (also Speicher 1) wegfallen und dieser neue String dann an letzter (also Speicher 5) Stelle eingefügt werden.
Hoffe, das ist verständlich?

Wie kann ich sowas programmieren?

Grüße, Andreas
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.05.2015, 09:18
Beitrag #2
RE: "Ringspeicher" - hab keine Idee, bitte Hilfe...
Hallo,
so- ganz grob…

int WertStart = 0;
int Wert1 = 0;
int Wert2 = 0;
int Wert3 = 0;
int Wert4 = 0;
int Wert5 = 0;


hole WertStart;



Wert5 = Wert4;
Wert4 = Wert3;
Wert3 = Wert2;
Wert2 = Wert1;
Wert1 = WertStart;


begriffen? Nein…

LoopDurchlauf (erster)

hole WertStart; hier liest er den "ersten" Wert, z.B. 10

Wert1 = WertStart; Wert1 wird hier 10
--------------------------------------------
nächster LoopDurchlauf (zweiter)

hole WertStart; hier liest er den zweiten Wert, z.B. 20

Wert2 = Wert1; hier wird Wert2 zu Wert1 aus dem erstenDurchlauf "10"
Wert1 = WertStart; Wert1 wird hier 20
--------------------------------------------
nächster LoopDurchlauf (dritter)

hole WertStart; hier liest er den dritten Wert, z.B. 30

Wert3 = Wert2; hier wird Wert3 zu Wert2 aus dem erstenDurchlauf "10"
Wert2 = Wert1; hier wird Wert2 zu Wert1 aus dem zweitenDurchlauf "20"
Wert1 = WertStart; Wert1 wird hier 30
---------------------------------------
nächster LoopDurchlauf (vierter)
----------------------------------------------
Das ganze nennt sich RingBuffer. Das geht auch eleganter, wenn Du das mit
einem Zähler machst. Dann kannst Du das als "Array" in den Speicher schreiben.
Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.05.2015, 09:26
Beitrag #3
RE: "Ringspeicher" - hab keine Idee, bitte Hilfe...
Gibt es auch schon als fertige lib. Wird ja oft gebraucht, sowas.

Circular Buffer
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.05.2015, 09:27
Beitrag #4
RE: "Ringspeicher" - hab keine Idee, bitte Hilfe...
(07.05.2015 08:27)DL1AKP schrieb:  mir fällt absolut nichts ein wie ich mein Problem programmieren kann,
LOL... Die meisten hier programmieren tatsächlich eher Probleme als Lösungen. SCNR.

Du definierst Dir ein Array und einen Index. Immer, wenn was reinkommt, wird der Index um 1 erhöht, außer Du bist schon am Ende, dann Index = 0.
Für die Details kommt's darauf an, was Du damit machen willst. Wie willst Du darauf zugreifen? ...und auch noch: Warum willst Du das machen? Die serielle Schnittstelle hat sowieso schon einen Ringpuffer. (Oder genauer: Die Serial-"Lib".)

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.05.2015, 09:28 (Dieser Beitrag wurde zuletzt bearbeitet: 07.05.2015 09:31 von tito-t.)
Beitrag #5
RE: "Ringspeicher" - hab keine Idee, bitte Hilfe...
drauf achten, dass die Zählung bei 0 anfängt!
5er Array geht also von 0 bis 4 !

2 Möglichkeiten:
1) FIFO-Puffer
2) Ringspeicher

1) FIFO: Array[5]
a) 0. Wert ins 0. Array-Fach
wiederholen (Schleife):
b) wenn neuer Wert kommt:
von 3 bis 1 alle ein Fach höher setzen (Fach[i+1]=Fach[i], absteigend)
dann wieder den neuen Wert in Fach 0

2) Ringpuffer: Array[5] plus eine Zählvariable i (zunächst auf 0 setzen)
a) 0. Wert ins 0. Fach, Zählvariable i: +1
wiederholen (Schleife):
b) wenn Zählvariable i==5 dann Zählvariable i=0
c) nächster Wert ins i. Fach, Zählvariable i: +1

usw.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.05.2015, 10:09 (Dieser Beitrag wurde zuletzt bearbeitet: 07.05.2015 10:12 von memeqri.)
Beitrag #6
RE: "Ringspeicher" - hab keine Idee, bitte Hilfe...
Code:
buffer[pointer] = value;
  pointer ++;
  
  if (pointer >= BUFLEN) // oder 3 oder was auch immer
  {
    pointer = 0;
  }

Sowas in der Art?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.05.2015, 13:52 (Dieser Beitrag wurde zuletzt bearbeitet: 07.05.2015 13:54 von tito-t.)
Beitrag #7
RE: "Ringspeicher" - hab keine Idee, bitte Hilfe...
genau wie ich es meinte ! Smile

nicht vergessen:
die Zählvariable (i oder "pointer") entweder global definieren (unschön) oder, besser, lokal in der Unterfunktion, in der man den array benutzt, dann aber als "static":
Code:
static int pointer=0;
  //...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.05.2015, 12:35
Beitrag #8
RE: "Ringspeicher" - hab keine Idee, bitte Hilfe...
Danke Euch allen!

Das werde ich mal ausprobieren, wie ich es hinbekomme.
Das Prinzip verstanden habe ich dank SkobyMobil!! Super Erklärung.

Grüße, Andreas
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Prüfung eines Drucksensors mit Hilfe des Arduino r4c3 17 1.967 10.11.2017 22:24
Letzter Beitrag: r4c3
  Suche Hilfe für den Fehler in der Datei Holzwurm56 5 386 01.11.2017 14:26
Letzter Beitrag: Holzwurm56
  Hilfe bei Einschaltverzögerung gesucht Ingo 9 664 28.10.2017 19:04
Letzter Beitrag: Tommy56
  Wie wird bitte der Pin EN am HC05 gesetzt ? comfan 3 318 26.09.2017 16:34
Letzter Beitrag: Alfrede
Photo Hilfe bei meinem Arduino Projekt Niklas 10 576 23.09.2017 21:05
Letzter Beitrag: Niklas
  Nextion Display führt keine gesendeten Befehle aus re.eule 12 2.036 13.07.2017 21:46
Letzter Beitrag: SkobyMobil
  Ublox Neo 6M und Nextion ! Bitte um Hilfe. b3ta 19 1.439 13.07.2017 14:52
Letzter Beitrag: Tommy56
  Anfänger sucht erfahrene Hilfe Customizer 21 1.653 11.07.2017 21:37
Letzter Beitrag: Customizer
  eine einfache Xor Bitte ? himbeersirup 1 413 08.06.2017 09:15
Letzter Beitrag: MicroBahner
  bitte, was ist "link GND" bergfrei 2 443 21.05.2017 15:14
Letzter Beitrag: bergfrei

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste