Forum: Compiler & IDEs Konstanten im Flash ablegen


von Jens Schoon (Gast)


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

von BAB (Gast)


Lesenswert?

poste mal dein compiler trace....

von Christian Schifferle (Gast)


Lesenswert?

Ääähh, entschuldige mal, aber unsigned char xyz[128] ist bei mir immer 
128 Bytes, es sei denn, du verwendest den auf AVR's nicht vorhandenen 
Unicode-Zeichensatz.

Gruss
Christian

von BAB (Gast)


Lesenswert?

...yo hatte ich gar nicht gesehen..:D

von Jens Schoon (Gast)


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

von Christian Schifferle (Gast)


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.

von BAB (Gast)


Lesenswert?

avrsizex ist ein spezialzusatztool...zufinden ist das im avrfreaks 
forum..ist ganz nützlich und man behählt leicht einen überblick....
wollste haben?? lade ich dann hier mal hoch...

von Christian Schifferle (Gast)


Lesenswert?

Hättest Du ja gleich als Anhang posten können, grins ;-)

Gruss
Christian

von BAB (Gast)


Angehängte Dateien:

Lesenswert?

jajajaja...hier isset..:D

von BAB (Gast)


Lesenswert?

ahso..das ins avrmake einbauen:

avr-sizex --mcu $(MCU) $(TRG).elf

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.