mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F1611 Flashwrite / Erase /.


Autor: Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

habe da ein paar Fragen zum Schreiben bzw. Löschen des Flash:

1. was ist das Info-Memory, welche Informationen enthält es und wer 
braucht diese Infos wozu?

2. woher weiß ich an welche Adressen ich meine Daten schreiben kann und 
welche bereits vom Programm belegt sind?

3. Die Daten, die ich zur Laufzeit ins Flash schreiben will, möchte ich 
auch schon beim Laden des Programms via JTAG ins Flsh praktizieren - wie 
geht das?

Wäre echt super, falls jemand mir helfen könnte!! DANKE!!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Hase (Gast)

>1. was ist das Info-Memory, welche Informationen enthält es und wer
>braucht diese Infos wozu?

Das ist ein logisch getrennter, kleiner FLASH-Breich. Dort kann man 
Einstellungen etc. speichern. Der Vorteil ist, dass man es beschrieben 
kann, wenn das normale Programm im restlichen Flash läuft.

>3. Die Daten, die ich zur Laufzeit ins Flash schreiben will, möchte ich
>auch schon beim Laden des Programms via JTAG ins Flsh praktizieren - wie
>geht das?

Einfach reinschreiben.

MFG
Falk

Autor: Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!

1. Info Memory: schreibt man in dieses Memory genauso wie in den Rest 
des Flash bzw. wie in dem Beispiel von TI angegeben? Steht da schon was 
wichtiges drin oder steht es ganz zur Verfügung des Programmierers?

2. Ich verwende einen C-Compiler (Code Composer), wie kann ich da 
festlegen was wohin geschrieben wird? Kann ich auch das Info-Memory beim 
laden des Programms mittels JTAG gleich mitbeschreiben?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Hase (Gast)

>1. Info Memory: schreibt man in dieses Memory genauso wie in den Rest
>des Flash bzw. wie in dem Beispiel von TI angegeben? Steht da schon was

Ja.

>wichtiges drin oder steht es ganz zur Verfügung des Programmierers?

Voll verfügbar.

>2. Ich verwende einen C-Compiler (Code Composer), wie kann ich da
>festlegen was wohin geschrieben wird?

Keine Ahnung.

> Kann ich auch das Info-Memory beim
>laden des Programms mittels JTAG gleich mitbeschreiben?

Denke schon.

MfG
Falk

Autor: Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Falk,

vielen Dank für diese Hinweise zu später Stunde! Werde also wohl das 
Info-Memory verwenden.

Den Rest weiß ja vielleicht auch noch jemand...

MfG
Hase

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Steht da schon was wichtiges drin oder steht es ganz zur Verfügung des 
>Programmierers?
Bei Deinem F1611 ist es frei, bei den F2xxx stehen da einige 
Kalibrierwerte für DCO-Clock und für den AD-Wandler drinne. Wenn man 
diese braucht, darf man natürlich nichts anderes drüberflashen!
Man kann im INFO-Bereich aber auch Programmcode speichern lassen, man 
muss das nur den Linker wissen lassen, dass er den Bereich auch nutzen 
darf!
Beim IAR z.B. im Linker-File (.xcl) (Adressen für den F1611 anpassen!):
-Z(CODE)CODE=F800-FFDF
ändern in
-Z(CODE)CODE=1000-10FF,F800-FFDF

>Ich verwende einen C-Compiler (Code Composer), wie kann ich da
>festlegen was wohin geschrieben wird? Kann ich auch das Info-Memory beim
>laden des Programms mittels JTAG gleich mitbeschreiben?
Kenne den CC nicht, aber es wird wohl ähnlich funktionieren, wie beim 
IAR:
#pragma location="INFO"
__root
const Const_1 = 0x0001;
const Const_2 = 0x0002;   
...
Der INFO-Bereich wird im Linker-File definiert
Also z.B.
-Z(CODE)INFO=1000-10FF

>woher weiß ich an welche Adressen ich meine Daten schreiben kann und
>welche bereits vom Programm belegt sind?
Das sollte der Linker wissen!
Es sei denn, Du beschreibst das INFO nur zur Laufzeit ohne vorher 
Konstanten definiert zu haben, dann musst Du selbst aufpassen!

Autor: Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

vielen herzlichen Dank für die ausführliche Antwort!

Gehe ich recht in der Annahme, daß
-Z(CODE)INFO=1000-10FF
eine CompilerOption ist, die dem Compiler sagt, daß der Speicherbereich 
von 1000 bis 10FF dem Bezeichner "INFO" zugeordnet ist? Kann ich diese 
Option einfach in den Progamcode einfügen?
#pragma location="INFO"
__root
const Const_1 = 0x0001;
const Const_2 = 0x0002;   
...
Was macht eigentlich "__root"? Die oben gezeigten Konstanten werden beim 
Laden des Programms in den Controller einfach in den Infobereich 
geschrieben? Wie praktisch!

Um etwas zur Laufzeit in den Infobereich schreiben zu können, benötige 
ich einen Pointer, der den Bereich adressiert. Wo bekomme ich den den 
her? Hat der einfach der Wert 0x1000?

Werd das gleich mal ausprobieren.

Beste Grüße
Hase

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Gehe ich recht in der Annahme, daß
>-Z(CODE)INFO=1000-10FF
>eine CompilerOption ist,
Nein! Es ist keine Compileroption, sondern eine Linkeroption!

>die dem Compiler sagt, daß der Speicherbereich
>von 1000 bis 10FF dem Bezeichner "INFO" zugeordnet ist?
Nein! Sie sagt dem Linker, dass...

