Forum: Mikrocontroller und Digitale Elektronik PROGMEM Array vorinitialisieren in Atmel Studio 6


von Holler (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

wollte mir eine Sinus-Lookup-Table im Flash eines Atxmega mittels 
folgender Anweisung ablegen:
1
const int16_t sinus_lu[] PROGMEM ={0,
2
20,
3
40,
4
60,
5
80,
6
100,
7
120,
8
139,
9
...
10
};

Die Liste wurde mit einem Octave-script erzeugt und mittels #include ins 
Programm gehängt.
Mein Problem: offensichtlich steht hinterher im Speicher totaler Müll 
drin, egal ob man einen Watch setzt oder sich den Flash-Speicher im 
Memory-Dump ansieht. Was mache ich falsch?

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Lies die Werte mal per Programm aus.
Da die im Window angegebenen Adressen sehr ungewöhnlich ausssehen (die 
Variable liegt ganz sicher nicht an Adresse 0x0000), tippe ich mal eher 
darauf, dass die Ausgabe im Debugger falsch ist.

von Holler (Gast)


Lesenswert?

Ja Du hast Recht, das Array steht nicht an dieser Adresse. Im MAP-File 
findet man die richtige Adresse. Ab 0x178 stehen auch die richtigen 
Daten.

 .progmem.data.sinus_lu
                0x00000178      0x140 src/applic.o
                0x00000178                sinus_lu

Wenn ich mit
1
uint8_t var = pgm_read_word (&sinus_lu[j]);
auf das Array im Programmcode im Flash zugreife lese ich die richtigen 
Daten UND bei einem Break zeigt mir AtmelStudio das Array im Watch an 
der richtigen Adresse mit den richtigen Daten an!

Entferne ich die Zeile, steht die Adresse im Watch für den Array-Begin 
wieder bei 0x0.

Ok, ist ein Bug im AtmelStudio, wenn auch nur ein kleiner.

Vielen Dank für den Hinweis!

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
Noch kein Account? Hier anmelden.