Forum: Mikrocontroller und Digitale Elektronik Platformio will nicht kompilieren, "undefined reference"


von Eric (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, ich komme bei meinem Projekt einfach nicht weiter.

Ich habe hier einen ziemlich unbekannten µC für den ich ein Arduino 
"Longduino" gefunden habe wo SPI und damit auch die SD Library 
funktioniert mit der ich gut zurecht komme.

Nun brauche ich aber noch eine serielle Verbindung über USB und habe 
versucht die library die in dem github Projekt mit drin ist zu nutzen.


Im Anhang ist ein minimaler code der nicht funktioniert.
Ich habe in meiner main.cpp   eine referenz auf usb.h, in usb.cpp liegen 
die passenden funktionen aus dem Beispiel.

Also main.cpp -> usb.h -> cdc_acm_core.h

Und alle Funktionen die in cdc_acm_core.h liegen und den prefix "extern" 
haben, für die gibt es ein undefined reference.

Was muss ich genau ändern damit es kompiliert? Ich kenne mich mit linken 
usw. nicht so aus.

Hier das inkludierte platform_packages   in der platformio.ini: 
https://github.com/trinami/Longduino

Danke schonmal! :)

von J. S. (jojos)


Lesenswert?

USB scheint wie vieles andere nicht implementiert zu sein und das 
Projekt schläft seit zwei Jahren.

von Eric (Gast)


Lesenswert?

J. S. schrieb:
> USB scheint wie vieles andere nicht implementiert zu sein und das
> Projekt schläft seit zwei Jahren.

Irgendeine Idee was ich sonst nehmen könnte? Es gibt wohl auch Rust für 
diesen µC aber das müsste ich auch erstmal lernen xD

Arduino wäre schon super, vor allem weil ich jede Menge von den Dingern 
habe.


Und ich habe hier ein Projekt liegen da funktioniert usb_cdc tatsächlich 
mit dem unterschied das ich in platformio nicht longduino als framework 
habe sondern gd32v irgendwas...

Ausserdem habe ich eine main.c und keine main.cpp sowie alles in der 
main.c Datei und nicht ausgelagert in eine usb.c/pp

Ich denke also der code ist kompilierfähig, ich weiß nur nicht wie. Die 
Funktionen für die er einen undefined reference schmeisst sind ja auch 
implementiert sowohl in einer .c als auch in einer .h Datei... Ich muss 
da irgendwas übersehen, nur was?

von J. S. (jojos)


Lesenswert?

Da wird wohl das SDK zu Fuß eingebunden, da ist ein Beispiel:
https://github.com/scpcom/Longduino/tree/master/libraries/USBCDC/examples/USB_UART_BRIDGE

von Eric (Gast)


Angehängte Dateien:

Lesenswert?

Ja genau, so habe jz das von dir angegebene Beispiel in eine usb.cpp / 
usb.h Datei gepackt.

Nun kommt bei der ersten Funktion "init_clocks()" die ich aufrufe direkt 
wieder undefined reference ! dabei ist die funktion in

usb.h definiert:
static void init_clocks(void);

und in usb.cpp
static void init_clocks(void)
{
...
}

Im Anhang nochmal der code. Was läuft da falsch?

von Eric (Gast)


Lesenswert?

Aha! lass ich das so und kopiere alles in meine main.cpp funktioniert 
es. Ich und oder der linker/compiler machen also irgendwas falsch, wenn 
es darum geht es in eine h/cpp Datei auszulagern.

Jetzt ist nur noch die Frage was?

von J. S. (jojos)


Lesenswert?

hatte am Smartphone nicht in das zip reingeguckt.
Du musst dich an die Vorgaben von PlattformIO halten was die 
Quellverzeichnisse angeht. Alle Quellen nach src kopieren sollte gehen, 
oder ein Unterverzeichnis in lib aufmachen.
Oder über die build_flags mit option -I:
https://docs.platformio.org/en/latest/projectconf/sections/env/options/build/build_flags.html

: Bearbeitet durch User
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.