So, ich denke so müsste es klappen. Der Compiler meldet keinen Fehler mehr ich hoffe nur, die Logik stimmt auch so.
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 ...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"); } }
Danke
Andun







Zitieren

Lesezeichen