Daten im Flash

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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.