Forum: Mikrocontroller und Digitale Elektronik Data Placement mit MSP430(Code Composer Studio v4)


von Daniel (Gast)


Lesenswert?

Ich möchte meine Variable unter dem Speicherplatz 0x1040 ablegen:

im Command File vom Code Composer steht:
f_temp=0x1040;

im Header steht dann:
extern const float f_temp;

im cpp:
const float f_temp=0.56;

Mein Problem ist wenn ich auf die Variable zugreife:

res=1.0-f_temp;
wird zwar auf den Speicherplatz verwiesen aber der Inhalt von 
f_temp=0xFFFF;

Laut Mapfile kommt es zu keinen Überschneidungen. Muss ich sonst noch 
was beachten?

von Max G. (l0wside) Benutzerseite


Lesenswert?

Daniel schrieb:
> Ich möchte meine Variable unter dem Speicherplatz 0x1040 ablegen:
>
> im Command File vom Code Composer steht:
> f_temp=0x1040;

> im cpp:
> const float f_temp=0.56;

Warum deklarierst Du die Variable als const und willst sie dann aber an 
eine bestimmte Speicherstelle legen?

Max

von Daniel (Gast)


Lesenswert?

Der Wert darf sich nicht ändern und aus Speicherplatzgründen händische 
Zuweisung der Adresse!

von ZiZi. (Gast)


Lesenswert?

Daniel schrieb:
> aus Speicherplatzgründen händische
> Zuweisung der Adresse!

Aha!?

ZiZi

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Muss nicht im Linker command file auch stehen, von wo bzw. ob die 
section initialisiert wird? Andernfalls wird die Initialisierung von 
Konstanten nicht ausgeführt. So ist es zumindest bei CCS3.3

Grüße,

Peter

von Christian R. (supachris)


Lesenswert?

Gibts da nicht bei CCE auch spezielle pragma Anweisungen oder so für den 
Info-Memory?

von Daniel (Gast)


Lesenswert?

Also ich habs laut USer Guide gemacht:
Im Command linker file hinzugefügt(wo auch die Speicherbereiche,etc,... 
schon vorgegeben sind):
f_temp=0x1040 und im Header mit extern ....

Mit pragma Anweisungen funktionierts nur mit dem IAR Compiler.

von Christian R. (supachris)


Lesenswert?

Laut Manual für den TI Compiler (Code Generation Tools 3.3) gibts die 
pragma Anweisung für die Data Section auch da. Das hätte sicher auch 
geklappt. Aber die ganaue Speicherstelle ist dann vielleicht immer noch 
nicht exakt definiert. Wenn es so jetzt klappt, ist ja prima.

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Also das mit dem pragma hab ich auch schon gefunden, aber ich will meine 
Variable nicht im Segment sondern an absoluter Position abspeichern.
Im Anhang befindet sich meine Beispieldeklarationen, vielleicht hab ich 
ja was übersehen.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

f_temp = 0x1038;

Das liegt ja nicht im RAM, sondern in INFOD.

INFOD                   : origin = 0x1000, length = 0x0040

INFOD ist Flashspeicher, das wäre also eher eine Konstante, wenn man es 
dort hinlegt. Ist das so beabsichtigt?

Grüße,

Peter

von Daniel (Gast)


Lesenswert?

Jap! Der Wert kann nur durch ein externes Kommando verändert 
werden(Flashwrite(...),darum absolute Adresse) und muss auch bei 
Abschaltung beibehalten werden(wenn neuer Wert....). Ich hoffe es ist 
einigermaßen verständlich!

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Es wird wohl daran liegen, dass der Linker als "const" deklarierte 
Symbole grundsätzlich in

.const     : {} > FLASH              /* CONSTANT DATA 
*/

ablegt.

Deswegen steht in f_temp nichts drin.

Ich hab jetzt nicht das ganze Handbuch zu den Linkerscripts gelesen, 
aber man kann normalerweise auch sections definieren, die nur aus einem 
oder zwei Bytes bestehen. Ich denke, es ist eine Voraussetzung für die 
Initialisierung, dass es sich um eine section handelt.

Warum muss das denn überhaupt an fester Adresse leigen? Kann man nicht 
einfach per pragma das Ganze auf .infoD legen und dem Linker überlassen, 
wo es dort genau liegt? Die Updatefunktion zum Überschreiben kann ja die 
Adresse davon aufgelöst bekommen (&f_temp).

Wie sieht denn das Mapfile aus?

Grüße,

Peter

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.