Hallo lieber Forumuser,
ich habe hier ein Segger JLink Edu und ein Olimex P103 Eval Board auf
dem ein STM32F103RBT6 verbaut ist.
Ich wolle als Entwicklungsumgebung Eclipse benutzen und via gdb
debuggen. Dazu gibt es ja etliche Tutorials im Netz. Bin dem auf Yagarto
gefolgt. Leider hat das nicht so richtig funktioniert. Weshalb ich es
dann mit IAR probiert habe. Dort hat auch alles wunderbar funktioniert
(programmieren + debuggen). Neuen Mut schöpfend wurde das Eclipse
Problem nochmals angegangen. Dieses Mal habe ich es mit diesem Tut
probiert.
http://www.punctr.com/joomla/index.php?option=com_content&view=article&id=19:eclipse-projekteinstellungen&catid=5:stm32-einstieg&Itemid=31
und endlich scheint die Kommunikation zwischen JLink und Eclipse zu
funktionieren. Selbst das Programm lässt sich auf den STM32
herunterladen (zumindest kommt ein Fenster auf dem JLink Flash Download
steht). Leider wird das alte Programm, welches mit IAR erstellt wurde,
anscheinend nicht überschrieben. Ich kann es aus Eclipse heraus
pausieren und wieder starten, aber Eclipse selbst zeigt mir nichts an
und bringt nur eine Fehlermeldung (An error has occurred. See error log
for more details. java.lang.NullPointerException)
Nach einer Weile bin ich dann auf eine Fehlermeldung beim Build Prozess
gestroßen
1
c:/program files/codesourcery/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/bin/ld.exe: warning: cannot find entry symbol _start; defaulting to 00008000
Leider konnte mir google keine wirklich (für mich verständlichen)
Lösungen oder Erklärungen liefern. Kann es sein, dass dem Linker die
Startadresse des Flashspeichers fehlt und dann das Programm an die
falsche Stelle des Flash geschrieben wird?
Gruß noobuntu
Die Warnung besagt, dass es kein Symbol gibt, das mit dem vom Linker
erwarteten übereinstimmt. Einfach im Startup-Code nachsehen, wie der
Name des Reset-Handlers ist und dann im Linker-Script im ENTRY-Parameter
anpassen oder ENTRY ergänzen (vgl. binutils-Dokumentation zum GNU
Linker).
Kann schon sein, dass der Linker ein falsche Startadresse nutzt, dazu
müsste das Linker-Skript und die zum Linken verwendeten Parameter
durchgesehen werden. Die Warnung hilft da nicht wirklich weiter.
Nützliche Information dürften auch MAP-Datei und Diassembly geben. Nutze
selbst anderen GDB-server und andere JTAG-Hardware, zu JLINK und
zugehöriger Software wird vielleicht jemand anderes etwas schreiben.
Hallo,
J-Link und Eclipse läuft ohne Probleme zusammen mit Hilfe des J-Link GDB
Servers. Ich kann auch nur das Yagarto Tutorial empfehlen. Wenn du für
deine CPU ein Projekt haben willst, kannst du dir von unserer Webseite
ein entsprechende embOS Trial Version runter laden. Das soll jetzt keine
Schleichwerbung sein, sondern bei den Projekten weiß ich, das du sofort
los legen kannst ;-).
Eclipse an und für sich ist leider etwas gewöhnungsbedürftig, aber
prinzipiell kann man damit arbeiten.
Darf ich fragen wieso du unbedingt mit Eclipse arbeiten willst? Ich
könnte dir auch noch einige andere empfehlen, die mir persönlich besser
gefallen.
Gruß,
Til
Vielen Dank für den Support seitens der Firma Segger, find ich spitze,
dass man sich auch mal in den Foren umschaut.
Wie Thomas schon gemeint hat ist es ein Problem mit dem Linker File.
Leider hat ich noch keine Zeit diesem Problem nachzugehen!
Welche würdest du den empfehlen? Wie gesagt funktioniert alles schon
einwandfrei mit IAR, leider hat dieses ein 32k Code Limit. Ansonsten
gefällt mir der OpenSource Gedanke.
gruß noobuntu
Hallo,
mein persönlicher Favorit ist Rowley Crossworks (rowley.co.uk). Basiert
auch auf GCC aber du bekommst eine absolut professionelle Workbench, die
IAR in nichts nach steht. Eine Version für Privatanwender kostet 150
Dollar, also etwa 120 Euro. Das finde ich einen echt fairen Preis und
ist ein riesen Unterschied zu Eclipse. Lade dir doch mal eine Trial
Version runter und spiel ein bisschen damit rum.
Ich schaue hier ab und zu mal rein, ich suche dann einfach nach den
Schlüsselwörtern "Segger" oder "J-Link" ;-). Wenn da aber weitere Fragen
hast, kannst du dich auch gerne direkt bei uns auf der Webseite im Forum
melden.
Gruß,
Til
Hallo Til,
Du schreibst:
... du bekommst eine absolut professionelle Workbench, die IAR in nichts
nach steht.
Findest Du die IDE dh. den Codeeditor von IAR wirklich professionell
oder hab ich nur ein paar Einstellungen nicht gefunden.
Ok, die IAR Tools rundum wie Compiler, Debugger, Samples, Unterstützung
der Controller, Startupcode ist ohne gefrickle sehr gut gelöst.
Den Editor find ich etwas altbacken, mir fehlen da die Unterstützungen
beim Codieren. Ich wünsche mir die Editorunterstützung von Eclipse unter
Java oder Microsoft Visual Studio unter C# und die Tools von IAR sauber
integriert. Was ich gerne hätte:
* Code Folding
* Code Assist
* Parameter Assist
* Doku Assist
* Template Assist
* Automatische Codevervollständigung
* Call Hierarchy darstellen
* Outline Darstellung
* Makro expansion
* Toggel von Header zu Source
* Include Hierarchy darstellen
* Im Tree auch die Headerfiles anzeigen zum direkt editieren (bei IAR
macht dann der (Pre)Compiler komische Effekte)
* Sofortanzeige von Syntaxerror
* Cool wäre ein Backgroundcompiler wie bei Eclipse unter Java
Gibt es so einen IDE für µC oder ist das nur bei C# und Java Stand der
Dinge ?
Besten Dank,
Lukas
Hallo Sebastina,
auf dein Posting hin hab ich mir eclipse helios + GNU ARM Eclipse
Plug-in + codecourcery g++ lite installiert und versuch auch das zum
compilieren + linken zu bringen.
Ich hatte dann als das Compilieren ging beim Linken dieselbe Meldung:
> warning: cannot find entry symbol _start; defaulting to 00008000
Der Linker benötigt ein auf das Board zugeschnittenes Linker-Script
(Endung ist .ld), diese File kann mit -T <filename> angegeben werden. Im
Eclipse Plugin ist es auf Projekt -> Properties -> C/C++ Build ->
Settings -> ARM Sourcery Windows GCC Linker -> General
In der oberen leeren Zeile "Script file (-T)" das Script eintragen
Wird hier kein File angegeben dann verwendet der Linker eine
Defaulteinstellung. In der Defaulteinstellung sucht er einen Startupcode
(ENTRY) der mit _start benannt ist.
Der Startupcode ist ein Assemblerfile welches die Interrupttabelle
festlegt usw. im Startupcode ist dann der vom Linkerscript gesuchte
ENTRY definiert.
In der stm32 standard peripherie library ist für atollic truestudio ein
startupcode und linkerscript enthalten. Es kann evt. als Ausgangsbasis
verwendet werden.
Linkerscript: stm32_flash.ld ist zu finden in
STM32F10x_StdPeriph_Lib_V3.3.0\Project\STM32F10x_StdPeriph_Template\True
STUDIO\STM3210C-EVAL
Startup-Assembercode: startup_stm32f10x_cl.s ist zu finden in
CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO
Achtung: Für eclipse startup_stm32f10x_cl.s in startup_stm32f10x_cl.asm
umbenennen sonst wird das file beim build nicht von eclipse
berücksichtigt
Wie gesagt sind die Files ein Ausgangspunkt und noch nicht die Lösung.
Muss mich auch erst mal in die Syntax vom Linker-Script und vom dem
Assember Startupcode einlesen.
Wenn Du weiterkommst bitte um Infos.
Danke,
Lukas
Hallo Lukas,
komme gerade aus dem Urlaub zurück. Sonst hätte ich mich schon früher
gemeldet.
Vielen Dank für die sehr ausführliche Info. Deine Entdeckungen habe ich
zum Teil auch schon selbst gemacht.
Bei den Linker Scripts muss man sehr vorsichtig sein, welches man nimmt,
den es muss ja zu dem uC passen. Ansonsten compiliert das Programm aber
läuft nicht auf der Hardware richtig. Da auf meinem Eval Board ein
STM32F103RB verbaut ist, habe ich ein etwas anderes Linker Script
genommen.
Das Linker Script stm32_flash.ld findet man unter
STM32F10x_StdPeriph_Lib_V3.3.0\Project\STM32F10x_StdPeriph_Template\True
STUDIO\STM3210B-EVAL
Wenn man für einen beliebgen STM32 ein Linker Script braucht kann man
das Atollic Studio installieren und ein neues Projekt erstellen. Dabei
wird immer für den uC ein passendes Linker Script erstellt, das man dann
eventuell unter Eclipse benutzen kann.
Jetzt braucht man nur noch den passenden Start Up Code. Die Start Up
Codes die für das Atollic Studio geschrieben wurden, verursachen beim
Compilieren bei mir immer einen Fehler. Diesen Fehler kann man umgehen,
indem man die Start Up Codes, die für gcc-ride7 erstellt wurden,
benutzt.
Man findet die Assembler Start Up Codes unter:
STM32F10x_StdPeriph_Lib_V3.3.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM3
2F10x\startup\gcc_ride7
Zu beachten ist, das je nach verwendetem uC ein anderer Start Up Code
benutzt werden muss. Der STM32F103RB ist ein Medium Density Controller
weshalb man die Datei startup_stm32f10x_md.s benutzten sollte.
Mit den beiden richtigen Files hat das Compilieren und das Debuggen via
JLink einwandfrei funktioniert!
Dabei verwendete Einstellungen
Hallo Sebastian,
wärend deinem Urlaub hat sich bei mir sehr viel getan. Ich hab mir eine
funktionierende Eclipse Entwicklungsumgebung (Eclipse Helios + ARM
plugin + codesourcery g++ lite + ST-LINK gdbserver) hergerichtet.
Startupfile und Linkerscript verwende ich aus einem Demoprojekt vom
Atollic Truestudio Lite. Damit funktioniert es bisher Poblemlos.
Für den ST-Link verwende ich den gdbserver aus der Atollic Truestudio
Lite. Damit kann ich nun aus dem Eclipse heraus auch recht gut debuggen.
Nur das Flashen aus dem Eclipse klappt bei mir nicht so recht (da kommt
command not allowed in ... mode). Wenn ich den Codesourcery gdb manuell
über ein bat File verwende, mit dem gleichen gdbini, dann geht es
problemlos.
PS: Wo könnte ein komplette Entwicklungsumgebung mit Testprojekt und den
Einstellungen abgelegt werden so dass weiteren Neueinsteigern diese
"Frusthürde" eliminiert wird ?
Grüße,
Lukas
ich weiss, der Thread ist schon älter aber ich habe da ein Problem.
Wenn ich ein ARM C Project erstelle, dann habe ich den Eintrag "
Projekt -> Properties -> C/C++ Build ->
Settings -> ARM Sourcery Windows GCC Linker -> General"
Wenn ich ein C++ Projekt erstelle, fehlt mir dieser Eintrag jedoch.
Weiss jemand woran das liegen könnte?
achso, wenn ich ein Projekt mit makefile erstelle, dann zeigt er mir
diese Einträge überhautp nicht an.
Ich würde jedoch gerne ein STM32 C++ Projekt kompilieren können und am
Ende ein Hex File aus Eclipse herauspurzeln sehen :/