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
Man muss PRG_RDB Macro verwwenden! return( PRG_RDB(&hallo[x]) ); Siehe AVRlibc docu, (C:\WinAVR\doc\avr-libc\avr-libc-user-manual\index.html) Modules->Program Space Strings
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.