So, ich denke so müsste es klappen. Der Compiler meldet keinen Fehler mehr ich hoffe nur, die Logik stimmt auch so.
Code:
typedef struct {
uint8_t min, sek, hour, date, mon, year, druck, feuchte, temp;
} Messung;
. . .
Messung aktMessung;
Messung * adress;
Messung * i;
...
int main() {
...
case 6: //Teil einer Eingabe Aufforderung
uart_puts("Alle Werte aus dem EEPROM auslesen\r\n");
adress = (Messung*) eeprom_read_word(0x00);
for(i=(Messung*)0x02; i < adress; i++) {
//Ich will die Werte solange auslesen, bis ich bei der letzten Eingetragenen Messung angekommen bin
eeprom_read_block(&aktMessung, i, sizeof(Messung));
//Ausgabe von aktMessung über uart...
//...
}
break;
case 7:
uart_puts("EEPROM Zeiger reseten.\r\n");
eeprom_write_word(0, ((uint16_t)(Messung*)0x02));
/*Ist das so richtig, oder zeigt er dann wo falsch hin. Ich dachte mir, ich nehm 2 mal die breite der Struktur und dann muss dass ganze ja aber natürlich wieder zum uint16_t werden für die funktion. */
break;
//...
} // Ende main();
//...
void speichern() { //Speichert die Werte aus aktMessung in den EEPROM
#if DEBUG
uart_puts("Alle Werte der letzten aktuellen Messung speichern.\r\n");
#endif
adress = (Messung*) eeprom_read_word(0x00);
//Überprüfung ob noch Platz ist im EEPROM
if( (uint16_t)adress < 60) { /*512 Byte im Speicher / 8Byte pro Struktur = 64. Sicherheitshalbe hab ich 60 genommen.*/
#if DEBUG
uart_puts("Ich werde bei "); PrintInt((uint16_t)adress); uart_puts(" anfangen in den EEPROM zu schreiben.\r\n");
#endif
eeprom_write_block( &aktMessung, adress, sizeof(aktMessung)); adress += 1;
eeprom_write_word(0x00, (uint16_t)adress);
}
else {
uart_puts("FEHLER: Kein Platz mehr im EEPROM!!!\r\n");
}
}
Könnte sich das vielleicht nochmal jemand ansehen und mich über logische Fehler aufklären? Ich werde es nachher auf den Mega16 spielen, aber ich seh das schon kommen, dass da ncihts geht und ich den Fehler nciht finde ...
Danke
Andun
Lesezeichen