g++ statt gcc

Gast #4595628
Lesenswert?

Guten Morgen,

ich versuche gerade den g++ statt den gcc zu benutzen.
Kompilieren kann ich das Project weiterhin, flashen ebenso.
Auf dem stm32 läuft es aber dann einfach nicht an.

Ist möglicherweise mein Makefile falsch? Mit dem gcc und den CFLAGS 
läuft es einwandfrei.

Die Flags kommen von: https://www.mikrocontroller.net/articles/ARM_GCC

Beste Grüße.
Angehängte Dateien:
Gast #4595669
Lesenswert?

Der ISR-Vektor sieht ok aus. Dein initialier Stack Pointer zeigt aber in 
den CCM, wird der in deinem Startupcode aktiviert? Wenn nicht, stürzt 
der Controller beim Sprung in die main() ab. Zeig mal dein ganzes 
Projekt, inklusive .elf Datei.
Gast #4595711
Lesenswert?

Äh vergiss das mit dem CCM, ich hab mich vertan.
Das
1
#define USE_FULL_ASSERT    1
bringt gar nix, das muss in die stm32f4xx_conf.h .

Aber sonst seh ich grad kein Problem. Benutze mal den Debugger um 
festzustellen wo es stecken bleibt.
#4596144
Lesenswert?

Torsten R. schrieb:
> Was auch sein kann, ist dass Du Deine Interrupt handler nicht mit extern
> "C" deklariert hast und der Linker sie deshalb nicht in die Vector table
> eingetragen hat.


Das kann nicht nur sein, das ist so. Ein C++ Compiler muss laut Standard 
als C++ deklarierte Funktionen name-mangeln. Ohne also via "extern C" 
ein linkbares Interface zu erzeugen werden sämtliche Interrupts 
vermutlich schlichtweg wegoptimiert und die leeren .weak 
Implementierungen aus dem Startup-Code herangezogen.

Soll heißen keine einzige von deinen Delay Funktionen usw. wird mehr 
funktionieren... Geschweigedenn von dem HAL-internen Zeug.
#4596563
Lesenswert?

Dr. Sommer schrieb:
> Wenn der "g++" aber eine .c Datei sieht, kompiliert er die als "C".

Nein. Nur gcc sucht sich aus dem Dateinamen den Typ. g++ übersetzt es 
immer als C++, wenn man nicht explizit mit -x was anders angibt.

Vincent H. schrieb:
> Ein C++ Compiler muss laut Standard als C++ deklarierte Funktionen name-
> mangeln.

Hast du mal ein Zitat von der Stelle, die name-mangling vorschreibt? Mir 
wäre sowas nicht bekannt.
Gast #4612594
Lesenswert?

>Das kann nicht nur sein, das ist so. Ein C++ Compiler muss laut Standard
>als C++ deklarierte Funktionen name-mangeln. Ohne also via "extern C"
>ein linkbares Interface zu erzeugen werden sämtliche Interrupts
>vermutlich schlichtweg wegoptimiert und die leeren .weak
>Implementierungen aus dem Startup-Code herangezogen.

Ich stehe vor einem ähnlichen Problem (nutze auch die STLib). Wohin 
genau kommt das extern C?
#4612603
Lesenswert?

Tiiiim schrieb:
>>Das kann nicht nur sein, das ist so. Ein C++ Compiler muss laut Standard
>>als C++ deklarierte Funktionen name-mangeln. Ohne also via "extern C"
>>ein linkbares Interface zu erzeugen werden sämtliche Interrupts
>>vermutlich schlichtweg wegoptimiert und die leeren .weak
>>Implementierungen aus dem Startup-Code herangezogen.
>
> Ich stehe vor einem ähnlichen Problem (nutze auch die STLib). Wohin
> genau kommt das extern C?

Vor den return type des function headers bzw vor ein Blockklammerpaar.

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