Konstanten im Flash ablegen

Gast #6487
Lesenswert?
• ▲
▼
Hallo AVR-GCC-Spezis!

Ich habe ein Programm für den 90S8515 geschrieben. Dabei muss ich eine 
recht große Look-Up-Table benutzen (für OSD-Chip STV5730). Die Tabelle 
möchte ich dher im Flash ablegen. Mein Code-Schnipsel sied so aus:

const unsigned char _attribute_ ((progmem)) my_char_code[128] = { 
0xff, ...... };

Compilieren und drauf zugreifen mit:
code = PRG_RDB(&my_char_code[*str]);
geht auch.
Ein "make size" bringt aber das Erginis, dass im RAM 128 Byte dafür 
verbraucht werden. Da kann doch was nicht richtig sein. Wer hat eine 
Lösung??

Mfg
Jens
Gast #6491
Lesenswert?
• ▲
▼
Hallo nochmal,
Ich weiß jetzt nicht, was ihr damit meint. Das mein "unsigned char 
xyz[128]" Byte "verbraucht" ist mir klar. Nur will ich das im Flash 
ablegen, um den knappen SRAM Platz zu sparen.

avr-sizex --long --top 10 --mcu at90s8515 main.elf

    Flash     SRAM     EEPROM
    -----     ----     ------
      64%      86%         0%
     5278      444          0    bytes used
     2914       68        512    bytes free
     8192      512        512    bytes capacity

Top Variables (global/static)
------------------------------
my_char_code         128 bytes


Oder ist das doch im Flash abgelegt und die "Top Variables" zeigt das 
(meiner Meinung nach) nur falsch an.

Gruss
Jens
Gast #6492
Lesenswert?
• ▲
▼
Tschuldige, das war ein Fehler meines Interpreters ;-)

Ich habe mal ähnliche Probleme gehabt mit Strings, die ich in's Flash 
ablegen wollte.
Geholfen hat eigentlich dann nur, dass ich die Deklaration der 
Stringvariablen nicht global, sondern lokal, jeweils in den Funktionen, 
in denen ich die Strings benötigt habe, als PSTR deklariert habe.

unsigned char szBuf[42];

void xyx()
{
char *ps1 = PSTR("Hier kommt der String\n");
char *ps2 = PSTR("und hier noch einer\n");

// irgendwelche Befehle
strcpy_P (szBuf, ps1); // String laden aus Flash
// und dann was damit anstellen
}

Tut mir leid, mehr kann ich dazu im Moment auch nicht sagen.

Gruss
Christian

P.S. Ich habe gar keinen Befehl avr-sizex, bloss avr-size.

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