Gast
#40195
Hallo,
ich habe auch nochmal eine Frage zum Thema "Daten im Flash".
Ich Habe folgende zeilen programmiert:
const unsigned char hallo[3] PROGMEM={1,2,3};
unsigned short test(unsigned char x)
{
return(hallo[x]);
}
Das Ergebnis sieht so aus:
00000054 <__ctors_end>:
54: 01 02 muls r16, r17
56: 03 00 .word 0x0003 ; ????
Die Tabelle steht also im Flash.
.......
00000092 <test>:
92: e4 e5 ldi r30, 0x54 ; 84 <- Pointer stimmt
94: f0 e0 ldi r31, 0x00 ; 0
96: e8 0f add r30, r24
98: f1 1d adc r31, r1
9a: 80 81 ld r24, Z
9c: 99 27 eor r25, r25
9e: 08 95 ret
Kann mir mal jemand sagen, warum der Compiler den LD-Befehl und nicht
den LPM-Befehl einsetzt? Ich habe das mal im AVR-Studio auf
Assemblerebene im Einzelschritt simuliert und festgestellt, dass es auch
nicht funktioniert. Er liest irgendwas aus dem RAM aber nicht aus dem
Flash. Ausserdem kopiert er in der Initialisierung auch keine Bytes vom
Flash ins RAM. Diese Kopierschleifen werden sofort beendet.
Markus