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?
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
Der Wert darf sich nicht ändern und aus Speicherplatzgründen händische Zuweisung der Adresse!
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
Gibts da nicht bei CCE auch spezielle pragma Anweisungen oder so für den Info-Memory?
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.
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.
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.
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
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.