mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Texte ablegen, im Ram oder im Flash?


Autor: Dreigestirn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin, moin,

in meinem C-Program, geschrieben mit Codevision für mega64, habe ich 
jede Menge Texte. Diese habe ich bisher alle im RAM abgelegt, quasi als 
Variable.
So etwa:

char *Di176 = "Transmitt data";

Bei 200 Texten wird der RAM natürlich knapp.

Könnt ich diese Texte auch im Flasch ablegen? Welche Programänderungen 
habe ich dann zu machen?

Danke für eure Hilfe!


Dreigestirn

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollte mit code char *Di... gehen.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
const char ....

ist noch früh ;-)

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Transmit data" wird mit einem t geschrieben

Autor: Tobi O. (der_ossi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist doch egal :)

hast du einen externen flash dazu (z.B. den AT45DB041D)?
dann wuerde ich das alles auf dem flash speichern und dann bei bedarf 
via USART auslesen... ist wohl die bessere loesung...

Autor: MarkusW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist aber mal n riesen Aufwand mit dem externen Flash.

Wenn im internen Programmspeicherflash noch genug Platz ist legs doch da 
ab. Such mal im GCC-Forum, da gibt´s einiges zum Thema.

Gruß
Markus

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es bislang ins RAM gepasst hat, dann waren die Strings bereits im 
Flash gespeichert - wo sollen sonst die Werte für die Initialisierung 
herkommen?

Autor: Dreigestirn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Codevision erlaubt die Prefixe 'const' und 'flash'.

Habe jetzt mal umdeklariert:

const char *Di176 = "Transmit data";

aber ich bekomme die Fehlermeldung:

L6300:parameter #7 of type 'flash unsigned char*' is incompatible with 
type 'unsigned char*'specified in the function 'key_define' declaration

Die Deklaration der Funktion ist:

void key_define
(char x1,char y1, char x2, char y2, char dc, char uc, char *str);


Die Funktion selber ist:

key_define(2,3,30,19,'a',0,Di176);


Wie ist die Fehlermeldung zu verstehen?


Rufus, was meinst du mit:...dann waren die Strings bereits im
Flash gespeichert...

Laut Compilerinfo ist der RAM(.cseg) zu 85% vollgeschrieben.

Autor: Thomas B. (yahp) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seit wann ist denn der RAM bei einem ATMega das cseg? Der Code lebt im 
Flash und dort sind auch typischerweise die zur Kompilierzeit 
festeliegenden Konstanten abgelegt, Strings zum Beispiel.

Autor: Dreigestirn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mist, sorry, danke Thomas B.

muss natürlich .dseg. heissen.

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
probiers mit :

key_define(2,3,30,19,'a',0,(unsigned char *) Di176);

der gcc meckert an das der typ : flash unsigned char * (den du durch 
deine texte definiert hast) nicht "kompatibel" ist mit einem normalen 
zeiger auf einen unsigned char.
ich kenne das problem vom msp. da muß ich auch explizit auf unsigned 
char * casten damit der zeiger auf konstanten im flash akzeptiert ...

gruß
rene

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.