Forum: Mikrocontroller und Digitale Elektronik STM32 + Eclipse -> Hilfe


von Sebastian M. (noobuntu)


Lesenswert?

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

von Martin Thomas (Gast)


Lesenswert?

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.

von SEGGER - Til Stork (Gast)


Lesenswert?

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

von Sebastian M. (noobuntu)


Lesenswert?

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

von SEGGER - Til Stork (Gast)


Lesenswert?

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

von Lukas S. (lsimma)


Lesenswert?

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

von Lukas S. (lsimma)


Lesenswert?

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:
1
c:/program
2
> files/codesourcery/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/bin/ld.exe:
3
> 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

von Sebastian M. (noobuntu)


Lesenswert?

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
1
Initzilations Commands:
2
3
set mem inaccessible-by-default off
4
monitor speed auto
5
monitor endian little
6
monitor flash device=stm32f103rb
7
monitor flash breakpoints = 1
8
monitor flash download = 1
9
load
10
11
Run Commands:
12
13
monitor reset
14
continue

von Lukas Simma (Gast)


Lesenswert?

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

von A. B. (funky)


Lesenswert?

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?

von A. B. (funky)


Lesenswert?

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 :/

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.