CortexM3/M4 mit C++ Programmieren

kuddlmuddl

Commander
Registriert
Mai 2010
Beiträge
2.683
Hallo,

ich kämpfe mitlerweile seit 3 Tagen mit dem Problem meinen Olimex P103 (ARM Cortex M3 Dev-Board) mit C++ zu Programmieren.
Natürlich gibt es zahllose Toolchains, Entwicklungsumgebungen und Anleitungen aber leider bin ich mit keiner wirklich bis ganz ans Ende gekommen ein C++ Binary ins Flash zu bringen und auch laufen zu sehen.
Mein JTAG Debugger zeigt sich im Gerätemanager als ARM-JTAG-EW LINK.

Ich kann problemlos klassisches C mittels yatargo und OpenOCD draufflashen aber mit C++ wirds einfach nichts. Da ich ein größeres Projekt vor habe und berufsbedingt mit C++ schon viel Erfahrung habe ist mir das "++" sehr wichtig.
Mein C-Test-Programm nutzt bereits erfolgreich Timer, Interrupts, GPIO und UART für RS232 über die STM32-Libs von ST.

µC sind ja sehr günstig und ich würde daher auch gerne den vorhandenen Krempel verkaufen und auf n anderes Dev-Board und nen anderen JTAG-Programmer umsteigen, wenns damit einfacher wird.

Kennt sich jemand mit dem Thema aus und hat sowas schonmal geschafft?
Ich wäre auch gerne bereit Geld zu zahlen wenn mir das wer per Skype/TeamViewer/VNC erfolgreich einrichtet - egal ob mit meiner Hardware oder mit anderer die ich erst kaufen muss. Details zu anderen Anforderungen an HW kann ich noch geben, aber das sprengt hier erstmal den Rahmen.
Also OS geht Win7-64 oder Ubuntu 14.04-64. Mir egal wo's klappt.

edit: Ich bin weder auf Olimex noch allgemein auf Cortex-M festgelegt. Ein mindestens ähnlich leistungsfähiger µC wäre mir natürlich auch recht. DSP/FPGA/FPU/GPU/LAN/USB/Sound/Wifi/Bluetooth werden nicht benötigt.

edit2: Auf Exceptions und RTTI kann ich natürlich verzichten. STL muss aber sein. Es gibt wohl extra abgespeckte new/delete Versionen. Hier zB.
 
Zuletzt bearbeitet:
es ist schwer zu sagen was genau das Problem ist.
Ich selber verwende die Starterkits von Microchip mit dem PI32MX. Hier gibt's ebenfalls C++ als Programmiersprache. Du darfst nicht C++ mit der klassischen Sprache hier verwechseln. Um Ressourcen zu sparen ist hier alles sehr rudimentär.
Generell, solange deine IDE deine C++ Projekte nicht korrekt kompiliert und linkt, bekommst du deine FW nie auf das Flash vom uC.
Für den Debugger spielt es keine Rolle ob C oder C++, auf die IDE kommt es letztendlich dann an. Eventuell fehlen spezielle Bibliotheken für die Verwendung ?! Und schau dir die Optionen beim Compiler genau an, vielleicht musst noch eine spezielle Erzeugung von Debugging Informationen erzeugt haben, damit es für c++ funktioniert.
 
Hallo Aliosy danke für die Infos.
Wenn ich das richtig sehe gibt es ein StarterKit für ~60€? ebay bzw conrad
Sind GPIOs auf der Rückseite rausgeführt? Oder wie komme ich an PINs ran? RS232 und Ein- und Ausgänge müsste ich schon haben.
Kannst du mir bitte noch einmal bestätigen, dass ich dort std::vector und auch std::string verwenden kann bevor ich bestelle? Mir geht es nicht so sehr um große eigene Klassen aber vor allem um den Komfort durch die STL.
Was mich bei Microchip Technology allerdings gerade etwas abschreckt ist die Aussicht auf 1445$ für den richtigen C++ Compiler :X
Die STM32 ARMs mit GCC Toolchain und OpenOCD sind da natürlich deutlich günstiger für den Einstieg.

Ich werd auf jedenfall parallel nochmal einen STM32F407VGT6 direkt von STM bestellen. Für gerad mal 16,80€ mit nem CortexM4 und onboard-flasher/debugger ist es sicher nen Versuch wert. Noch mehr Tage möchte ich mit meinem Olimex ungern verlieren.
Oder was wäre mit einem ARM7 von Atmel? AT91SAM7SE512 Bei wiki liest es sich aber so als ob die CortexM die Nachfolger vom ARM7 sind.

Es ist schwer zu sagen was genau das Problem ist.
Generell, solange deine IDE deine C++ Projekte nicht korrekt kompiliert und linkt, bekommst du deine FW nie auf das Flash vom uC.
Ne Problemlösung hier im Thread ist sicherlich schwierig. Ich habe halt mitlerweile im Prinzip alle Ansätze durch:
1) Die funktionierenden C Beispiele die Olimex mitliefert (startup code in assembler, eigene makefiles und eigene linkerscripts) konnte ich bisher nicht auf C++ umstellen. Auch mit neuster Yatargo-Version schaffe ich es nicht C++ code zu Linken (ja, compilieren geht).
2) Den Weg über Eclipse CDT mit GNU ARM Eclipse Plugin habe ich auch probiert. Hier schaffe ich es zu Kompilieren und auch zu Linken. Flashen tue ich dann manuell mit der funktionierenden OpenOCD installation und dies schlängt immer fehl, da versucht wird an eine Speicherstelle zu schreiben die nicht zu meinem Olimex passt. Allerdings habe ich die Linker-Scripte manuell überprüft und die Adressen von RAM und FLASH sind korrekt und genau so wie im Linkerscript der lauffähigen C Version. Mir ist daher vollkommen unklar, wo diese falsche Adresse überhaupt her kommt. Auch der Projekt-Wizard wählt die richtigen Adressen für RAM und FLASH wenn ich den korrekten Typ µC auswähle (medium density, 20k ram, 128k flash).
3) Mittels CoIDE (CooCox) und manuell installiertem GNU Tools for ARM Embedded Processors schaffe ich es auch C++ zu Compilieren und zu Linken und auch das Flashen geht scheinbar fehlerfrei über die Bühne. Leider hängt der µC dann dauerhaft. Da das Debuggen nicht geht vermute ich, dass beim Initialisieren der Interruppts der default-interrupt-handler mit while(1){} stattfindet.
 
Zuletzt bearbeitet:
Zurück
Oben