mikrocontroller.net

Forum: Compiler & IDEs STM32 und C++


Autor: FlipFlop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe da mal eine Frage, ich würde gerne C++ nutzen um einen 
STM32F103 zu programmieren und suche schon lange im Internet nach 
Informationen, dabei bin ich aber nicht erfolgreich. Ich würde mich 
freuen, wenn mir jemand sagen könnte wo ich Informationen finden kann. 
Wäre es hilfreich, wenn ich erst versuche C++ auf einem avr einzusetzen, 
da ich mit einem avr mehr Erfahrung habe?

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann mich irren, aber ist es nicht so dass es für die Prozessoren 
von ST Microelectronics keine frei verfügbaren C/C++ Compiler gibt? 
Falls dem so ist, müsstest Du Dich eben bei einem kommerziellen Anbieter 
danach umschauen.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STM32 = ARM / Cortex-M3.
Folglich gibts GCC.

Autor: Christoph Budelmann (Firma: Budelmann Elektronik GmbH) (christophbudelmann) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mark Brandis schrieb:
> Ich kann mich irren, aber ist es nicht so dass es für die Prozessoren
> von ST Microelectronics keine frei verfügbaren C/C++ Compiler gibt?
> Falls dem so ist, müsstest Du Dich eben bei einem kommerziellen Anbieter
> danach umschauen.

Doch, gcc. WinARM oder CodeSourcery wären meine Empfehlungen.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@FlipFlop: Deine Frage ist ein bischen arg vage. Kennst du C bzw. C++ im 
PC-Kontext oder ist alles neu? Suchst du Information für Programmierung 
im Conrtoller-Umfeld, oder über C++ allgemein?

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, anders gesagt: Nicht für alle ST µC gibt es frei verfügbare 
Compiler. Zumindest vom ST10 hab ich das so in Erinnerung, hat damals 
auch schon genervt der blöde Tasking ;-)
Außerdem ist Sourcery G++ laut der Homepage von CodeSourcery nicht 
kostenlos (außer vielleicht als Trial Version?). Ah ja und hier:

http://eu.st.com/stonline/products/promlit/pdf/brs...

Autor: FlipFlop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Compiler verwende ich "
Sourcery G++ Lite 2009q3-68 for ARM EABI ", der sollte auch mit cpp 
dateien umgehen können und man kann ihn kostenlos nutzen.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah ich seh's grad:
http://www.codesourcery.com/sgpp/lite_edition.html

Dann kann man wohl ausschließlich von der Kommandozeile aus kompilieren, 
aber gut dafür ist es dann kostenlos.

Okay und was war jetzt die Frage, kannst Du schon C++ oder willst Du es 
erst erlernen?

Autor: FlipFlop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf einem µC habe ich C++ noch nie eingesetzt auf dem PC schon, daher 
muss ich es nicht lernen, wollte es nur aus neugierde mal auf einem µC 
einsetzen.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na dann schreib halt mal sowas:

LED my_led = new LED;
my_led->blink();

:)

