Forum: Mikrocontroller und Digitale Elektronik STM32 und C++ mit Lib


von Patrick B. (p51d)


Lesenswert?

Hallo miteinander

Ich habe eine kleine Frage:
ST bietet die sehr bequemen stdPeriph_Lib an, welche ich auch gedenke zu 
nutzen. Diese sind, so wie auch der Rest in C geschrieben. Ist es jetzt 
möglich, das eigentliche Projekt auf C++ zu machen, und die Lib ohne 
grosse Änderungen einzubinden und anzusprechen?
Oder muss ich um jedes File einen Wrapper bauen, was einen imensen 
Arbeitsaufwand bedeutet?

Die Frage stellte sich bei einem Projekt. Ich soll ein Framework 
schreiben, welches sehr einfach portierbar ist (also von ARM zu ARM, zu 
FGPA, zu MultiCore-CPU...), damit möglichst überall das gleiche 
verwendet werden kann.

Besten Dank für die Antwort
MFG
Patrick

von Mark B. (markbrandis)


Lesenswert?

Solange man das "name mangling" beachtet, sollte es kein Problem sein.

http://en.wikipedia.org/wiki/Name_mangling#Handling_of_C_symbols_when_linking_from_C.2B.2B

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die die C-Funktionen beschreibende Headerdatei muss "C++"-sicher gemacht 
werden, das geht so
1
#ifdef __cplusplus
2
extern "C"
3
{
4
#endif
5
6
... hier jetzt der Kram, der in der Headerdatei drinsteht
7
8
#ifdef __cplusplus
9
}
10
#endif

Damit ist alles, was in der Headerdatei steht, als extern "C" 
deklariert, was das name-mangling abschaltet, so daß das Linken korrekt 
funktioniert.

Die Library selbst muss nicht angefasst werden.

von Patrick B. (p51d)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Die Library selbst muss nicht angefasst werden.

Die Header der Lib aber schon, ansonsten sind die nötigen Funktionen für 
den nächst höheren "Layer" nicht bekannt. Ebenso müssten dann diverse 
Klassen gebildet werden (z.B. bei UART: Settings, welche UART...). Oder 
verstehe ich da jetzt etwas falsch?

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.