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

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.