Forum: Mikrocontroller und Digitale Elektronik STM32CubeMX C++ SW4STM32 TrueStudio


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Janosch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

STM32CubeMX kann recht hilfreich sein um die Peripherie des STM32 
schnell ohne große Datenblattrecherche zu initialisieren und 
anzusprechen.
STM32CubeMX generiert C Code und Projektdaten für unterschiedliche 
Entwicklungsumgebungen.

Ich habe die Entwicklungsumgebungen von SW4STM32 und Atollic TrueSTUDIO 
aktuell in Verwendung, da diese kostenlos und nicht begrenzt sind.

Jedenfalls hatte ich große Schwierigkeiten mit dem Tool SW4STM32 oder 
TrueSTUDIO eigene C++ Module in die von STM32CubeMX erzeugten Projekte 
hinzuzufügen. Der Compiler oder Linker hatte immer was zu meckern.

Welchen Weg habe ich für mich gefunden:

1
Mit STM32CubeMX die Projektkonfigurierungen durchführen.
In Project Settings wähle ich als Toolchain die für SW4STM32. Im Reiter 
„Code Generator“ wähle ich
„Generate peripheral initialization as a pair of .c .h files per 
peripheral“ damit mir der Generator nicht alles in die main.c  reinpackt 
und lass den Code generieren.

2
Das erstellte Project öffne ich nun mit SW4STM32, selektiere das Projekt 
mit der rechten Maustaste und wähle „Convert to C++“. SW4STM32 hat seine 
Arbeit für mich getan und kann geschlossen werden.

3
Das Projekt wird nun mit Atollic TrueStudio geöffnet.
Die main.c in main.cpp umbenannt und das Projekt wird nun ohne 
Fehlermeldungen gebaut. C++ Module können nun erstellt oder eingebunden 
werden.

4
Zum Debuggen muss noch der Richtige unter dem Reiter „Debugger“ gewählt 
werden.



Das ist mein Weg um von ST32CubeMX nicht C++ fähige Projekte in C++ 
fähige zu wandeln.

Idealerweise würde ich mir diese Prozedur gerne ersparen aber ich kenne 
keinen anderen Weg. Als Entwicklungsumgebung bin ich dann bei TrueStudio 
gelandet.

Wie geht ihr vor um die von ST32CubeMX generierten Projekte C++ fähig zu 
bekmomen?

von Dr. Sommer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Janosch schrieb:
> Wie geht ihr vor um die von ST32CubeMX generierten Projekte C++ fähig zu
> bekmomen?
Vielleicht kann man die Probleme ja direkt beheben:

Janosch schrieb:
> Der Compiler oder Linker hatte immer was zu meckern.
Verrate doch mal, was da für Fehler auftauchen. Vielleicht sind das ja 
die üblichen verdächtigen und leicht zu korrigieren.

von Janosch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wenn ich z.B. ein mit STM32CubeMX erzeugtes Projekt für SW4STM32 mit 
diesem öffne, in C++ convertiere, die main.c in main.cpp umbenenne und 
das ganze dann "bauen" lasse, kommt die Meldung:

make: *** [Src/main.o] Error 258

Nu welches Gefrickel sollte ich angehen, damit der Fehler nicht kommt.

von Dr. Sommer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Janosch schrieb:
> Nu welches Gefrickel sollte ich angehen, damit der Fehler nicht kommt.
Du könntest damit anfangen, den eigentlichen Fehler anzugeben, nicht nur 
die letzte Zeile...

von Janosch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Scheinbar hat der C++ Compiler Schwierigkeiten beim SW4STM32.
Bin aber überfragt, was hier nicht passt.


