Forum: Compiler & IDEs Liste der letzten 5 Einträge einlesen.


von AVRli (Gast)


Lesenswert?

Hallo!

Mich beschäftigt nun schon 3 Tage folgendes Problem.
Ich möchte im EEprom 5 Einträge abspeichern und mir irgendwie 
erkenntlich machen welcher Eintrag denn immer der letzte war.

Ein Eintrag hat dabei folgenden Aufbau:
1
struct sMSG {
2
  unsigned bNewMsg:1;
3
  char from[2];
4
  char to[2];
5
  char msg[21];
6
};

davon habe ich nun 5 Stück angeleg...
1
struct sMSG msgBUF[5];

gespeichert wird wie folgt...
1
  msgBUF[byt_msg_buf_pos] = msgIN;
2
  byt_msg_buf_pos++;
3
  if (byt_msg_buf_pos > 4) byt_msg_buf_pos = 0;

Das klappt soweit auch alles. Hurra :-)

Nun möchte ich aber wissen welcher Eintrag der letzte ist damit man den 
dann immer als erstes ausgeben kann. Ok byt_msg_buf_pos sagt mir das 
solange ich den Strom nicht abschalte. Doch wie kann ich mir das im 
EEProm im Datensatz merken damit ich eine Zelle nicht ständig belaste.

Ich hoffe ich konnte meine Frage einigermaßen beschreiben... ;-)



MfG AVRli...

von Peter D. (peda)


Lesenswert?

Lasse einfach in jedem Datensatz ein Zählbyte mitlaufen.
Wenn es im nächsten Datensatz nicht +1 des aktuellen ist, dann ist der 
aktuelle der letzte.


Peter

von StinkyWinky (Gast)


Lesenswert?

Oder speichere byt_msg_buf_pos auch im EEPROM ab

von EEp (Gast)


Lesenswert?

Sieh Dir mal dieses Dokument an:
"AVR101: High Endurance EEPROM Storage"
[Titel] http://atmel.com/dyn/resources/prod_documents/doc2526.pdf

von AVRli (Gast)


Lesenswert?

That's is!!!

Man man man... also ehrlich das ist genial!
Ich mache es so wie Peter Dannegger es beschrieben hat.

In dem Dokument wird es nochmal ausführlich behandelt, denke aber das 
Prinzip ist das gleiche.

>
> Oder speichere byt_msg_buf_pos auch im EEPROM ab
>

Naja das wollte ich ja vermeiden denn dann ist diese Stelle die am 
ehesten kaputt geht. So verteile ich das auf meine Einträge somit sind 
dann 5x mehr Schreibzyklen möglich als bei der "bequemen" Variante.

Vielen Dank!
MfG AVRli

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
Noch kein Account? Hier anmelden.