Gast
#3773718
Hi, ich hab ein Array:
1 | |
ich möchte das Array in einem Rutsch aus dem EEprom lesen, aber immer nur einzelne Werte schreiben. Wie kann man das machen?
|
Anzeige
|
Array einzeln ins EEprom schreiben
Gast
#3773718
Hi, ich hab ein Array:
ich möchte das Array in einem Rutsch aus dem EEprom lesen, aber immer nur einzelne Werte schreiben. Wie kann man das machen?
Gast
#3773721
Schwimmbadpinkler schrieb: > aber immer > nur einzelne Werte schreiben. Zunächst einmal sollte man dich fragen, ob du dir im klaren darüber bist dass ein EEPROM eine begrenzte Anzahl von Schreibzyklen hat, bis es den Geist aufgibt..? Sicher, dass du da immer nur einzelne Werte schreiben willst? Je nachdem wie oft du das machst, sagt das Teil schneller Tschüss als dir lieb ist.
Gast
#3773726
Ja, gerade weil ich weiß das dass EEprom eine begrenzte Lebensdauer hat, will ich nur den einen Wert der sich gerade geändert hat schreiben! Schwimmbadpinkler schrieb: > Wie kann man das machen? Woran genau scheitert es denn? Von welcher Plattform bzw. Toolchain sprechen wir überhaupt? Im Falle von AVR und der avr-libc z.B. werden für genau diesen Zweck Methoden bereit gestellt, siehe [1]. Nutzt man die entsprechenden "update" Methoden, dann wird nur etwas geschrieben, wenn sich der Inhalt im EEPROM vom übergebenen Inhalt unterscheidet. Im einfachsten Falle kannst du also einfach über dein Array iterieren und für jedes Element ein die update Methode aufrufen. Schöner/Komplizierter geht es immer: Beim Wordclock Projekt [2] z.B. machen wir es so, dass eine Kopie des EEPROMs im SRAM vorliegt auf welche man über Variablen auf gewöhnlichem Wege zugreifen kann. Möchte man Änderungen am SRAM Inhalt persistent im EEPROM ablegen, so muss man einen "writeback" initiieren. Rein architektonisch gesehen dürfte das in vielen Fällen wohl der elegantere Ansatz sein. Mit freundlichen Grüßen, Karol Babioch [1]: http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html [2]: https://www.mikrocontroller.net/articles/Word_Clock_Variante_1 @ Karol Babioch (johnpatcher) >die entsprechenden "update" Methoden, dann wird nur etwas geschrieben, >wenn sich der Inhalt im EEPROM vom übergebenen Inhalt unterscheidet. Ja! >Im einfachsten Falle kannst du also einfach über dein Array iterieren >und für jedes Element ein die update Methode aufrufen. NEIN! Das machen die schon selber! void eeprom_update_block (const void __src, void __dst, size_t __n) Die Details findet man in der Doku der libc vom win avr.
Gast
#3774068
YO
Gast
#3774107
Nicht eeprom_write_block, sondern void eeprom_update_block (const void __src, void __dst, size_t __n) benutzen, dann werde nur die Bytes geschrieben, die im RAM wirklich geändert wurden. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|