Forum: Compiler & IDEs mspgcc: Binaries nach compilieren nicht (direkt) lauffähig


von Valentin (Gast)


Lesenswert?

Hallo Leute,

ich habe seit einer Woche ein CC430F6137 Development Board von TI da ich 
mir vorgenommen habe etwas mit 6loWPAN rumzuspielen. Vorher wollte ich 
aber erstmal die Basic LED-Blink Beispiele durchmachen da ich noch nie 
mit dieser Plattform gearbeitet habe. Also erstmal mspgcc für Linux neu 
compiliert, was soweit auch gut lief. Eclipse hat es auch gemocht, so 
dass ich relativ bald das erste example für meinen CC430F6137 erstellen 
konnte.

Das flashen mit mspdebug lief auch problemlos, mit folgendem output:
Erasing...
Programming...
Writing  156 bytes to 8000...
Writing   32 bytes to ff80...

Laufen tut der Code aber nur wenn ich vorher noch per Hand folgende 
Befehle in mspdebug eingebe:
mw 0xfffe 00
mw 0xffff 80
reset

Ich habe diese Hex-Werte aus einer Binary welche mit TI's IDE erstellt 
wurde. Aus der Memory Map konnte ich herauslesen dass es sich bei den 
Adressen 0xfffe und 0xffff um den Reset-Vektor handelt. Ich verstehe 
jedoch nicht warum das per Hand machen muss wenn ich meine Quellen mit 
mspgcc übersetzte. Denn TI's Compiler macht dies automatisch wenn ich 
seine Binaries auf den Chip flashe. Wäre schön wenn jemand von euch 
Licht ins Dunkel bringen kann, ich bin jedenfalls überfragt.

Beste Grüße,
Valentin

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Mit msp430 hab ich noch nie gearbeitet...

Nach deinen Infos steht ab 0xff80 die Vektortabelle, und die wird 
offenbar nicht richtig initialisiert.

Du must nur noch rausfinden, warum ;-) Wo kommt die Vektortabelle her 
(binutils, startupcode?) Wie kommt der Programmanfang dahin? Etc. 
Fehlende/falsche Optionen? msp430-ld verwendet anstatt msp430-gcc zum 
linken? Brauch man eigenes ld-Script oder spec-File...?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Könnte es sein, daß Du eine Debug-Version erzeugt hast, die nur unter 
Kontrolle des per JTAG steuernden Debugger lauffähig ist?

von Christian R. (supachris)


Lesenswert?

Ob Debug oder Release macht beim mspgcc eigentlich keinen Unterschied. 
Höchstens, wenn man unterschiedliche Compiler-Settings hat. Vom Windows 
mspgcc erzeugte Debug Binaries laufen auch stand-alone. Wenn der Vektor 
nicht passt, hast du wahrscheinlich die falsche -mmcu dem 
Compiler/Linker mitgegeben, oder aber der MSP430 wird gar nicht vom 
mspgcc unterstützt.

von Valentin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

schonmal vielen Dank für die Antworten :-)

@Johann: Die Vektortabelle wird über ein ld-Skript eingepflegt. Ich habe 
mir mal die von mspgcc verwendete und die von TI-Mitgelieferte 
angeschaut. Weiß aber nicht so recht wie ich die Unterschiede zu deuten 
habe um den Fehler zu beheben. Ich habe sie jedenfalls mal beide 
angehängt, memory.x ist vom mspgcc und lnk_cc430f637.x von TI.
Mir ist jedoch eins noch aufgefallen. Die TI-Binary schreibt nur den 
Reset-Vektor in die Tabelle sonst nix, während die mspgcc Binary 32 
Bytes einträgt.

@Christian: Meine CC430F6137 MCU soll laut ChangeLog von der neuen 
mspgcc Version unterstützt werden. Jedenfalls meckert mspgcc nicht wenn 
ich ihm das -mmcu=cc430f6137 Flag mitgebe. Und ja ich erstelle im Moment 
noch Debug-Binaries.

Beste Grüße,
Valentin

von Valentin (Gast)


Lesenswert?

Hallo Leute,

okay nach einem kurzen Mailwechsel auf der mspgcc Mailing-List habe ich 
heraus finden können dass das Problem beim linker lag. Diesem musste ich 
auch explizit das "-mmcu=cc430f6137" flag mitgeben damit dieser die 
volle Vektortabelle erstellt.

Nun funktioniert alles wie gewollt.

Beste Grüße,
Valentin

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.