Hallo zusammen. Ich habe eine generelle Frage zur Vorgehensweise beim Daten- Speichern und Lesen in / aus dem internen EEprom eines ATMega64. Ich habe folgende Struktur angelegt die ich im EEprom speichern möchte: #include <stdio.h> eeprom struct teMesswerte1{ unsigned int counter; unsigned char Wert1; unsigned char Wert2; unsigned char Wert3; unsigned char Wert4; unsigned char Wert5; unsigned char Wert6; unsigned char Wert7; unsigned char Wert8; }; // Danach lege ich die Adresse im EEprom fest auf der diese // Daten gespeichert werden sollen und wie oft: // Variablen im internen EEPROM #asm .eseg .org 0x0000 #endasm eeprom struct teMesswerte1 Messwerte1[20]={0}; // Anzahl der zu //speichernden Strukturen eeprom byte index = 0; // Anzahl der Messwerte //dahinder void Datenspeichern() { Messwerte1[index].counter = index; Messwerte1[index].Wert1 = a; Messwerte1[index].Wert2 = b; Messwerte1[index].Wert3 = c; Messwerte1[index].Wert4 = d; Messwerte1[index].Wert5 = e; Messwerte1[index].Wert6 = f; Messwerte1[index].Wert7 = g; Messwerte1[index].Wert8 = h; index++; if (index > 20) index = 0; // bei erreichtem Maximum werden // die ersten Daten wieder // überschrieben (Ringpuffer) } void main () { ..... // irgendwo hier werden die Messwerte erzeugt Datenspeicner(); // und dann abegspeichert } /////////////////////////////////////////////// Nun meine Frage. Wenn ich die Daten aus dem EEprom per PC / Schnittstelle nun auslesen möchte, ist es möglich die Daten direkt zu lesen? Z.B.: UDR0 = Messwerte1[index].counter; Oder kann ich das nur indirekt machen per Pointer? byte *Pointer; Pointer = &Messwerte1[0]; do{ UDR0 = Pointer; Pointer++; } while(1); Oder muss die Struktur erst in den RAM geladen werden? Weiß hier jemand bescheid? Über Tipps wäre ich sehr erfreut. Danke
Michael_SS schrieb: > Über Tipps wäre ich sehr erfreut. Ohne Kenntnis des verwendeten Compilers kann dir da niemand was anders raten als: RTFM - Das Handbuch zu deinem Compiler/Entwicklungssystem. Das steht das alles drin. Garantiert. Oliver
du hast die Frage eigentlich schon selbst beantwortet. In der Fkt. Datenspeichern() legst Du die Werte direkt im Eeprom ab. Also kannst Du sie auch direkt aus dem Eeprom lesen, z.Bsp. mit UDR0 = Messwerte1[index].counter; Der Compiler macht die ganzen Eeprom Schreib- bzw. Lesevorgänge im "Hintergrund". Kannst ja mal im Assemblerfile nachsehen was der Compiler daraus macht.
@MitLeder Ok, danke. Ja hast du eigentlich recht. Werde ich dann auch so machen. @dfdff: danke das wollte keiner wissen. Dafür gibt es genug andere Möglichkeiten im Netz - oder du bist p genug um in diesem Forum solche Bemerkugen zu machen.
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.