Autor: W. W. (dt_rocky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich verwende einen STM32F103xxx in einem größeren Projekt und kann dir 
folgendes berichten:
Als IDE habe ich Eclipse(Galileo,C/C++ Development Package) mit 
CodeSourcery's G++ Lite Version, dazu das Zylin-GDB Plugin und OpenOCD 
0.3.1 und natürlich einem Dongle zum Flashen/Debuggen etc, alles auf 
Windoof XP.
Bei mir lassen sich C++ Programme fehlerfrei kompilieren und ausführen, 
ebenso das Debuggen. Hoffentlich hast du schon festgestellt, dass du ein 
Problem mit den verfügbaren Ressourcen des Controllers hast(RAM, Flash 
Größe etc.), falls du wirklich C++ verwendest.
Wie gesagt, es funktioniert nicht nur theoretisch, aber ob es sich lohnt 
sei dahingestellt. Naja, lohnen würde es sich bestimmt, nur du könntest 
aufgrund der begrenzten Ressourcen nicht das volle Potential von C++ 
ausschöpfen.

MfG

Autor: FlipFlop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte mich schonmal für den Erfahrungsbericht bedanken, aber mit 
meiner Frage wollte ich eigentlich darauf hinaus, wie ich mir ein ein 
"Projekt" einrichte um cpp Dateien verwenden zu können, bzw. wo es 
Quellen gibt, in denen ich mir ansehen kann, wie andere Leute das 
machen.

Autor: FlipFlop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke schön^^

Autor: W. W. (dt_rocky)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Hier ist nochmal der Anhang, war ein kleiner Fehler dabei.

MfG

Autor: FlipFlop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ A. K.

Programmiererfahrung habe ich schon, auf dem PC mit C++ und auf µC mit 
C. Ich bin durch Zufall an ein Board mit einem STM32 gekommen, wegen des 
größeren RAM und Flash im Vergleich zu den 8Bit avr mit denen ich bisher 
rumgespielt habe, bin ich auf die Idee gekommen C++ auf dem Board 
einzusetzen. Jetzt wollte ich nur mal aus Neugierde gucken, ob C++ 
überhaupt auf Controllern dieser Leistungsklasse eingesetzt wird.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende es. Auch auf einem ATmega32. In beschränkter Form zwar, 
aber ich sehe keinen Grund, der dagegen spricht. Andere halten wiederum 
halten dies für kompletten Blödsinn.

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mglw. hilfreich betr. STM32 (und Cortex-M3 generell) und C++ mit GNU 
tools:
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm...

Autor: FlipFlop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@dt_rocky

Ich habe einen Fehler im Makefile gefunden, die C-Files in /fwlib/src 
werden nicht eingebunden, ich habe sie jetzt per Hand an die Zeile 69 
MAIN_OBJS angehängt gibt es auch eine andere Möglichkeit, denn nachdem 
ich make clean ausführe werden diese C-Files gelöscht. Aber sonst 
funktioniert es ohne Probleme, nochmals danke.

Autor: W. W. (dt_rocky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Entschuldige bitte den Fehler, ich habe es gestern Abend noch schnell 
aus einem bestehenden C-Projekt modifiziert und jetzt sehe ich auch, 
dass ich es etwas schlampig gemacht habe :-)

Also im "Haupt"-makefile musst du natürlich die Zeile 43 auskommentieren 
und durch 44 ersetzen, damit arm-none-eabi-g++ verwendet wird.
Hmm, das mit der Firmware Library sollte eigentlich ohne Probleme 
funktionieren, jedenfalls tut es das bei mir.
Kannst du "nur" die Firmware Library alleine builden? Also in den fwlib 
ordner wechseln und dort "cs-make all" ausführen, was passiert dann?
Wird die *.a Datei erzeugt? Vielleicht vorher die ganzen Objekte in 
fwlib/src und natürlich das Archiv libstm32fw.a "manuell" löschen um zu 
testen, falls "cs-make clean" nicht funktionieren sollte.

MfG

Autor: FlipFlop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kommentieren von Zeile 43 und das auskommentieren von Zeile 44 habe 
ich gemacht, als ich eine weitere cpp-Datei angelegt habe. Wenn ich in 
dem fwlib
Ordner make all ausführe wird libstm32fw.a erzeugt, wechsel ich dann in 
Ordner STM32_cpp und führe dort make all aus, kommen die Fehlermeldungen 
"undefined reference to".
Aber jetzt weiß ich ja, das ich die c-Dateien einfach wieder in den 
Ordner einfügen muss, damit alles funktioniert, ist zwar nicht schön, 
aber funktioniert^^.

Autor: W. W. (dt_rocky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm, füge mal bitte dein "Haupt"-makefile als Angang hoch, möchte es 
gerne damit probieren bei mir.

MfG

Autor: FlipFlop (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich merke gerade, dass es nur unter windows funkitioniert und nicht auf 
ubuntu, das liegt aber glaub ich an den pfadangaben.

Autor: FlipFlop (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
so, jetzt geht es auch unter ubuntu.

Autor: W. W. (dt_rocky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Wie du schon sagtest, unter Windows geht es natürlich. Nun, wenn du 
ubuntu verwendest einfach die Pfade Unix-Konform machen und ich hoffe, 
dass es dann endgültig klappt! Wie du die Pfade ändern musst, ist dir 
klar oder?

Schönen Abend noch
rocky

Autor: W. W. (dt_rocky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahh, warst schneller :-)
Obowhl anzumerken wäre, die fwlib sourcen musst du nicht explizit im 
"Haupt"-makefile angeben, "patsubst" sollte das eigentlich richtig 
machen.
Versuche mal LIBRARY_DIRS folgendermaßen zu ändern: -L tadd-stm32 -L 
./fwlib/
oder so ähnlich :-)

MfG

Autor: FlipFlop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,
ich habe es jetzt geschafft alle c-dateien der firmewareLibrary von ST 
zu einer library zusammenzufassen und dachte, dass es möglich wäre diese 
eine library zur main zu linken anstatt der einzelnen Object files, 
klappt leider nicht.
Hat jemand vielleicht jemand einen Literaturtipp dazu, wie man makefiles 
und linkerskripte, in Bezug auf den STM32, erstellt

Autor: W. W. (dt_rocky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo FlipFlop!

Also, wenn du die Firmware-Library von ST zu einer Library, also einer 
.a Datei, zusammenfassen kannst, dann brauchst du diese nur noch im 
Linkerscript angeben. In meinen Beispielen, einfach die *.a Datei in den 
Ordner von rom.ld und ram.ld kopieren und in den jeweiligen Scripts 
folgende Zeile ergänzen:
GROUP(libgcc.a libc.a libcs3.a libcs3unhosted.a libcs3-tadd-stm32.a meinelib.a)

Das sollte genügen. Bitte probieren und melden.

MfG

Autor: FlipFlop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt die lib, die bei mir libstm.a heißt in den Ordner mit den 
*.ld skripten kopiert und auch libstm.a in den beiden Zeilen ergänzt. 
Nach dem make all kommen aber die Fehlermeldungen
main.o: In function `RCC_Configuration()': 
main.cc:(.text+0x1a): undefined reference to `RCC_DeInit()'
 usw.

Autor: W. W. (dt_rocky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, also bei mir funktioniert es wieder einwandfrei, habe zu 
Testzwecken den fwlib src-Ordner gelöscht, die *.a in den Zeilen ergänzt 
in den Ordner kopiert und cs-make all gemacht und alles klappte 
wunderbar.

Hast du die include-Files im "Haupt"-makefile, die darfst du natürlich 
nicht löschen und auch den Ordner nicht, aber das ist dir wohl klar.
Ansonsten, ich habe die Library an vorletzter Stelle in den 
Linkerscripts eingefügt, da spielt die Position eine wichtige Rolle, 
probiere das mal zu ändern.

MfG

Autor: FlipFlop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
im Makefile habe ich die Zeile 69 wieder in den orginalzustand
MAIN_OBJS = $(sort \

 $(patsubst %.cpp,%.o,$(wildcard *.cpp)) \

 $(patsubst %.cc,%.o,$(wildcard *.cc)) \

 $(patsubst %.c,%.o,$(wildcard *.c)) \

 $(patsubst %.s,%.o,$(wildcard *.s)))
gebracht, sonst habe ich da nichts gelöscht oder geändert. Ich habe die 
"neue" lib auch an vorletzter Stelle in die Skripten eingefügt, alles 
ohne Erfolg. Ich habe jetzt beschlossen, dass ich es bei dem Makefiles 
die ich weiter oben gepostet habe belasse, weil ich nicht noch mehr Zeit 
damit verschwenden möchte, aber trotzdem Danke für die Bemühungen.

Autor: W. W. (dt_rocky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Kannst du mir bitte dein gesamtes "Projekt" mal zippen und als Anhang 
einfügen, wenn möglich?
Würd gerne deine Version bei mir ausprobieren, um den Fehler zu 
lokalisieren.

Übrigens, diese makefile-Geschichte würde ich nicht unterschätzen, es 
kostet halt leider viel Zeit um alles richtig zu machen(vor allem 
Abhängigkeiten). Macht sich bemerkbar bei großen Projekten und in einem 
größeren Team natürlich. Da lohnt es sich dann schon, diese Sachverhalte 
genauestens zu analysieren.

MfG

Autor: FlipFlop (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
dsa ist jetzt die Version die funktioniert.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.