Forum: Compiler & IDEs atmega64, GCC 3.3.1


von Martin Raffelsieper (Gast)


Lesenswert?

hallo!

wer zeigt mir meinen Fehler auf?:



ich möchte einen Datenblock "pgm_data[8]" im Programmspeicher ablegen
und zur laufzeit wieder abholen

Das habe ich wie folgt programmiert:

#include <avr/pgmspace.h>

// Das kommt auch im Flash an:
prog_uchar pgm_data[8] = { 2,3,4,5,6,7,8};


// ein paar Variablen im RAM
unsigned char ram_data[8];
unsigned char i;

// Diese Schleife sollte doch die pgm-Daten in sram_data kopieren,
// tut sie aber nicht.

    for(i=0;i<8;i++)
    {
       ram_data[i] = pgm_data[i];
    }


// Das hier wird erzeugt - muss da nicht ein LPM-Befehl entstehen:


    for(i=0;i<8;i++)
 27c:  90 e0         ldi  r25, 0x00  ; 0
 27e:  35 e1         ldi  r19, 0x15  ; 21
 280:  a3 2e         mov  r10, r19
 282:  31 e0         ldi  r19, 0x01  ; 1
 284:  b3 2e         mov  r11, r19
 286:  ac 0e         add  r10, r28
 288:  bd 1e         adc  r11, r29
 28a:  d5 01         movw  r26, r10
 28c:  ec e8         ldi  r30, 0x8C  ; 140
 28e:  f0 e0         ldi  r31, 0x00  ; 0
    {
       ram_data[i] = pgm_data[i];
 290:  81 91         ld  r24, Z+
 292:  8d 93         st  X+, r24
 294:  9f 5f         subi  r25, 0xFF  ; 255
 296:  98 30         cpi  r25, 0x08  ; 8
 298:  d8 f3         brcs  .-10       ; 0x290
    }




Wer kann mir da helfen???
Gruß Martin

von Jörg Wunsch (Gast)


Lesenswert?

Lies Dir mal das Kapitel über `program space strings' in der Doku
durch.  Du mußt sowas wie pgm_read_byte() benutzen, um die Daten aus
dem Flash zu lesen.

von Martin Raffelsieper (Gast)


Lesenswert?

pgm_read_byte bzw. _LPM  hat mir erstmal weitergeholfen, vielen Dank.

aber von meinem (begrenzten) C-Verständnis her müsste doch mein
Beispiel auch ohne pgm_read_byte funktionieren.

Das Feld pgm_data[8] ist doch extra als "prog_uchar" definiert
worden?!


Gruß Martin

von Jörg Wunsch (Gast)


Lesenswert?

> aber von meinem (begrenzten) C-Verständnis her müsste doch mein
> Beispiel auch ohne pgm_read_byte funktionieren.

Nein, der GCC kann das nicht automatisch handhaben, weil er nichts von
Harvard-Architekturen wissen will.

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.