www.mikrocontroller.net

Forum: Compiler & IDEs Konstanten im Flash ablegen


Autor: Jens Schoon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
poste mal dein compiler trace....

Autor: Christian Schifferle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...yo hatte ich gar nicht gesehen..:D

Autor: Jens Schoon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Schifferle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Christian Schifferle (Gast)
Datum:

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

Gruss
Christian

Autor: BAB (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
jajajaja...hier isset..:D

Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahso..das ins avrmake einbauen:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.