Philipp schrieb:
> Jedoch bekomme ich beim kompilieren im Startupfile in line 128 eine
> Errormeldung "non-constant expression in '.if' statement":
> /* Reset Handler */
> ...
> .if (RAM_MODE) -> ERROR MELDUNG
RAM_MODE wird im gezeigten Code nicht definiert. Defintion (0 oder
ungleich 0) soll wohl per Kommandozeilenparameter des Assemblers
erfolgen. Zur Not kann man den Wert mit .equ am Beginn der Startup-Datei
den Wert setzen.
> LDR R0,=main
> BX R0
Hmm, main wird also nur bei RAM_MODE direkt gerufen (vorher noch
SystemInit)...
> .else
> LDR R0,=_start
> BX R0
...ansonsten wird die Funktion _start gerufen, deren Quellcode ich in
den angehängten Dateien übersehen haben muss. _start müsste .data
kopieren, .bss "nullen", evtl. noch irgendwelche herstellerspezifischen
Initialiserungen der C-Library durchführen und dann ebenfalls main
rufen.
>...
> Die files habe ich aus der lpc17xx.cmsis.driver.library.zip Datei von
> NXP.
Die Leute von NXP scheinen große Fans des CS3-Systems von Codesoucery.
Was scheibt NXP zu den Beispielen? Keine Kurzanleitung wie und mit was
man die zusammenbauen muss? Makefile(s) dabei?
> Ich habe auch schon mehrere Files probiert, jedoch war der program
> counter beim Debuggen dann an irgendwelchen abstrusen Adressen... sofern
> es compilierbar war.
Für Antwort/Vorschlag fehlen Details.
> Habt ihr eine Idee, was die Ursache dieses Problems sein könnte? Bzw.
> was ich dagegen tun kann / ändern kann?
- map-File erstellen, nachsehen, ob Vector-Table bei 0 beginnt
- nachesehen, wie erstes Element des Tables aussieht (Stack-Pointer),
kann man sogar leicht im bin oder hex-file nachvollziehen, ansonsten
Symbol-Tabelle oder Disassembly.
- Wert hat Symbol cs3_reset entspr. Adresse reset-handler?
- Quellcode SystemInit ansehen
- Quellcode _start ansehen
> Oder hat von euch vielleicht jemand ein Startupfile und ein Linker
> Script, welches für diese Konstellation passen könnte (Eclipse,
> arm-none-eabi Toolchain von Sourcery G++ Lite) ?
Für NXPs Cortex-M3 bin ich noch kein "jemand", da bisher keine Hardware
einem solchen Controller in den Fingern gehabt. Man kann aber mit wenig
Aufwand Linkerscripte und Startupcode aus Projekten für Cortex-M3
anderer Hersteller (z.B. TI/LMI, STM) und GNU Toolchain an NXP LPC
anpassen (Adressbereiche, Vektor-Table, evtl. remapping). Debugging dann
im nächsten Schritt, wenn erstmal eine LED blinkt.