PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : eeprom_write_byte



hacker
26.09.2009, 13:41
Hallo,

folgendes Abspeichern im EEPROM klappt ganz gut.


unsigned char Kp_eeprom EEMEM;
unsigned char Ki_eeprom EEMEM;
unsigned char Kd_eeprom EEMEM;

void init_pid(void)
{
// die gespeicherten Parameter laden und Regler initialisieren
Kp = (double) eeprom_read_byte(&Kp_eeprom);
Ki = (double) eeprom_read_byte(&Ki_eeprom);
Kd = (double) eeprom_read_byte(&Kd_eeprom);
// PID Timer
TCCR0 |= (1 << WGM01) | (1 << CS01) | (1 << CS00);
OCR0 = 250;
}

void pid_set_parameters(unsigned char p, unsigned char i, unsigned char d)
{
// Den aktuellen Variablen die neuen Parameter zuweisen
Kp = (double) p;
Ki = (double) i;
Kd = (double) d;
// Die neuen Parameter nicht-flüchtig ablegen, damit sie beim nächsten mal geladen werden können
eeprom_write_byte(&Kp_eeprom, (unsigned char) Kp);
eeprom_write_byte(&Ki_eeprom, (unsigned char) Ki);
eeprom_write_byte(&Kd_eeprom, (unsigned char) Kd);

//itoa(Kp, num, 10);
//uart_puts(num);
}

Meine Frage ist nun, ob die Werte immer an der gleichen Stelle im EEPROM gespeichert werden, oder ob automatisch abgewechselt wird für die längere Haltbarkeit des Speichers. Oder muss man das selber implementieren?

Grüße,
hacker

markusj
26.09.2009, 14:23
Die Variablen werden in eine feste Adresse umgesetzt, auf die immer zugegriffen wird. Evtl. unterscheiden sich die Positionen bei einer Neukompilierung, aber während des Betriebs sind sie konstant.
Wenn du Wear-Leveling haben willst, musst du das wohl selbst implementieren.

mfG
Markus