Data Placement mit MSP430(Code Composer Studio v4)

Gast #2292156
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?
Gast #2292612
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.
Gast #2295139
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!
Persönliche Seite #2295383
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

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