Hi, ich hab ein Array:
1 | int32_t bla[40]; |
ich möchte das Array in einem Rutsch aus dem EEprom lesen, aber immer nur einzelne Werte schreiben. Wie kann man das machen?
|
|
Forum: Mikrocontroller und Digitale Elektronik Array einzeln ins EEprom schreibenHi, 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? 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. 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.
YO 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. 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.
|
|