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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.