Forum: Mikrocontroller und Digitale Elektronik eeprom adressierung


von Franzl (Gast)


Lesenswert?

ich möchte das eeprom Inhalt eines AVRs nach einem bestimmten Wert 
durchsuchen. Kann ich den Scanvorgang durch das eeprom einfach wie folgt 
durchführen?
1
for (int i=1;i<1025;i++)    //bytes 1 bis 1024
2
{
3
    read_eebyte = eeprom_read_byte((uint8_t *)i);
4
    check_eebyte(read_eebyte);
5
}

von holger (Gast)


Lesenswert?

>ich möchte das eeprom Inhalt eines AVRs nach einem bestimmten Wert
>durchsuchen.

Wozu? Normalerweise weiss man wo im EEPROM welcher
Wert abgelegt ist. Das was du da machen möchtest ist Unsinn.

von last (Gast)


Lesenswert?

holger schrieb:
> Wozu? Normalerweise weiss man wo im EEPROM welcher
> Wert abgelegt ist. Das was du da machen möchtest ist Unsinn.

Stell dir folgende Szenarien vor:

Könnte man Parameter im EEPROM per avrdude ändern, das Programm im Flash
einfach unverändert neu starten und die Paramter neu einlesen?

Könnte man Parameter zur Laufzeit im EEPROM verändern und zB nach einem 
Reset neu einlesen?

Unsinn ist was anderes

von holger (Gast)


Lesenswert?

>Unsinn ist was anderes

Das ist immer noch Unsinn. Wenn du weisst das
dein Wert 3 ist macht es keinen Sinn nach einer
3 im EEPROM zu suchen. Das ist kompletter Schwachsinn.

von B. S. (bestucki)


Lesenswert?

holger schrieb:
> Das ist immer noch Unsinn. Wenn du weisst das
> dein Wert 3 ist macht es keinen Sinn nach einer
> 3 im EEPROM zu suchen. Das ist kompletter Schwachsinn.

Ist es nicht. Mit strlen suche ich in einem String auch nichts anderes, 
als die abschliessende Null. Was mich aber interessiert, ist die Länge 
des Strings und nicht die Null selbst. Hier geht es vielleicht um ein 
ähnliches Problem.

von U. M. (oeletronika)


Lesenswert?

Hallo,
> holger schrieb:
> Wozu? Normalerweise weiss man wo im EEPROM welcher
> Wert abgelegt ist. Das was du da machen möchtest ist Unsinn.
kann sein, so es sich um einen Parameterspeicher handelt.
Ist aber nicht sicher und kann auch anders laufen.

Wenn man z.B. Messwerte in einem EEPROM ablegt, braucht man 
üblicherweise die Position des letzten Eintrages.
Wer das mit einem Pointer macht, der dann normal immer auf der gleichen 
Stelle geschrieben wird, schreibt diese Zelle systematisch tot.

Also schreibt man sequentiell in den EEPROM und setzt ans Ende eine 
Kennung für EoF.
Diese muß man dann nach einem Restart natürlich suchen.

Bei so einem kleinen EEPROM mit nur 1k wird das aber zugegeben mit dem 
Messwerte loggen wohl kaum der der Fall sein.
Gruß Öletronika

von Franzl (Gast)


Lesenswert?

wenn ich mit der funktion eeprom_write_byte ab Stelle 1020 eine 
Zeichenfolge von 10 Zeichen in den Speicher schreibe, kann ich diese 
anschließend korrekt lesen. Wie kann das sein, wo werden die bytes ab 
1024 hingeschrieben?

von last (Gast)


Lesenswert?

holger schrieb:
> Wenn du weisst das
> dein Wert 3 ist macht es keinen Sinn nach einer
> 3 im EEPROM zu suchen. Das ist kompletter Schwachsinn.

Kann es sein, dass du nicht weißt, was eeprom_read_byte() eigentlich 
macht?

Wenn du aber nur ein Troll bist, dann schau dir den Unterschied
von "das" und "dass" genauer an. "ß" macht auch manchmal Sinn, ebenso
die Verwendung von Beistrichen.

Franzl schrieb:
> Wie kann das sein, wo werden die bytes ab 1024 hingeschrieben?

Ich nehme an, du nimmst an, dein EEPROM ist ein KiB groß.
Könnte gut sein, dass du ab 1024 wieder bei 0 beginnend
im EEPROM "weiter"(über)schreibst.

von Franzl (Gast)


Lesenswert?

last schrieb:
> schau dir den Unterschied
> von "das" und "dass" genauer an. "ß" macht auch manchmal Sinn

ich lass mich gern von dir aufklären...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Franzl schrieb:
> for (int i=1;i<1025;i++)    //bytes 1 bis 1024

Die erste Adresse im EEPROM wird, wie sonst auch überall, 0 sein.

Also:
1
 
2
  for (int i = 0; i < 1024; i++)

von Fabian F. (fabian_f55)


Lesenswert?

U. M. schrieb:

> Bei so einem kleinen EEPROM mit nur 1k wird das aber zugegeben mit dem
> Messwerte loggen wohl kaum der der Fall sein.
> Gruß Öletronika

Hängt davon ab was man misst. Ich hab einen Temperatur&Feuchte-logger 
gebaut der alle 30 min misst. Da passen dann fast 2 Wochen logging 
rein...

Da hab ich auch '0xED' für "End of day" in den EEPROM geschieben, damit 
ich die Werte einordnen kann.

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.