Keil uVision4 String ins Flash

OP #1935946
Lesenswert?

Folgende Frage:

Bin zurzeit an einem LCD Menue.
Eval Board ist das MCBSTM32. Chip ist STM32F102.
Nun hab ich mir als Basis das AVR Butterfly Menue genommen.

Dort werden die texte wie folgt gespeichert:
1
__flash char MT_AVRBF[]                     = "AVR Butterfly";

Nun leider versteh das uVision4 den "Befehl" __flash nicht.

Mein Code siets so aus:
1
char MT_INFO[]  = "Info";
2

3
static char *statetext0;
4

5
statetext0 = MT_INFO;

Was muss ich da angeben damit er das nur ins Flash schreibt und nicht 
ins RAM? Oder macht der das schon so?

Im Web hab ich irgendwas mit "code" als schlüsselwort gefunden. Aber 
irgendwie packt er das nicht.
http://www.keil.com/support/man/docs/c51/c51_le_code.htm



Gruss Oli

==>Bin Neueinsteiger bei ARM/uVision.
#1935989
Lesenswert?

Kommt auf die Projekteinstellungen an "Options for Target", da siehst Du 
die Flash/Ram Bereiche und wohin alles gelinkt wird.

STM32 hat zumindest nach außen einen linearen Adressbereich, wo Ram und 
Flash liegen (Neumann Architektur). Anders als bei den AVR, wo Flash und 
Ram gleiche Adressen haben können (Harward Ar.) Musst grundsätzlich 
umdenken.
#1936028
Lesenswert?

Bei diesen Einstellungen (Standard, solltest Du so lassen) so wie 
gesagt:

const char MT_AVRBF[] = "AVR Butterfly";



Nur als Hinweis:
Kannst auch das gesamte Programm in den RAM legen, zB. mit:

IROM1: 0x2000000 - 0x4000 Startup (yes) IRAM1: 0x20004000 - 0x1000

Da müssten dann ggf. in den Programm noch paar Sachen beachtet werden, 
zB. die Interrupptvektoren.

IROM ist bei den STM32 nicht zwangsläufig mit FLASH gleichzusetzen. Er 
kann ein Programm auch aus dem RAM ausführen. Besonders zum testen macht 
sich das gut. Ist natürlich weg, wenn Du VCC abschaltest.

Ansonsten empfehle ich Dir zunächst, dass Du Dich erstmal internsiv mit 
der STM32-Familie beschäftigst, Datenblatt etc. Diese µC sind nicht 
unbedingt was zum Einstieg. Da ist AVR besser geeignet.
OP #1938210
Lesenswert?

Matthias K. schrieb:
> Bei diesen Einstellungen (Standard, solltest Du so lassen) so wie
> gesagt:
>
> const char MT_AVRBF[] = "AVR Butterfly";


hab ich schon probiert. Gibt ne compiler fehler meldung:
error:  #513: a value of type "const char *" cannot be assigned to an 
entity of type "char *"

Da muss irgend ein Problem mit dem Pointer vorliegen. Aber wie behebe 
ich das?


> Ansonsten empfehle ich Dir zunächst, dass Du Dich erstmal internsiv mit
> der STM32-Familie beschäftigst, Datenblatt etc. Diese µC sind nicht
> unbedingt was zum Einstieg. Da ist AVR besser geeignet.

AVR hab ich schon oft erfolgreich eingesetzt. Wie gseagt es geht hier ja 
nur um die Optimierung des Codes. Laufen tut das so. ;)

Gruss Oliver

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren