Hallo temp(Gast),
Hallo Jürgen,
danke für das feedback. Ich glaub jetzt hat es Klick gemacht,
zumindestens teilweise.
>Das liegt daran, dass C++ aus dem Funktionsnamen "test_Buttons" einen
>eigenen internen Namen macht an dem nach bestimmten Regeln auch die
>Funktionsparameter mit in den Namen eingehen. Kannst du die in der
>map-Datei ansehen.
tatsächlich habe ich jetzt sowas im map file gefunden nachdem ich meine
Funktion "test_Buttons()" in ein .cpp abgelegt habe und dann alles
kompiliert habe.
1 | .text._Z12test_Buttonsv
|
2 | 0x000000a6 0x2 Libraries/Lib_Peripheral/BUTTON.o
|
3 | 0x000000a6 _Z12test_Buttonsv
|
das heisst hier sieht man jetzt das Ergebnis vom "name mangling in c++"
(_Z12test_Buttonsv)?!
Im Vergleich noch mal das .map file nach dem Kompilieren im C Projekt
1 | .text.test_Buttons
|
2 | 0x000000a6 0x2 Libraries/Lib_Peripheral/Button.o
|
3 | 0x000000a6 test_Buttons
|
4 | 0x000000a8 . = ALIGN (0x2)
|
Was ich noch nicht verstehe ist, warum das bei einem .c source file im
C++ Projekt im Endeffekt nicht fuktioniert. Die Funktion ist doch genau
gleich nur in einem .c file verpackt und natürlich ohne dem hier
1 |
|
2 | #ifdef __cplusplus
|
3 | extern "C" {
|
4 | #endif
|
bzw. warum passiert dann anderes wenn die Funktion in einem .cpp file
verpackt ist ?
Jetzt mal etwas Orakeln meinerseits:
hängt das mit den Unterschieden für Funktionen zwischen C und C++
zusammen (z. Bsp. Überladen von Funktionen nur in C++) ?
@Jürgen:
>Und bitte informiere dich über Suchpfade für Include-Dateien. Sowas
>#include "../Lib_MCU/general_config.h"
>macht Augenschmerzen.
wurde jetzt auch von mir verstanden und umgesetzt ;-)
Gruß,
Robert