Hallo! Hätte mal eine kurze Frage. Ich verwende in meinem C-Programm für einen ATmega8 EEPROM-Variablen. Ich lese sie am Anfang des Programms auf normale Variablen ein und schreibe sie nur ins EEPROM, wenn sie sich ändern. (Was sehr selten passiert) Die Frage wäre, ob es in der Geschwindigkeit des Programms einen Unterschied macht, ob ich eeprom_update_byte() verwende, oder eine eigene Funktion, die die RAM-Variablen abspeichert, sie dann bei jedem Aufruf auf Änderungen überprüft und nur wenn Änderungen da sind, in den EEPROM schreibt? Der Aufruf der Funktionen wäre alle 32ms. Danke im Voraus!
Wie sieht den die eeprom_update_byte() aus? Meiner Vermutung macht diese nämlich genau das, wie du es auch vorhast: - EEPROM lesen - Variable mit gelesenem Wert vergleichen - Bei != Variable ins EEPROM speichern Dazu kann aber nur etwas sagen, wenn man sieht wie genau diese eeprom_update_byte() aussieht. Ist es eine Std Function, dann kannst du eigentlich davon ausgehen das sie ihre "Aufgabe" schnellst als Möglich abarbeitet.
Hallo! eeprom_update_byte ist die Standardfunktion aus eeprom.h vom avr-gcc. DraconiX schrieb: > - EEPROM lesen > - Variable mit gelesenem Wert vergleichen > - Bei != Variable ins EEPROM speichern Man könnte aber auch machen: - RAM-Variable vergleichen mit RAM-Variable aus dem vorigen Zyklus - Wenn ungleich -> ins EEPROM schreiben - RAM-Variable für den nächsten Zyklus abspeichern (ins RAM natürlich) Ungefähr so: void update_eeprom(void) { static uint8_t old=0; if(variable != old) { old=variable; eeprom_writeByte(&variable_eeprom, variable); } }
Wenn du deine Variablen als Block in einer Struktur zusammenfassen kannst, würde sich evtl. 'eeprom_update_block' eignen. Wenn du das vorher prüfen willst, würde ich das auch im Block machen:
1 | #define MAX 10
|
2 | void eeprom_update(uint8_t *src) |
3 | {
|
4 | static uint8_t old[MAX]; |
5 | static uint8_t EEMEM e[MAX]; |
6 | for (uint8_t i = 0; i < MAX; i++) |
7 | {
|
8 | if (src[i] != old[i]) |
9 | {
|
10 | eeprom_write_byte(&e[i],src[i]); |
11 | old[i] = src[i]; |
12 | }
|
13 | }
|
14 | }
|
Hi Wenn: TO schrieb: > eeprom_update_byte ist die Standardfunktion aus eeprom.h vom avr-gcc. Dann kann man sich doch in der .h Datei diese Funktion suchen - oder wo ist mein Denkfehler? MfG
Hi Darin wird wohl irgendwo, von mir aus in Einem der vierundzwanzig weiteren Includes, eine Funktion zu finden sein, Die diesen Namen trägt. Zur Not die Platte nach genau dieser Zeichenfolge, also dem Funktionsnamen, durchsuchen lassen. Aber jesses - ob diese Funktion sturr im Eeprom rumkritzelt oder nicht, verrät Euch gleich das Licht ... oder nicht. Wenn man den Zugriff selber schreibt, weiß man, was passieren wird - wenn man per c&p 'arbeitet', muß man halt im Forum fragen und DANN selber was zusammen schreiben, da es ja nicht zumutbar ist, sich diese Funktion anzusehen. Vll. hättest Du dann besser den Ort der Funktion (wohl dann der Name mit anderer Endung ?) nennen können - aber NACHdenken muß auch nicht immer sein ;) MfG
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.