g++ statt gcc

Gast #4595628
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
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
Ä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.
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.
Gast
Torsten R. schrieb:
> Die HA-Library arbeitet auch mit callbacks, bei denen die Library
> C
> binding erwartet.
Wenn der "g++" aber eine .c Datei sieht, kompiliert er die als "C". Es 
tritt hier also kein Problem auf. Dennoch würde ich die .c Dateien 
lieber mit "gcc" kompilieren...
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
>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?
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.