Building file: ../Src/main.cpp
Invoking: MCU G++ Compiler
%cd%
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard 
-mfpu=fpv4-sp-d16 -D__weak=__attribute__((weak)) 
-D__packed=__attribute__((_packed_)) -DUSE_HAL_DRIVER -DSTM32F411xE 
-I"D:/10_STM32F411/14_SW4STM32/test1/Inc" 
-I"D:/10_STM32F411/14_SW4STM32/test1/Drivers/STM32F4xx_HAL_Driver/Inc" 
-I"D:/10_STM32F411/14_SW4STM32/test1/Drivers/STM32F4xx_HAL_Driver/Inc/Le 
gacy" 
-I"D:/10_STM32F411/14_SW4STM32/test1/Drivers/CMSIS/Device/ST/STM32F4xx/I 
nclude"  -I"D:/10_STM32F411/14_SW4STM32/test1/Drivers/CMSIS/Include" 
-O0 -g3 -Wall -fmessage-length=0 -ffunction-sections -c -fno-exceptions 
-fno-rtti -MMD -MP -MF"Src/main.d" -MT"Src/main.o" -o "Src/main.o" 
"../Src/main.cpp"
/usr/make/sh: -c: line 0: syntax error near unexpected token `('
/usr/make/sh: -c: line 0: `arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb 
-mfloat-abi=hard -mfpu=fpv4-sp-d16 -D__weak=__attribute__((weak)) 
-D__packed=__attribute__((_packed_)) -DUSE_HAL_DRIVER -DSTM32F411xE 
-I"D:/10_STM32F411/14_SW4STM32/test1/Inc" 
-I"D:/10_STM32F411/14_SW4STM32/test1/Drivers/STM32F4xx_HAL_Driver/Inc" 
-I"D:/10_STM32F411/14_SW4STM32/test1/Drivers/STM32F4xx_HAL_Driver/Inc/Le 
gacy" 
-I"D:/10_STM32F411/14_SW4STM32/test1/Drivers/CMSIS/Device/ST/STM32F4xx/I 
nclude"  -I"D:/10_STM32F411/14_SW4STM32/test1/Drivers/CMSIS/Include" 
-O0 -g3 -Wall -fmessage-length=0 -ffunction-sections -c -fno-exceptions 
-fno-rtti -MMD -MP -MF"Src/main.d" -MT"Src/main.o" -o "Src/main.o" 
"../Src/main.cpp"'
make: *** [Src/main.o] Error 258

von Dr. Sommer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Janosch schrieb:
> Scheinbar hat der C++ Compiler Schwierigkeiten beim SW4STM32.
Nö, der Compiler wird gar nicht erst aufgerufen.
> Bin aber überfragt, was hier nicht passt.
Da sind runde Klammern im Compiler-Aufruf, welche die Shell nicht mag. 
Die kommen vermutlich irgendwie aus den Projekt-Einstellungen; kurios, 
dass C nicht betroffen ist. Füge mal Anführungsstriche jeweils um die 
beiden "-D..." Argumente ein. Oder lösche sie ganz, eigentlich sollten 
die nicht nötig sein.

von Janosch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Dr. Sommer ....
mal ehrlich, ich habe einen Weg wie der Dreck tut.

Ich will mich aufs Programmieren fokussieren und nicht auf Compiler oder 
Linker wehwehchen.

Wenn die Brüder von STM32CubeMX mit den Brüdern von SW4STM32, die beide 
ja den STM32 unterstützen wollen das net sauber auf die Reihe bekommen, 
was will man dazu sagen. In der Regel sitzt das Problem ja vor dem 
Computer. Aber das kostenlose Werkzeug ist nicht gerade gut abgestimmt, 
was aber sicherlich ginge, wenn man sich den auskennt aber mir scheint, 
denen fehlt warum auch immer, der Wille.

Die Scheren sich momentan halt nicht um einfache C++ Unterstützung.

von Dr. Sommer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Janosch schrieb:
> Dr. Sommer ....
> mal ehrlich, ich habe einen Weg wie der Dreck tut.

Na es klang, als würdest du nach einem besseren Weg suchen:

Janosch schrieb:
> Idealerweise würde ich mir diese Prozedur gerne ersparen aber ich kenne
> keinen anderen Weg. Als Entwicklungsumgebung bin ich dann bei TrueStudio
> gelandet.
>
> Wie geht ihr vor um die von ST32CubeMX generierten Projekte C++ fähig zu
> bekmomen?

