Forum: Compiler & IDEs atmega64, GCC 3.3.1


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.