Constants im AVR Flash

OP #308975
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
Gast #308976
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren