Montag, 30. April 2007
Tutorial Entwicklungsumgebung
Bevor ich hier mit den ersten Schritten und dem HelloWorld() der Microcontroller-Programmierung - nämlich dem LED Blinken - anfange, möchte ich erstmal auf die Einrichtung einer Entwicklungsumgebung (IDE) eingehen.
Als ich das Paket von Olimex zum ersten mal öffnete ging ich noch davon aus, dass eine komplette IDE enthalten ist und ich nach wenigen Klicks loslegen und über JTAG debuggen könen würde. Doch weit gefehlt. Lassen sich die Yagarto Pakete von der CD noch ohne Probleme installieren und so eine IDE auf Basis von Eclipse noch relativ problemlos einrichten, so ist das Einrichten der Debug-Umgebung auf Basis von openOCD umso schwieriger. Das liegt vor allem an dem von Olimex gelieferten Tutorial in Form eines PDFs, welches leider extrem veraltet ist. Eine neuere Version gibt es auf deren Homepage, doch diese Version ist leider für ein DevBoard der Konkurrenz. So weit so schlecht.
Nach zwei Wochen googlen und mailens mit diversen Entwicklern hab ich es bis heute nicht hinbekommen, eine Debugumgebung einzurichten oder über JTAG auch nur zu flashen. Nach anfänglichem Frust und Diskussion an der Uni ein anderes Board (und JTAG Interface) zu nutzen, sind wir allerdings schnell zu dem Schluss gekommen, daß JTAG Debugging kein lebenswichtiges Feature ist und wir wie bisher (Beim MSP430) auch über die serielle Schnittstelle debuggen können. Blieb nur noch die Frage, wie die Software denn nun in den Microcontroller kommt, wenn nicht über JTAG? Hierzu bin ich schnell fündig geworden und nutze mitlerweile seit einigen Wochen das kostenlose Tool Flashmagic, was bisher ohne Probleme funktioniert. Nachdem dies nun geklärt ist bleibt immer noch die Frage nach den ersten Schritten. Ich könnte hier jetzt einiges über Makefiles und Linkerscripte schreiben, will mir dies an dieser Stelle jedoch erstmal verkneifen und lieber direkt loslegen. Dazu wird in Eclipse ein "Managed c Projekt" eingerichtet und ich muss mich so um das Makefile erstmal nicht mehr kümmern, sofern ich einige Grundeinstelungen vornehme.
Screenshot Diese Grundeinstellungen befinden sich alle unter dem Menüpunkt "Propertys" im Kontextmenü unseres neuangelgten Projektes in der Projektansicht (linke Spalte in Eclipse). Hier interessiert uns erstmal nur der Punkt "c++ Build". An dieser Stelle müssen wir Eclipse mitteilen wie es unsere Binaries zu bauen und zu linken hat. Erstmal tragen wir als "command" unter "GCC C Compiler" "arm-elf-gcc" ein, dessen Binaries sich nach der Yargato Installation ansich im Pfad befinden müssten. Dann tragen wir bei "Other Flags" unter "Micellaneous" noch "-mcpu=arm7tdmi -Os -c " ein. Das "-Os" ist ein optimierungs Level der noch kleineren Code als "-O3" erzeugt.
Nun nehmen wir uns den Linker vor und tragen bei "Command" auch wieder "arm-elf-gcc" ein. Unter "Linker Flags" bei "Miscellaneous" tragen wir "-T ../lpc2148-rom.ld --warn-common" ein. Das Linkerscript "lpc2148-rom.ld" liegt bei mir in der Projektdir. Wenn das bei euch anders ist, muss der Pfad evtl angepasst werden. Das Linkerscript ist ein Standardscript was ich leicht modifiziert habe, damit malloc() ohne weitere Probleme funktioniert - ihr findet es hier in der Codesammlung. Des weiteren muss noch dafür gesorgt werden, dass beim Linken die crt.o zuerst gelinkt wird. Am einfachsten geht das in dem das "Command Line Pattern" folgenermassen umgestaltet wird "${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} crt.o ${INPUTS}". Nun bleibt nur noch die Frage offen, wo die crt.o denn herzubekommen ist. Diese wird aus der Datei crt.s assembliert wenn als "GCC Assembler" "arm-elf-as" eingetragen wird und als "Assembler Flags" "-ahls -Wa -mapcs-32" gesetzt werden. Diese Datei befindet sich ebenfalls in der Codesammlung.
Als letzte Hürde ist jetzt noch zu nehmen, dass mit diesen EInstellungen ein .elf binary generiert wird - Flashmagic aber gerne ein .hex Binary hätte. Nichts leichter als das: Unter "Build-Steps" wird als "post build" command einfach "arm-elf-objcopy -O ihex Arm.elf Arm.hex" eingetragen und fertig ist's.
Wenn das Linkerscript und die crt.s im Projektverzeichnis liegen, kann nun direkt mit dem ersten kleinen Programm angefangen werden.
Doch dazu mehr im nächsten Teil.

... comment