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
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
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
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.
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).
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
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
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.
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.
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...
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?