Forum: Mikrocontroller und Digitale Elektronik Flash Monitor von TI mit CCE für MSP430F449


von Stephan (Gast)


Lesenswert?

Hallo erstmal!

Ich sitze hier bei der Arbeit und soll das "Flash Monitor" Programm von 
Texas Instruments (SLAA341) auf den verbauten MSP430F449 zum Laufen 
bringen. Das Problem ist, dass das Programm mit dem IAR Compiler gemacht 
wurde, ich aber den CCE (V3.1) benutzen soll.
Ich habe alles mti der kostenlosen Version von IAR zum Laufen bekommen, 
aber mit dem CCE gibt es da ein paar Probleme...die meisten Sachen habe 
ich schon CCE konform hinbekommen, aber da sind noch ein paar Probleme 
offen:

1. Im c-Code des "Hauptprogramms" (monitor_demo_app.c) wird ein Passwort 
an eine absolute Adresse geschrieben:
__root const int Password @ 0xFBDE = 0xdeaf;
Im "MSP-FET430 Flash Emulation Tool" (SLAU157G) stehen auf Seite 69 
Beispiele, wie man das mit CCE machen kann, dann muss ich allerdings im 
linker command file was dazu schreiben. Beispiel:
im Linker Command File:
alpha=0x200;
in CCE:
extern char alpha;

1.a Ist mit linker command file die Datei lnk_msp430f449.cmd gemeint?
1.b Wenn ja, wo genau muss die Zeile hin? Einfach ans Ende schreiben?
1.c Wie kriege ich das Password konstant und initialisiere es mit dem 
Wert?

Also wenn ich "extern const int Password=0xdeaf;" in CCE schreibe und 
"Password=0xFBDE" in die cmd Datei, dann kommt zwar kein Fehler, aber 
eine Warnung, dass das Symbol Password redefined wurde...und wenn ich 
den Eintrag im cmd-file weglasse gehts auch (aber dann hab ich das 
Passwort ja nicht an der gewünschten Adresse!?).

2. Das eigentliche monitor Programm ist in Assembler geschrieben 
(flash_monitor.s43) und benutzt IAR konforme Direktiven. Die meisten 
habe ich schon CCE kompatibel umgeschrieben (mit Hilfe von oben 
genannten User Guide), aber mit ORG, ASEG, ASEGN und RSEG hab ich so 
meine Probleme.

z.B. werden am Anfang nach RSEG CSTACK ein paar Variablen deklariert und 
dann kommen die Zeilen
ASEG
ORG 0xFC00
Eigentlich müsste ich doch im CCE auch sagen, an welche Stelle im 
Speicher die folgenden Anweisungen ausgeführt werden sollen, aber mit 
.data und co kann ich keine Adresse angeben (so wie ORG 0xFC00 halt), 
oder?

Ich krieg schon Kopfschmerzen...

Wenn jemand ne Idee hat, ich bin für alles offen (am liebsten wär mir 
aber ein Beispiel - Code, den ich auch nachvollziehen kann g)

Viele Grüße

Stepahn

von Stephan S. (stephan1980)


Lesenswert?

So, ich nochmal...

Kann ich die folgenden Zeilen für den IAR

RSEG CSTACK

Outstring DS8 80
...

ASEG
ORG 0xFC00

für den CCE so schreiben:

(RSEG CSTACK weglassen)
OutString .usect ".stack",80
...

.text

???

.stack ist laut SLAU157g Seite 71 äquivalent zu .stack und .stack ist ja 
auch im linker command file (siehe ersten Beitrag) in SECTIONS 
definiert.
Ich krieg zumindest keine Fehlermeldung, aber ob das Programm jetzt auch 
das gleiche macht...???
Ach ja, ORG kommt nur einmal vor und wurde in anderen code examples von 
TI einfach durch .text ersetzt...aber das kommt mir irgendwie zu einfach 
vor!?

von Stephan S. (stephan1980)


Lesenswert?

Ach ja, da wär noch was... ;-)
Mit der Zeile
mov.w   #SFE(CSTACK),SP         ; Initialize stackpointer
wird der Stackpointer (wer hätte es gedacht g) initialisiert.
Laut MSP430 IAR Assembler Reference Guide Seite 34 ist SFE ein Operator, 
der das Ende des Speichers des übergebenen Wertes zurückgibt. Also in 
diesem Fall das Ende des Stacks. Da .stack im CCE command linker file 
mit
.stack     : {} > RAM (HIGH)
definiert ist, und RAM ebenfalls mit
RAM                     : origin = 0x0200, length = 0x0800
definiert ist, müsste ich doch, da wir ja definitiv nur den F449 
benutzen, die Adresse auch direkt eingeben könne, oder?
Also
mov.w   #0x0A00,SP
???
Dann sollte der SP am Ende vom Stack-Speicher stehen, richtig?

von Stephan S. (stephan1980)


Lesenswert?

So, habs jetzt soweit hinbekommen, dass nur noch ein Assembler-Fehler 
kommt (die Sache mit dem Passwort hab ich erstmal weggelassen...):
Der CCE Assembler erkennt das Symbol MEM_START nicht.
Das Problem: dieses Symbol gibt es nirgends!?
Ich hab herausgefunden, dass im Code mehrere Zeilen stehen, die 
#UMEM_START oder #UMEM_SIZE beinhalten und damit z.B. den Anfang oder 
die Größe des Flash Speichers in Register schreiben (z.B. zum Erstellen 
einer Checksum).
Wenn ich alle diese (5 oder so) Zeilen auskommentiere, hab ich den 
Fehler nicht mehr, also muss es mit #UMEM_START und #UMEM_SIZE zu tun 
haben (es gibt noch #UMEM_END, aber da beanstanded CCE nix!).
Ich finde nirgends einen Hinweis, was UMEM_START und _SIZE machen, oder 
wo sie definiert sind, geschweige denn wie ich das zum CCE portieren 
kann. Es muss irgendeine IAR spezifische Deklaration geben, aber ich 
find ums Verrecken nix...
Ich mach erstmal Feierabend...krieg schon wieder Kopfschmerzen.

Edit: mir ist schon klar was die Dinger ungefähr machen sollen, steht ja 
quasi dabei, aber eine genaue Definition wäre schon hilfreich.

von Stephan (Gast)


Lesenswert?

Och nee, oder?
Dat ganz UMEM_ und MEM_START Gedöns ist ja in flash_monitor.h 
definiert!?!?

Da schlägt das alte Sprichtwort "den Wald vor lauter Bäumen nicht sehen" 
wieder mal voll zu...

Was ich aber nicht verstehe ist, dass ich flash_monitor.h ja eingebunden 
habe und der Assembler einige Sachen daraus erkennt, aber z.B. MEM_START 
nich? Naja, schaun wa mal...

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.