Janosch schrieb:
> Ich will mich aufs Programmieren fokussieren und nicht auf Compiler oder
> Linker wehwehchen.
Das ist mehr so eine IDE Wehwehchen, die kaputte Makefiles generiert.

Janosch schrieb:
> Die Scheren sich momentan halt nicht um einfache C++ Unterstützung.
Das ist überhaupt kein C++ Problem, sondern ein Shell-Problem. C++ 
Programme auf den STM32 zum Laufen zu bringen ist nicht besonders 
schwierig. Man bekommt halt nicht immer alles auf dem Silbertablett 
serviert...

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mit der neuen Version von CubeMX gibts keine Probleme.

Dann in SW4STM32 konvertieren in C++ und main.c in main.cpp umbenennen, 
fertig.
1
make all 
2
Building file: ../Src/main.cpp
3
Invoking: MCU G++ Compiler
4
/home/xxx/workspace-Mini_103/x4/Debug
5
arm-none-eabi-g++ -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))" -DUSE_HAL_DRIVER -DSTM32F103xB -I"/home/xxx/workspace-Mini_103/x4/Inc" -I"/home/xxx/workspace-Mini_103/x4/Drivers/STM32F1xx_HAL_Driver/Inc" -I"/home/xxx/workspace-Mini_103/x4/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy" -I"/home/xxx/workspace-Mini_103/x4/Drivers/CMSIS/Device/ST/STM32F1xx/Include" -I"/home/xxx/workspace-Mini_103/x4/Drivers/CMSIS/Include"  -O0 -g3 -Wall -fmessage-length=0 -ffunction-sections -c -fno-exceptions -fno-rtti -MMD -MP -MF"Src/main.d" -MT"Src/main.o" -o "Src/main.o" "../Src/main.cpp"
6
Finished building: ../Src/main.cpp
7
 
8
Building target: x4.elf
9
Invoking: MCU G++ Linker
10
arm-none-eabi-g++ -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -specs=nosys.specs -specs=nano.specs -T"../STM32F103C8Tx_FLASH.ld" -Wl,-Map=output.map -Wl,--gc-sections -fno-exceptions -fno-rtti -lm -o "x4.elf" @"objects.list"  
11
Finished building target: x4.elf
12
 
13
make --no-print-directory post-build
14
Generating binary and Printing size information:
15
arm-none-eabi-objcopy -O binary "x4.elf" "x4.bin"
16
arm-none-eabi-size "x4.elf"
17
   text     data      bss      dec      hex  filename
18
   4232       12     1572     5816     16b8  x4.elf

von Janosch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Was ist die neue version?
Habe CubeMX wie SW4STM32 erst vor ca. 4 wochen installiert.
Gibt es jüngere versionen?

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
CubeMX 4.20.1

von Janosch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

Habe nun den cubeMX aktualisiert.
Das SW4STM32 sollte auch aktuell sein.

Ansonsten wähle ich den STM32F411re in cubeMX aus. Besser gesagt das 
entsprechende Nucleo Board.

Öffne das Projekt aus cubeMX mit SW4STM32 und convertiere das Projekt 
durch rechte Maustaste und Wahl von convert to C++.

Anschließend main.c in main.cpp umbenamt und das projekt gebildet.

Ergebnis nach wie vor ohne Erfolg.

make: *** [Src/main.o] Error 258

Habe keine Idee, was da nicht passt.
SW4STM32 bereits neu installiert.
Bei c ist alles ok. Bei c++ gehts nicht.

Über den eingangs geschilderten Weg habe ich keine Probleme.
Habe so FreeRTOS laufen und eigene c++ module eingebunden .... ohne 
Probleme.

von Dr. Sommer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Janosch schrieb:
> Habe keine Idee, was da nicht passt.
Dann lies doch mal den Beitrag von vorhin, da steht was nicht passt:
Beitrag "Re: STM32CubeMX C++ SW4STM32 TrueStudio"

Wenn du die Lösung nicht ausprobieren willst, kann man dir auch nicht 
helfen...

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Janosch schrieb:
> Das SW4STM32 sollte auch aktuell sein.

