Forum: Mikrocontroller und Digitale Elektronik STM32 C++ Toolchain


von Max (Gast)


Lesenswert?

Hi Leute,

ich schlage mich gerade durch die ganzen Webpages, die sich mit 
Toolchains für den STM32 beschäftigen, werde aber nicht wirklich fündig.
Ich suche eine Toolchain, welche mir C++ Code für einen STM32F4 
kompiliert und dynamische Speicherverwaltung (new/delete) und am besten 
auch Exceptions unterstützt. Toll wäre auch die C++ Standard Library 
(ist das zu viel verlangt?).
Das ganze darf nur zu gerne unter Linux laufen und kostenfrei auch 
Programme größer 32K kompilieren. Letztendlich würde ich gerne Eclipse 
fürs Code-Schreiben und Debuggen nutzen.

Gibt es das?
Wo finde ich sowas?
Kann ich mir das selbst zusammenstöpseln?

Ich habe dieses Tutorial 
(http://www.triplespark.net/elec/pdev/arm/stm32.html) befolgt und die 
summon-arm Toolchain kompiliert und installiert. Allerdings steigt hier 
der Linker bei der dynamischen Speicherverwaltung aus (undefined 
reference to `operator new(unsigned int)').

Ich benutze Ubuntu 12.04 (falls das interessiert).

Hat jemand Tipps!?
Linux Experience ist vorhanden. Nehme gerne ein wenig Aufwand in kauf! 
Weiß nur gerade nicht so recht, wo ich am besten anfange.

Viele Grüße,
Max

von LTC1043 (Gast)


Lesenswert?

Hier findest du den am besten gepflegten GCC für alle Cortex ARM uC.

https://launchpad.net/gcc-arm-embedded

Diese Toolchain wird übrigens direkt von ARM gepflegt.

Aber mit new, delete etc. musst du dich wohl selber beschäftigen.

Cheers

von Max (Gast)


Lesenswert?

Danke für den Link!

LTC1043 schrieb im Beitrag #2856551:
> Aber mit new, delete etc. musst du dich wohl selber beschäftigen.

Und was macht da der gemeine ARM C++ Programmierer?


Gruß,
Max

von Dr. Sommer (Gast)


Lesenswert?

Max schrieb:
> Und was macht da der gemeine ARM C++ Programmierer?
Ein OS mit Speicherverwaltung verwenden, oder komplett auf dynamische 
Speicherverwaltung verzichten, wie es bei (kleineren) µC's meistens 
gemacht wird.

Und die https://launchpad.net/gcc-arm-embedded kann ich ebenfalls 
empfehlen.

von Thomas W. (diddl)


Lesenswert?

Ich weiss, du hast nach Toolchain gefragt. Aber gewöhnlich ist auch eine 
IDE gewünscht. Da würde ich dir das kostenlose http://www.coocox.org/ 
empfehlen. Ich arbeite auch mit dem STM32F4 und bin hoch zufrieden mit 
CooIDE. CooCox empfiehlt für seine CooIDE auch eine bestimmte GCC 
toolchain ...

Das mit dem C++ würde ich nochmals überdenken. Es geht, aber ich habe 
mich für pures C entschieden. C++ ist zu überladen für einen Controller, 
selbst wenn er so üppig mit Speicher versorgt ist wie der F4.

Wenn du so Sachen wie printf() und fopen() zum laufen bringen willst, 
dann muss man sich selbst was basteln. printf() alleine nimmt schon 32K 
weg, deshalb verwende ich da eine abgemagerte version (ohne float und 
auch sonst kleine Einschränkungen).

von Max (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Ein OS mit Speicherverwaltung verwenden

Welches ist da State-of-the-Art und OpenSource?
FreeRTOS? Und wie würde man da dann Speicher reservieren? Bietet das OS 
dann ein "new" und "delete" an?
Habe mich mit embedded OS noch nicht wirklich auseinander gesetzt, 
deshalb die (wahrscheinlich triviale) Frage.

Thomas Winkler schrieb:
> C++ ist zu überladen für einen Controller

Nö, find ich nicht.
Man muss sich halt nicht die dicken Bomber in den Code reinziehen. Das 
wichtigste sind für mich Kapselung durch Klassen, Templates und 
Funktionsüberladung.
printf brauche ich nicht. Die Kommunikation läuft bei mir über CAN und 
mit einem binären Protokoll über die serielle Schnittstelle. Ansonsten 
hab ich nur ein paar digitale Ausgänge (PWM und LEDs).

Gruß,
Max

von LTC1043 (Gast)


Lesenswert?

Max schrieb:
> Und was macht da der gemeine ARM C++ Programmierer?

Danach "googeln", du findest wohl diverse beispiele

Thomas Winkler schrieb:
> Das mit dem C++ würde ich nochmals überdenken. Es geht, aber ich habe
> mich für pures C entschieden. C++ ist zu überladen für einen Controller,
> selbst wenn er so üppig mit Speicher versorgt ist wie der F4.


C++ auf einem STM32 geht sehr gut und auch ohne vile Speicher. Als 
Beispiel kann ich dir

http://andybrown.me.uk/wk/2011/12/28/stm32plus-a-c-library-for-stm32-development/

empfehlen. Hat schöne Beispile und zeigt wie einfach gewisse Dinge mit 
C++ gelöst werden können. Die Library ist im Moment aber nur für die 
STM32F1 Bausteine.

Dort findet man übrigens auch new/delet und Konsorten.

Cheers

von temp (Gast)


Lesenswert?

Ich denke alle die bisher C++ auf dem PC einsetzen sollten ihren Ansatz, 
das eins zu eins auf die Cortexe übertragen zu wollen, gründlich 
überdenken. new und delete sind normalerweise eine der am häufigsten 
verwendeten Funktionsaufrufe aus den Bibliotheken. Keiner denkt darüber 
nach was dabei in den libs abläuft. Allerdings haben die Entwickler der 
libs sich da ganz schön ins Zeug gelegt damit das performant geht. Und 
trotzdem kann einem da schon ein einziges unbedacht verwendetes Object 
in innersten Schleifen die ganze Routine verhageln. Irgendwie habe ich 
aber auch auf dem PC den Verdacht, dass Wissen darüber ist mit den Mayas 
untergegangen...
C++ macht auf den kleineren Controllern durchaus Sinn. Allerdings sollte 
man beim dynamischen Speicher schon aufpassen. Am besten ist es ganz auf 
new und delete zu verzichten. Längere Listen oder Container die pro 
Eintrag ein oder mehrmals new benutzen um die Objecte anzulegen, sind 
aussen vor.  Da muss man schon selbst seine Birne bewegen. Oder mann 
macht irgendwann den Schnitt. Mir persönlich ist für meine Anwendungen 
der Cortex M4 eigentlich schon zu groß. M0-M3, dsPics und AVRs auf der 
Controllerebene, alles was größer ist kriegt einen Linux Kernel.
Und IDE`s? Am besten gar keine! Leider kriegt es heute keiner mehr 
gebacken einen Debugger ohne IDE fürs Übersetzen zu bauen. Coocox fängt 
damit an, beerdigt das ganze dann wieder um es in eine IDE zu 
integrieren. Nur krampfhaft gelingt es, eine auf der Commandozeile 
übersetzte elf-Datei in der IDE zu flaschen und zu debuggen. Bei der 
CodeRed IDE (LPCXpresso) geht das über das Anlegen eines 
makefile-Projektes ganz gut. Auch Keil kann man prima nur zum Debuggen 
verwenden. Leider schaft es da die IDE nicht ein ausserhalb der IDE 
verändertes File im Debugmodus nachzuladen.
Glaubt denn wirklich noch jemand, wenn ein Entwickler 25 Jahre im 
Geschäft ist, dann benutzt er noch eine der vielen IDEs? Linux, Windows 
,Mac, Avr, Arm, Pic usw. Soll man da jedesmal eine neue IDE nehmen? Bei 
jeder IDE aufs neue einstellen dass Tabulatoren durch Leerzeilen ersetz 
werden? 80% der oben genannten verwenden den gdb zum debuggen. Und 
trotzdem ist es immer wieder ein Krampf. Für so ein Tool wäre ich geren 
bereit einige T€ abzudrücken, aber leider wollen die Hersteller der 
IDE's mich entweder ganz oder garnicht.

von Dr. Sommer (Gast)


Lesenswert?

temp schrieb:
> Für so ein Tool wäre ich geren
> bereit einige T€ abzudrücken, aber leider wollen die Hersteller der
> IDE's mich entweder ganz oder garnicht.

Brauchste nicht, eclipse kann AVR, ARM, Windows, Linux, die andren weiß 
ich nicht. Die entsprechenden Tool(chain)s kann man "von extern" 
integrieren, ggf. mithilfe von Plugins.

von temp (Gast)


Lesenswert?

Eclipse ist für mich das Grauen per se. Endlose Konfigurationsdialoge. 
Und nochmal ich brauche keine IDE für die Projekte zum übersetzen. Und 
als reiner Debugger taugt es auch nichts, da die meissten SFR der 
Kontroller fehlen. Da liegen Welten zwischen dem was Keil kann und den 
Eclipse Plugins. Klar steckt in sowas ein Haufen Arbeit drin. Den würde 
ich auch gern bezahlen wollen. Aber leider denken immer alle entweder 
wird das ganze Projekt gemanagt oder garnichts.
Ich verwebende seit Jahren die VC IDE z.b. ausschliesslich zum Debuggen. 
Und dabei läuft die meiste Software die dabei rauskommt am Ende unter 
Linux als Server ohne GUI. Und die Linux-Server auf denen das dann läuft 
stehen im Web. Ist schon manchmal eine verdrehte Welt, aber der ganze 
Linux-Desktop ist für mich unbrauchbar. Ubuntu in der letzten Version 
scheint nur noch Idoten bedienen zu müssen, vor denen man alles 
verstecken muss. Ich will doch nur arbeiten und nicht den ganzen Tag 
irgendwelchen Mist konfigurieren. Mein Desktop unter W7 64bit läuft im 
Design Windows klassich und abgeschalteten Effekten jeglicher Art. 
Hoffentlich überlebt das noch bis zu meiner Rente...

von Profibus man (Gast)


Lesenswert?

temp schrieb:
> Ich denke alle die bisher C++ auf dem PC einsetzen sollten ihren Ansatz,
> das eins zu eins auf die Cortexe übertragen zu wollen, gründlich
> überdenken. new und delete sind normalerweise eine der am häufigsten
> verwendeten Funktionsaufrufe aus den Bibliotheken. Keiner denkt darüber
> nach was dabei in den libs abläuft. Allerdings haben die Entwickler der
> libs sich da ganz schön ins Zeug gelegt damit das performant geht. Und
> trotzdem kann einem da schon ein einziges unbedacht verwendetes Object
> in innersten Schleifen die ganze Routine verhageln. Irgendwie habe ich
> aber auch auf dem PC den Verdacht, dass Wissen darüber ist mit den Mayas
> untergegangen...

diese weisheit gilt wohl für jeden erfahrenen programmier und sind keine 
neuen erkenntnisse. ich gebe aber zu, meine PC kollegen mögen mir 
verzeihen, dass sie etwas unbedachter mit der std lib und den daraus 
resultierenden new und delete aufrufe umgehen.

Ich selbst Programmiere schon lange nur noch mit C++ auf einem ARM9 
unter linux und kann mir nur noch sehr schwer vorstellen ohne templates 
und einer guten heapverwaltung (new/delete) zu programmieren.
Aber für eine Controller mit z.B. 100 Ram muss die integration einer 
solchen heap-verwaltung schon gut überlegt werden.

temp schrieb:
> Glaubt denn wirklich noch jemand, wenn ein Entwickler 25 Jahre im
> Geschäft ist, dann benutzt er noch eine der vielen IDEs? Linux, Windows
> ,Mac, Avr, Arm, Pic usw. Soll man da jedesmal eine neue IDE nehmen? Bei
> jeder IDE aufs neue einstellen dass Tabulatoren durch Leerzeilen ersetz
> werden? 80% der oben genannten verwenden den gdb zum debuggen. Und
> trotzdem ist es immer wieder ein Krampf. Für so ein Tool wäre ich geren
> bereit einige T€ abzudrücken, aber leider wollen die Hersteller der
> IDE's mich entweder ganz oder garnicht.

Vielleicht ist ja die Lauterbach-Software Trace32 etwas für dich?

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.