Hallo, ich möchte einen LPC1768 zum Laufen bringen und mit einer Eclipse Umgebung Debuggen. Ich verwende OpenOCD, die arm-none-eabi Toolchain von Sourcery G++ (Lite) und den GDB Debugger. 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 LDR R0,=main BX R0 .else LDR R0,=_start BX R0 .endif .pool .cantunwind .fnend .size __cs3_reset_cortex_m,.-__cs3_reset_cortex_m .section ".text" Die files habe ich aus der lpc17xx.cmsis.driver.library.zip Datei von NXP. Ich habe auch schon mehrere Files probiert, jedoch war der program counter beim Debuggen dann an irgendwelchen abstrusen Adressen... sofern es compilierbar war. Habt ihr eine Idee, was die Ursache dieses Problems sein könnte? Bzw. was ich dagegen tun kann / ändern kann? 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) ? Liebe Grüße, Philipp
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.
Entchuldigung, aber ich spreche keine Deutch. I found a simple solution to the same compiling error as you. Just add to your compiler flags the following: "-Wa,--defsym,RAM_MODE=0" if you plan to run code from FLASH. "-Wa,--defsym,RAM_MODE=1" if you plan to run code from RAM. This passes the symbol "RAM_MODE" directly and only to the assembler and with the value specified. I don't use eclipse, but Code::Blocks instead. In Code::Blocks it is just a matter of opening the project build options -> compiler settings -> other options. It must be a way to do exactly the same in your eclipse.
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.