Go Down

Topic: Wert in Variable beibehalten (Puffer?) (Read 598 times) previous topic - next topic

noiasca

#30
Jul 14, 2019, 07:57 pm Last Edit: Jul 14, 2019, 08:02 pm by noiasca
Tommy, Post meint wenn die ZIEL Zelle sich nicht mehr ändert, DANN die Adress-Zelle hochzählen.
D.h. die Adress-Zelle ändert sich erst nach "rund 100.000", wenn also die erste Ziel-Zelle ausgefallen ist. Zumindest hätte ich ihn so verstanden.

Tun würd' ich es auch nicht so, wenn dann einen Ringspeicher wie Atmel auch vorschlägt, irgendwo gabs da deine AN...

Edit: diese da http://ww1.microchip.com/downloads/en/AppNotes/doc2526.pdf
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

4711

Danke - karma

Ich verstehe die Vorgangsweise, es in einen sauberen Sketch umzuwandeln, dazu fehlt mir noch etwas Knoff Hoff.

Tommy56

Tommy, Post meint wenn die ZIEL Zelle sich nicht mehr ändert, DANN die Adress-Zelle hochzählen.
Ok, danke. Das war dann mein Verständnisfehler.
Ich würde aber dann doch lieber einen FRAM nehmen. Ich habe mal den EEPROM von der DS3231 runter gelötet und da einen FRAm drauf. Funktioniert prima.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

noiasca

#33
Jul 14, 2019, 08:44 pm Last Edit: Jul 14, 2019, 08:46 pm by noiasca
Ich verstehe die Vorgangsweise, es in einen sauberen Sketch umzuwandeln, dazu fehlt mir noch etwas Knoff Hoff.
pseudo:
eeprom.get Adressspeicher, Zieladresse
eeprom.put Zieladresse, neuerWert
eeprom.get Zieladresse, tempWert
Wenn tempwert != neueWert
{
  Zieladresse++
  eeprom.put Adresspeicher, Zieladresse
  eeprom.put Zieladresse, neuerWert
}

evtl. das Schreiben/lesen/vergleichen in eine Funktion auslagern damit man sie rekursiv aufrufen kann.

So wie immer, Google ist dein Freund und findet sicher was fertiges:
https://www.google.com/search?client=firefox-b-d&q=arduino+eeprom+wear+leveling

Andererseits, wenn ich mir wegen 100.000 sorgen machen muss ... dann überleg ich mir was anderes
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

postmaster-ino

Hi

Klar könnte man auch eine Ring-Speicher nehmen - aber auch Da müsste ich mir merken, WO ich denn überhaupt bin - die toten Zellen davor können ja 'was weiß ich denn' enthalten und bieten mir so keine Grundlage, wo mein aktueller Wert nun zu finden ist.
Alternativ jede 'vorherige' Zelle mit dem Standard-Wert (meine EEprom wäre 255) 'aus-x-en' und schauen, ob ich irgendwo 'was Anderes als 255er finde'.
Blöd, wenn das zuerst gespeicherte Byte 255 sein sollte - dann finde ich Das wieder nicht oder gehe fälschlicher weise davon aus, daß Das ein unbenutzter Bereich ist.

Da gefällt mir 'meine Methode' besser - eine Adresse (Die NUR geändert wird, wenn die Ziel-Zelle platt ist) und eine Ziel-Adresse.
Wenn Schreiben erfolgreich, fertig, sonst Adresse+1 und erneuter Aufruf.
Wenn wir uns hier in einer Endlosschleife befinden, ist das EEprom rundherum platt und der Arduino hat Seine Aufgabe mit Auszeichnung vollbracht.
... wenn's dann noch Strom gibt ...

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

4711

Ringpuffer - braucht 2 Speicherbereiche, 1. für die Daten, 2. für den Zeiger
Wenn man das dann laufen lässt müsste eigentlich noch ein 3. und 4. hinzukommen, für die defekten Bereiche im Speicherbereich und im Zeigerbereich. Aufteilung des Speicher wird schon interessant.
Wenn nur 1 Zelle tot ist, sollte nicht gleich das ganze System tot sein, wäre meine Meinung dazu.
Damit wird das übertrieben kompliziert und auch Fehleranfällig und benötigt viel Sketch.
Meiner Meinung sicherlich die bessere Wahl für die Lebensdauer, aber unnötig.
Dann wäre mein Schritt zum FRAM.

Meine Entscheidung zum EEPROM wäre nun so lange die Zelle zu beschreiben bis sie tot ist, dann die nächste und nach Stromausfall muss das Ende gesucht. Einmaliges Nullen wäre verm. notwendig, das könnte mit einem Initialisierungs-Sketch gelöst werden, der dann wieder überschrieben wird.

Ist meine These korrekt?


noiasca

Google etwas zu dem Thema.
Zusammengefasstes Halbwissen: Atmel gibt eine beschränkten Schreibzyklus an X Schreibeoperationen innerhalb der gewährleistet ist, dass der gespeicherte Wert eine Dauer von T gehalten werden kann/wieder gelesen werden kann. Das unmittelbare Lesen nach einem Schreiben gewährleistet nicht, dass der Wert auch viel später wieder gelesen werden kann. D.h. die Zelle ist eigentlich schon lange "ausgelatscht" bevor du es mit einer unmittelbaren Lesung auf Korrektheit kontrollieren kannst.

Ein Ringspeicher - so wie in der AN2526 - verteilt die genutzten Daten eben auf die (fast) ganze EEPROM Kapazität und verlängert somit die Nutzbarkeit des EEPROM.

how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

Tommy56

Einmaliges Nullen wäre verm. notwendig, das könnte mit einem Initialisierungs-Sketch gelöst werden, der dann wieder überschrieben wird.

Ist meine These korrekt?
Der initiale Inhalt ist 0xff. Das kann man durchaus beibehalten.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

postmaster-ino

Hi

Solange der Arduino läuft, kann ich ja jederzeit die aktuelle Adrersse - oder besser, Deren Inhalt, auslesen und mit dem im RAM gehaltenen Wert vergleichen.
Klar: Ob Das nach dem nächsten Stromausfall auch noch klappt ...
Kommt halt drauf an, wie oft was geschrieben werden würde - für unbenutztes EEprom gibt's halt ebenfalls kein Geld zurück.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Go Up