Sollte?

Für das Nucleo mit einer Klasse in eigener h/cpp unter Linux 
funktioniert es prima.
Muss wohl andere Ursachen haben.
1
make all 
2
Building file: ../Src/DateClass.cpp
3
Invoking: MCU G++ Compiler
4
/home/xxx/workspace-Mini_103/x7/Debug
5
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))" -DUSE_HAL_DRIVER -DSTM32F411xE -I"/home/xxx/workspace-Mini_103/x7/Inc" -I"/home/xxx/workspace-Mini_103/x7/Drivers/STM32F4xx_HAL_Driver/Inc" -I"/home/xxx/workspace-Mini_103/x7/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy" -I"/home/xxx/workspace-Mini_103/x7/Drivers/CMSIS/Device/ST/STM32F4xx/Include" -I"/home/xxx/workspace-Mini_103/x7/Drivers/CMSIS/Include"  -O0 -g3 -Wall -fmessage-length=0 -ffunction-sections -c -fno-exceptions -fno-rtti -MMD -MP -MF"Src/DateClass.d" -MT"Src/DateClass.o" -o "Src/DateClass.o" "../Src/DateClass.cpp"
6
Finished building: ../Src/DateClass.cpp
7
 
8
Building file: ../Src/main.cpp
9
Invoking: MCU G++ Compiler
10
/home/xxx/workspace-Mini_103/x7/Debug
11
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))" -DUSE_HAL_DRIVER -DSTM32F411xE -I"/home/xxx/workspace-Mini_103/x7/Inc" -I"/home/xxx/workspace-Mini_103/x7/Drivers/STM32F4xx_HAL_Driver/Inc" -I"/home/xxx/workspace-Mini_103/x7/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy" -I"/home/xxx/workspace-Mini_103/x7/Drivers/CMSIS/Device/ST/STM32F4xx/Include" -I"/home/xxx/workspace-Mini_103/x7/Drivers/CMSIS/Include"  -O0 -g3 -Wall -fmessage-length=0 -ffunction-sections -c -fno-exceptions -fno-rtti -MMD -MP -MF"Src/main.d" -MT"Src/main.o" -o "Src/main.o" "../Src/main.cpp"
12
Finished building: ../Src/main.cpp
13
 
14
Building target: x7.elf
15
Invoking: MCU G++ Linker
16
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -specs=nosys.specs -specs=nano.specs -T"../STM32F411RETx_FLASH.ld" -Wl,-Map=output.map -Wl,--gc-sections -fno-exceptions -fno-rtti -lm -o "x7.elf" @"objects.list"  
17
Finished building target: x7.elf
18
 
19
make --no-print-directory post-build
20
Generating binary and Printing size information:
21
arm-none-eabi-objcopy -O binary "x7.elf" "x7.bin"
22
arm-none-eabi-size "x7.elf"
23
   text     data      bss      dec      hex  filename
24
   4140      112     1576     5828     16c4  x7.elf

von Janosch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Habe nun cubeMX und SW4STM32 auf aktuellste Versionen überprüft und 
obwohl ich die hatte, deinstalliert und neu installiert.

Erfolg ..... nada.

Das bringt nach wie vor den gleichen Fehler.
Wenn ich ein Projekt mit cubeMX erstelle und mit SW4STM32 in c++ wandle.

In c alles ok.
Erstelle ich ein C++ Projekt gleich mit SW4STM32 und benenne die main.c 
in main.cpp um, dann ist alles ok.

Habe auch ein Projekt mit cubeMX für nen STM32F0 erstellt. ...... 
gleiches Verhalten.

Die Compiler Einstellungen sehe ich wohl in sw4stm32 kann die da aber 
nicht editieren.

Ich benutze win10 64bit.

Jetzt ist erst mal Ostern angesagt und dann nach Laune hier 
weitergefrickelt.

Einen.... wenn auch unorthodoxen Weg habe ich ja beschrieben.

von Johannes (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe identische Probleme mit STM32CubeMX und AC6 beim Konvertieren
von C nach C++.

Gibt es neue Erkenntnisse ?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.