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?
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.
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.
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...
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
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.
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.
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...
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 |
Was ist die neue version? Habe CubeMX wie SW4STM32 erst vor ca. 4 wochen installiert. Gibt es jüngere versionen?
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.
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...
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 |
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.
Hallo, habe identische Probleme mit STM32CubeMX und AC6 beim Konvertieren von C nach C++. Gibt es neue Erkenntnisse ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.