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


von Dreigestirn (Gast)


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

von Joe (Gast)


Lesenswert?

Sollte mit code char *Di... gehen.

von Joe (Gast)


Lesenswert?

const char ....

ist noch früh ;-)

von Sven (Gast)


Lesenswert?

"Transmit data" wird mit einem t geschrieben

von Tobi O. (der_ossi)


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...

von MarkusW (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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?

von Dreigestirn (Gast)


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.

von Thomas B. (yahp) Benutzerseite


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.

von Dreigestirn (Gast)


Lesenswert?

Mist, sorry, danke Thomas B.

muss natürlich .dseg. heissen.

von TheMason (Gast)


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

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.