Hallo,
ich hab einen AT90CAN128 und möchte dort im EEPROM einige Werte ablegen.
Dazu hab ich mir folgendes überlegt und aus verschiedenen Tutorials
zusammengebaut:
4k EEPROM -> 512 mal uint64_t
Mich hat das sizeof(eellArray[index]) verwirrt.
NIE würde ich auf die Idee kommen das so zu kompliziert schreiben.
Würde hier sizeof(buffer) bzw. sizeof(data) schreiben.
Sorry 8-)
P.S.
Muss das nicht
eeprom_read_block(&buffer, &eellArray[index], sizeof(...
und
eeprom_write_block(data, &eellArray[index], sizeof(...
sein?
Du solltest erstmal die Frage klären, warum es unbedingt 64 Bit sein
muß.
64 Bit ist im AVR-GCC grottenschlecht implementiert, ist sogar
aufwendiger als float!
Schau Dir mal im Listing an, welche riesigen Codemonster für jede
einzelne 64Bit-Operation erzeugt werden, da wird einem übel.
Und da der EEPROM auch nur byteweise beschrieben wird, kann man besser
ein Bytearray übergeben.
Peter
Wolfgang Birner wrote:
> Ich baue zur Zeit an einem RFID-Reader und der soll ID's (bis zu 7 Byte)> im EEPROM ablegen. Einzelbyte-mäßig wollte ich das nicht machen.
Ich vermute mal, der RFID-Reader gibt die IDs als Byte-Stream aus, dann
ist es sogar sehr sinnvoll, diesen auch als Bytearray abzulegen.
Du mußt ja mit den IDs nicht rechnen (+,-,/,*).
Und zum Vergleichen von Arrays gibts memcmp.
Aber es bleibt natürlich Dir überlassen, ob Du den Code durch die 64 Bit
Umwandlerei auf das 10-fache aufblähen willst.
Peter
Das 64bit so krass sind hätte ich mir nicht gedacht, von float hätte ich
es vermutet.
Der Reader gibt tatsächlich einen Byte-Stream aus, wobei die ID's 4 oder
7 Byte groß sind. Das Umwandeln ist kein Problem, ich hab mir eine union
mit
1
typedefunion{
2
uint8_tb8[8];
3
uint64_tll;
4
}rfid_uid_t;
definiert.
Wo finde ich infos zu memcmp? in der avrlibc finde ich nichts.
Wolfgang
Okay, danke nochmals für den Hinweis.
Jetzt stellt sich mir die Frage, ob ich den Overhead durch uint64_t in
kauf nehmen sollte, bzw. ob der Overhead durch das definieren einer
logischen Struktur (wo dann für den Vergleich diverse Schleifen zum
Einsatz kommen) wirklich kleiner ist.
Aber nochmal kurz zurück zu meiner Frage: würde das im ersten Beitrag
genannte Beispiel so gehen, in Bezug auf Speichern im EEPROM, oder liegt
da noch ein Verständnis-Problem/Fehler vor?
Wolfgang