mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Keil uVision4 String ins Flash


Autor: Oliver S. (eragon)
Datum:

Bewertung
0 lesenswert
nicht 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:
__flash char MT_AVRBF[]                     = "AVR Butterfly";


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

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

static char *statetext0;

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.

Autor: Matthias K. (matthiask)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
const char MT_AVRBF[] = "AVR Butterfly";

Das ganze ist aber abhängig, ob Du Dein Programm im Flash oder Ram 
ausführst.

Autor: Oliver S. (eragon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okey....und das find ich jetzt wie raus?

Dachte der schreibt den Programm code ins Flash und alle Variabeln ins 
RAM?...bin ich da falsch?


Grusss

Autor: Matthias K. (matthiask)
Datum:

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

Autor: Oliver S. (eragon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias K. schrieb:
> Kommt auf die Projekteinstellungen an "Options for Target", da siehst Du
> die Flash/Ram Bereiche und wohin alles gelinkt wird.
>

Da steht:


IROM1: 0x8000000 - 0x20000 Startup (yes) IRAM1: 0x20000000 - 0x5000

Nun weis ich im Prinzip wo das ROM bzw das RAM ist.

Und wie krieg ich meine Texte nun in das ROM ?


Gruss Oli

Autor: Matthias K. (matthiask)
Datum:

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

Autor: Oliver S. (eragon)
Datum:

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

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.