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
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.
Beispiel: https://github.com/roboterclubaachen/xpcc/tree/develop/examples/stm32f4_discovery und http://xpcc.kreatives-chaos.com/install.html Toolchain: https://launchpad.net/gcc-arm-embedded
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?
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.