Moin, hier nochmal ein Nachsatz:
Ich habe nun einen Quellcode geschrieben und in mein Hauptprogramm eingebunden, in der Header-Datei steht
Code:
#define Name_Length 20 //Länge des Namen der Sternbildstruktur
#define Daten_Length 16 //Länge der Bitfield-Variablen der Sternbildstruktur
//Struktur der Sternenbilder
typedef struct
{
unsigned char Name[Name_Length];
unsigned char Bitfield[Daten_Length];
} Daten;
//Hilfsvariablen, Buffer zum Arbeiten, Image als Kopie des Hardwarezustands
Daten Buffer;
Daten Image;
Ich habe nun eine Funktion geschrieben, die aus einer anderen Struktur im Flash die Daten in eine Variable vom Typ Daten schreiben soll:
Code:
//Fügt die Konstanten für das Sternbild an stelle Source_Address in die Variable Destination ein
void Set_Image (volatile Daten Destination, unsigned char Source_Address)
{
unsigned char i=0;
for (i=0;i<Name_Length;i++)
{
Destination.Name[i] = pgm_read_byte(&Sternbilder[Source_Address].Name[i]);
}
for (i=0;i<Daten_Length;i++)
{
Destination.Bitfield[i] = pgm_read_byte(&Sternbilder[Source_Address].Bitfield[i]);
}
}
Wenn ich das nun im Hauptprogramm so aufrufe:
Set_Image(Image,0);
Set_Image(Buffer,3);
Dann läuft das erste schon richtig ab, aber er schreibt an der zweiten Stelle in den gleichen Speicherbereich, als ob Image und Buffer identisch wären!
Woran könnte das liegen bzw wie bekomm ichs weg?
Mir fiel noch auf: Halte ich den Cursor über dem Funktionsnamen, so blendet AVRStudio ein, dass Image die SRAM -Adresse 0x101 besitzt, Buffer 0x125. Die Daten werden jedoch im SRAM ab der Stelle 0x4DA abgelegt, und dort auch überschrieben. Der Inhalt der SRAM -Variablen 0x101-0x125 ist und bleibt 0
Lesezeichen