Forum: Mikrocontroller und Digitale Elektronik STM32F4 - C++ Programmierung möglich mit Em-Blocks?


von Daniel F. (franken_3)


Lesenswert?

Hallo,

ich arbeite seit einigen Tagen mit einem STM32F4 Discovery Board. Habe 
mir EM-Blocks installiert und kann auch mit den STM32 Standard Libs den 
Controller steuern. Soweit alles so gut.

Da ich persönlich gerne mit C++ Programmiere (STL, Container usw.) 
wollte ich mal wissen ob ich mit dem GNU-GCC-noneabi auch C++ 
Programmieren kann.

Habe bisher versucht alle möglichen Standard-Header einzubinden, aber 
ohne Erfolg. Bekomme immer Fehlermeldungen über fehlende Libs usw.

Vielleicht hat ja von euch schon mal jemand mit C++ einen STM32 
programmiert? Wäre für Tipps dankbar ;)




Gruß Dani

von Sebastian V. (sebi_s)


Lesenswert?

Ja kann man, habe ich schon gemacht. Allerdings habe ich die Teile der 
STL weggelassen, die dynamisch Speicher reservieren. Welche 
Fehlermeldungen über welche fehlenden Libs kriegst du denn genau? Bei 
mir gabs einige Linkerfehler wegen der Lowlevel Funktionen von newlib. 
Da muss man dann eben minimale Versionen von denen erstellen.

von Peter L. (localhost)


Lesenswert?


von Daniel F. (franken_3)


Lesenswert?

Hi, Danke für die Antworten.

Leider bin ich trotz der Beispiele nicht erfolgreich, wenn ich die 
Header-Dateien welche in den Beispielen eingebunden werde mit #inlcude 
einfüge bekomme ich die Fehlermeldung, das er diese nicht finden kann


src\main.c|17|fatal error: xpcc/architecture/platform.hpp: No such file 
or directory|
||=== Build finished: 1 errors, 1 warnings (0 minutes, 0 seconds) ===|


Was kann ich da tun??

Danke

Also nochmal, damit es vielleicht nicht ganz so sehr aussieht als wäre 
ich völlig unfähig :D

Ich kann beim erstellen des Projektes nicht zwischen C und C++ 
auswählen, schreibe ich dann aber einfach trotzdem C++ Schlüsselwörter 
erkennt diese der Compiler nicht, auch die C++ Standardbiblioteken kann 
ich nicht einfügen?

Eventuell ist es in der IDE irgendwo eine Einstellungssache oder so?

von Sebastian V. (sebi_s)


Lesenswert?

Das scheint irgendein Header von dem XPCC Teil da zu sein. Was passiert 
denn wenn du irgendein einfaches C++ programm compilieren willst? Etwa 
sowas (alternativ mit Ausgabe wenn du schon irgendwo printf auf UART 
umgeleitet hast):
1
#include <algorithm>
2
3
int main()
4
{
5
  int x[] = {4, 1, 2, 8, 0};
6
  std::sort(x, x+5);
7
}

Edit: OK wenn schon C++ Schlüsselwörter nicht erkannt werden ist 
irgendwas faul. Ich kenne jetzt EM-Blocks nicht aber wenn man dort nicht 
die Möglichkeit hat die Build Befehle zu beeinflussen dann sieht es 
schlecht aus. Man sollte für C++ Code über die g++ Executable 
compilieren.

von Daniel F. (franken_3)


Lesenswert?

Hi,

habe es jetzt doch hin bekommen. Nach dem erstellen eines STM32F4 
Projekts habe ich die main.c gelöscht und eine main.cpp eingefügt. Beim 
Hinzufügen von neuen Datein kann man auch zwischen C und C++ wählen.

Dann habe ich noch meine C-Header in ein

extern "C" {

#inlcude...
//usw.
}

gepackt. Jetzt kann ich auch andere .cpp Datein einbinden und z.B. die 
iostream Headerdatei einbinden.


Danke!!
Jetzt kann ich mich mal an das Objektorientiere yC Programmieren machen.

von Daniel F. (franken_3)


Lesenswert?

So, hier nochmal eine Info zu meinem Problem, ich musste bei den Linker 
Optionen den Haken bei "C++-StandardBilbiotheken verwenden" setzen.

Seitdem läuft alles, Interrupts und C-Funktionen nach wie vor in

extern "C"
{

...

}

einbetten.

von Reiner D. (dollreiner)


Lesenswert?

klappt bei mir nicht.
ich finde die linker-options nicht ;-)

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.