Moin, hier nochmal ein Nachsatz:
Ich habe nun einen Quellcode geschrieben und in mein Hauptprogramm eingebunden, in der Header-Datei steht
Ich habe nun eine Funktion geschrieben, die aus einer anderen Struktur im Flash die Daten in eine Variable vom Typ Daten schreiben soll: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;
Wenn ich das nun im Hauptprogramm so aufrufe: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]); } }
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







Zitieren
Lesezeichen