Forum: Mikrocontroller und Digitale Elektronik includes in Cube IDE


von Anatol G. (tola511)


Angehängte Dateien:

Lesenswert?

Hey Leute,

Ich arbeite normalerweise mit MPlap von Microchip und erst seit kurzem 
mit der CubeIDE von ST. Und habe mit der CubeMX ein Projekt erstellt und 
mit touchgfx auch einen Display am Laufen. Jetzt wollte ich auch meine 
Drehgeber, LED, usw. einbinden und habe natürlich sorce und header Datei 
erstellt (im selben Verzeichnis wie main.c und .h). Ich hatte auch ein 
eigenes Verzeichnis mal erstellt, aber da komme ich zum selben Ergebnis.
Ich hatte da auch in Paths and Symbols die Verzeichnisse eingebunden, 
aber irgendwas mache ich noch falsch. Mein code ist jetzt nur zu 
Versuchszwecken in der Model.cpp, die Fehler kommen, auch wenn ich es in 
die Main schreibe.
1
arm-none-eabi-g++ -o "Exxcellence STM32U599 Rev1.elf" @"objects.list"  -l:libtouchgfx-float-abi-hard.a -mcpu=cortex-m33 -T"C:\Users\tola5\Desktop\Exxcellence\STM32U599ZJTXQ_FLASH.ld" --specs=nosys.specs -Wl,-Map="Exxcellence STM32U599 Rev1.map" -Wl,--gc-sections -static -L"C:\Users\tola5\Desktop\Exxcellence\Middlewares\ST\touchgfx\lib\core\cortex_m33\gcc" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -Wl,--start-group -lc -lm -lstdc++ -lsupc++ -Wl,--end-group
2
c:\st\stm32cubeide_1.12.1\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.200.202301161003\tools\arm-none-eabi\bin\ld.exe: ./TouchGFX/gui/src/model/Model.o:C:/Users/tola5/Desktop/Exxcellence/Debug/../Core/Inc/test.h:49: multiple definition of `matrix'; ./Core/Src/test.o:C:/Users/tola5/Desktop/Exxcellence/Debug/../Core/Inc/test.h:49: first defined here
3
c:\st\stm32cubeide_1.12.1\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.200.202301161003\tools\arm-none-eabi\bin\ld.exe: ./Core/Src/test.o: in function `encoder_volume':
4
C:/Users/tola5/Desktop/Exxcellence/Debug/../Core/Src/test.c:117: undefined reference to `INC_RAST_volume'
5
c:\st\stm32cubeide_1.12.1\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.200.202301161003\tools\arm-none-eabi\bin\ld.exe: C:/Users/tola5/Desktop/Exxcellence/Debug/../Core/Src/test.c:117: undefined reference to `direction_A_volume'
6
c:\st\stm32cubeide_1.12.1\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.200.202301161003\tools\arm-none-eabi\bin\ld.exe: C:/Users/tola5/Desktop/Exxcellence/Debug/../Core/Src/test.c:117: undefined reference to `direction_B_volume'
7
c:\st\stm32cubeide_1.12.1\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.200.202301161003\tools\arm-none-eabi\bin\ld.exe: C:/Users/tola5/Desktop/Exxcellence/Debug/../Core/Src/test.c:117: undefined reference to `encoder_count_volume'
8
c:\st\stm32cubeide_1.12.1\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.200.202301161003\tools\arm-none-eabi\bin\ld.exe: C:/Users/tola5/Desktop/Exxcellence/Debug/../Core/Src/test.c:117: undefined reference to `change_volume'
9
c:\st\stm32cubeide_1.12.1\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.200.202301161003\tools\arm-none-eabi\bin\ld.exe: ./TouchGFX/gui/src/model/Model.o: in function `Model::tick()':
10
C:/Users/tola5/Desktop/Exxcellence/Debug/../TouchGFX/gui/src/model/Model.cpp:20: undefined reference to `encoder_count_volume'
11
collect2.exe: error: ld returned 1 exit status
12
make: *** [makefile:96: Exxcellence STM32U599 Rev1.elf] Error 1
13
"make -j16 all" terminated with exit code 2. Build might be incomplete.

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

die Matrix muss im Header als external und im C file angelegt werden. 
Der erste Fehler ist ein 'multiple Definition'.
Der gcc vor Version 10 hätte das geschluckt, aber jetzt ist dieses blöde 
Verhalten nicht mehr Standard.

von Anatol G. (tola511)


Lesenswert?

Super danke!

von Wastl (hartundweichware)


Lesenswert?

Da kommt er wieder, der alte Lehrspruch:

Variablen und Code tut man nicht in eine *.h Datei!
Nein das tutet man nicht! Nein das gehört sich nicht!
Weil man damit irgendwann auf die Schnauze fällt, wie
hier passiert.

Mit C kann man ja vieles (fast alles machen) aber man
muss eben auch mit den Konsequenzen seiner Taten
zurechtkommen.

Nein, Variablen und Code tut man nicht in eine *.h Datei!

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
Noch kein Account? Hier anmelden.