Forum: Mikrocontroller und Digitale Elektronik Constants im AVR Flash


von Martin D. (red_shark)


Lesenswert?

Hallo,

vielleicht kann mir jemand bei folgendem Problem weiterhelfen:

Ich möchte Fonts zur Ansteuerung des LCD als Konstanten im Flash
ablegen. Das funktioniert auch, nur habe ich keine Möglichkeit mehr im
Programm auf die Konstanten zuzugreifen, wenn ich einen Pointer auf die
Konstante zeigen lasse. Der Pointer zeigt zwar auf die richtige Adresse
im code memory, aber im Debugger sehe ich immer falsche oder gar keine
Werte. Ich habe es nun schon mit Codevision, ImageCraft und IAR
versucht - immer ohne Erfolg und bin langsam am verzweifeln ...

hier das Codebeispiel (mit IAR for AVR)
typedef struct
{
  unsigned char FirstChar[2];
  unsigned char LastChar[2];
  unsigned short FirstCharNdx[2];
  unsigned short IllegalCharNdx;
  unsigned char XSize, YSize;
  unsigned char TopLine, MidLine, BaseLine;
  unsigned char Cursor1, Cursor2;
  unsigned char Underline1, Underline2;
  unsigned char BoxWidth;
  unsigned char PsSpace;
  unsigned char LineSize;
}
GuiLib_FontRec;

typedef GuiLib_FontRec *GuiLib_FontRecPtr;

__flash GuiLib_FontRec Font_Text31 =
{
  {65,1},
  {70,0},
  {0,0xFFFF},
  6,
  7,12,
  3,5,9,
  11,11,
  11,11,
  6,
  1,
  2
};

 __flash GuiLib_FontRec * GuiFont_FontList1[2] = {
     (GuiLib_FontRecPtr)&Font_Text31,
     (GuiLib_FontRecPtr)&Font_Text31 };

int main(void)
{
 Gulib_FontRecPtr Font;
 Font = GuiFont_FontList1[1];
   for (;;)
   {
   }
} //main

von Ernst (Gast)


Lesenswert?

Kenn jetzt deine Compiler nicht, aber beim avr-gcc muss man
flash-speicher mit
char xx=pgm_read_byte..(pointer)... auslesen,
direkte Zuweisung geht nicht.

Ist warscheinlich bei anderen C-Compilern ähnlich, der einzige
C-Compiler den ich kenne der halbwegs automatisch die Speicherbereiche
einer Harvard-Architektur behandelt ist der SDCC.

/Ernst

von Martin D. (red_shark)


Lesenswert?

Hi,

vielen Dank für deine Info, ich hab's jetzt allerdings mit der
neuesten (Evaluation)Version von IAR versucht, und jetzt funktioniert
es hervorragend, d.h. der Compiler behandelt das Kopieren aus dem
Code-Speicher selbstständig ..

Grüsse

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.