>Was macht eigentlich "__root"?
Erstmal eine Korrektur:
__root muss vor jeder Konstante stehen!
__root ist eine IAR-spezifische Option, die dem Compiler/Linker sagt, 
dass die jeweilige Variable/Konstante auf jeden Fall verwendet werden 
soll, auch wenn später im Programm u.U. gar nicht darauf zugefriffen 
wird. In dem Falle könnte es nämlich passieren, dass die Optimierung 
zuschlägt und die Variable/Konstante eben doch nicht angelegt und ins 
Flash programmiert wird!

>Um etwas zur Laufzeit in den Infobereich schreiben zu können, benötige
>ich einen Pointer, der den Bereich adressiert. Wo bekomme ich den den
>her? Hat der einfach der Wert 0x1000?
Die Adresse der Konstanten kannst Du frei wählen (im Bereich des 
INFO-Segments natürlich)
Oder aber du definierst eine Konstante:
#pragma location="INFO"
__root
const Const_1 = 0x0001;
und greifst dann auf die Adresse der Konstane zu:
p_pointer = &Const_1;

Autor: Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, VIELEN DANK! - ich habe inzwischen herausgefunden, daß INFOA und 
INFOB bereits als Adressen für die beiden Segmente des INFO-Bereichs 
definiert sind. Aber die Zuordnung mit dem #pragma funzt net! Im Code 
Composer Essentials (CC) muß das irgendwie anders laufen...

Auch ist mir nicht klar wie ich den Bereich begrenzen kann, der ins 
INFO-Memory geschrieben wird. Ich habe z.B. 20 globale Constanten 
angelegt, von denen aber nur 10 in den Infobereich sollen. Wie weiß der 
Compiler/Linker, wo die Liste der Constanten für den Infobereich zu Ende 
ist?!?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Hase (Gast)

>angelegt, von denen aber nur 10 in den Infobereich sollen. Wie weiß der
>Compiler/Linker, wo die Liste der Constanten für den Infobereich zu Ende
>ist?!?

Das kann man auch per "Hand" machen.

- Alle Konstanten, die in den FLASH sollen in einem struct 
zusammenfasssen
- Einen Zeiger auf dieses Struct auf den Anfang von INFA oder INFOB 
legen
- über den zieger auf die Konstanten zugreifen

Das ist dann auch compilerunabhängig

MFG
Falk

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>aber die Zuordnung mit dem #pragma funzt net! Im Code
>Composer Essentials (CC) muß das irgendwie anders laufen...
Das ist wohl war ;-)

>Auch ist mir nicht klar wie ich den Bereich begrenzen kann, der ins
>INFO-Memory geschrieben wird. Ich habe z.B. 20 globale Constanten
>angelegt, von denen aber nur 10 in den Infobereich sollen. Wie weiß der
>Compiler/Linker, wo die Liste der Constanten für den Infobereich zu Ende
>ist?!?
Du wirst nicht darum herum kommen, Dir die Beschreibung zum CC 
durchzulesen, um herauszufinden, wie man derartige Direktiven definiert 
und setzt!
Beim IAR z.B. werden alle Konstanten standardmäßig im (Programm-)Flash 
abgelegt, ausser man definert für gewisse Konstanten eben einen 
anderen Bereich mit #pragma...
Es kann nun z.B. sein, dass beim CC diese Direktiven solange gelten, bis 
man wieder einen anderen Speicherbereich auswählt, oder aber man muss 
vor jede Konstante ein #pragma... setzen, die nicht im normalen 
Programm-Flash landen soll.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk
>Alle Konstanten, die in den FLASH sollen
Meinst Du jetzt Programm-Flash oder INFO-Flash?

>- Einen Zeiger auf dieses Struct auf den Anfang von INFA oder INFOB
>legen
>- über den zieger auf die Konstanten zugreifen
Selbst dann muss man dem Linker immer noch sagen, wohin er beim 
Programmieren die "struct" flashen soll (mit #pragma oder was auch 
immer beim CC)

Autor: Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe mich entschieden, die betreffenden Konstanten in den 
INFO-Bereich zu flashen. Der ist groß genug.

Autor: Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die Idee mit dem #pragma vor jeder Konstante ist nicht schlecht - nur 
wie sieht dieses #pragma aus? das vom IAR erkennt CC nicht...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wie sieht dieses #pragma aus? das vom IAR erkennt CC nicht...
Doku zum CC lesen !!!

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#pragma DATA_SECTION(...)

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder vielleicht doch besser #pragma CODE_SECTION(...) ?!

Autor: Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DATA_SECTION / CODE_SECTION klingt schon mal gut! habe ein pdf gefunden 
- nennt sich CC-user guide. mal sehen ob ich da was finde.

Autor: HAse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der TI user guide ist leider auch keine große Hilfe! Kann da nichts 
finden...

Ich habe mir einige Beispiele mit CODE_SECTION(...) angeschaut, kann 
aber nicht erkennen, was CODE_SECTION eigentlich genau macht...

Ich brauche einfach einen Befehl (im source-code), der dem 
Compiler/Linker sagt, "schreibe den wert 0x018F an die Adresse X im 
Infobereich". Der Wert soll dann auch zwei Byte des Infobereichs 
belegen. Falls jemand eine solche Codezeile (für TI-Code Composer 
Essentials) schon mal gesehen oder gar verwendet hat, wäre es sehr nett, 
falls er diese Zeiel zur Verfügung stellt! Vielen Dank!

Die Geschichte zur Laufzeit sollte sich eigentlich aus dem TI-Beispiel 
zum Flash ergeben.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Der TI user guide ist leider auch keine große Hilfe! Kann da nichts
>finden...
Such mal bei TI nach: slau132a.pdf

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.