STM32 mit Atollic und Cube

OP #5577107
Lesenswert?

Hi,


Mein Ziel ist es für ein bestehendes Projekt den Mikrocontroller zu 
wechseln. Hierbei ist STM32 die Wahl. Zum Programmieren habe ich mich 
aktuell für Atollic True Studio entschieden, da es von ST selbst kommt, 
und wie die meisten anderen IDE's auch auf Eclipse basiert.

Da im Projekt bereits div. C++ Klassen existieren, wäre es ein 
unlohnender Aufwand diese alle in C neu zu entwickeln und dann noch den 
Main von classname.function() zu bereinigen. Wird mit C++ weitergemacht, 
müssen nur die Hardwarefunktionen ersetzt werden.

Hierzu ging ich also wiefolgt vor:


1.) Projekt über STM32Cube generieren und speichern
2.) In Atollic öffnen
3.) File->New-> Convert to C/C++
4.) Main.c in Main.cpp umbenennen
5.) im Main.h die Zeile "#define __cplusplus" ergänzen
6.) Im Project unter C++ die Pfade angeben, welche bei C drinne stehn.


Nun versuchte ich zu builden.
Ich erhalte immer wieder die drei Fehler x mal:

1.) "exoected identifer or '(' before ... token
2.) "expected identifert or '(' before string constant
3.)  unknown type name 'uint32_t'

Interessanter Weise erscheint Fehler 1 und 2 immer bei diesen Zeilen
1
#ifdef __cplusplus
2
 extern "C" {
3
#endif

Kann mir jemand hier vielleicht aus Erfahrung sagen was ich tun muss, um 
die Fehler zu korrigieren und ein Funktionierendes C++ Projekt zu 
erhalten.
Persönliche Seite #5577130
Lesenswert?

Johnny S. schrieb:
> 5.) im Main.h die Zeile "#define __cplusplus" ergänzen

Das ist verkehrt. Das macht der C++ Compiler automatisch.

Johnny S. schrieb:
> Kann mir jemand hier vielleicht aus Erfahrung sagen was ich tun muss, um
> die Fehler zu korrigieren und ein Funktionierendes C++ Projekt zu
> erhalten.
In den Source Code gucken und schauen was falsch ist.
#5577132
Lesenswert?

Johnny S. schrieb:
> 3.) File->New-> Convert to C/C++

Keine gute Idee.
Laß die main.c in C und bau deinen Code in C++ dazu. (deparate Files)

Johnny S. schrieb:
> 5.) im Main.h die Zeile "#define __cplusplus" ergänzen

auch keine gute Idee.
__cplusplus wird vom Compiler erzeugt, und alle HAL-Header haben am 
Anfang bereits ein
1
#ifdef __cplusplus
2
extern "C"
3
{
4
#endif
Die kannst du also prolemlos in deinem C++-Code nutzen.
OP #5577196
Lesenswert?

Niklas G. schrieb:
> Johnny S. schrieb:
>> Also du meinst prinzipell im "main.c" beim User-Code "while(1) {})" dann
>> zb. eine Funktion einfügen?
>> app.crsc();
>
> Das klappt nicht, das ist C++!
>
> Ändere einfach alles auf C++, außer den Bibliotheken.

Ja, aber im Main.c unter "while(1)" muss ja der User-Code eingefügt 
werden, also das was der MCU machen soll, wenn main.c eine C Datei ist, 
kann man kein C++ nutzen, also muss man ja irgendwie aus dem Main auf 
eine C++ Datei umbiegen
Persönliche Seite #5577198
Lesenswert?

Johnny S. schrieb:
> wenn main.c eine C Datei ist,
> kann man kein C++ nutzen, also muss man ja irgendwie aus dem Main auf
> eine C++ Datei umbiegen

Ja, daher machst du da eine C++ Datei draus. Das hast du doch sogar 
schon:

Johnny S. schrieb:
> 4.) Main.c in Main.cpp umbenennen

Dann wird sie mit dem C++ Compiler kompiliert, und du kannst ganz normal 
C++ darin verwenden.
OP #5577207
Lesenswert?

Vincent H. schrieb:
> Johnny S. schrieb:
>> Ja, aber im Main.c unter "while(1)" muss ja der User-Code eingefügt
>> werden, also das was der MCU machen soll, wenn main.c eine C Datei ist,
>> kann man kein C++ nutzen, also muss man ja irgendwie aus dem Main auf
>> eine C++ Datei umbiegen
>
> main.c -> main.cpp
>
> Problem solved?
>
> /edit
> Ah, da war wer schneller...
Nein das ist ja genau was ich getan habe...

Ich hatte das File umbenannt udn dann kamen die Errors, nenne ich es 
wieder ".c" dann verschwinden die Errors :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren