Gast
#2362300
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