STM32 HAL-Treiber in .c fehlen alle Funktion MXCube?!

Gast #4745626
Hallo,

ich nutze EMbitz V 1.0 und MXCube. Ziel ist ein STM32F437.
Jetzt kommt das Interessante/traurige:

Wenn ich mir das Projekt erstellen lasse mit MXCube (nutze ADC, SPI, 
UART) dann ist soweit erstmal alles da und ok.


ABER: Die ganzen Funktionen wie bspw: HAL_ADC_Init, HAL_SPI_Init werden 
bei mir als undefined reference to HAL_ADC_Init als Fehler ausgebeben.
Warum ist das so? Also alle Funktionen die ich nutzen möchte, bzw. 
aufrufe wie:

HAL_ADC_Init(&hadc1);


funktionieren nicht? Ich habe sogar nochmal extra in meiner adc.h die 
hal_adc.h eingebunden.

In der adc.c wird das dann verwendet.



Wo liegt mein Fehler?!
Gast
holger schrieb:
> undefined reference bedeutet eigentlich fast immer
> dass eine *.c Datei im Projekt fehlt.

Ja genau, aber die Sache ist die, die sind ja da, auch eingebunden.
Bzw. in der .c ist die entsprechende .h eingebunden. Bzw. in der 
hal_adc.c war nur die _hal.h eingebunden. Ich habe nochmal die hal_adc.h 
dort eingebunden, aber das hat keinen Effekt.

Hat das mit meinen Linkereinstellungen zu tun? -lc, -lgcc, -lm?
Persönliche Seite
C-Programme werden modular übersetzt. Jedes C-Sourcefile einzeln, und 
das Ergebnis wird vom Linker zusammengesetzt. Du bindest Headerdateien 
(*.h) ein, damit sind die Deklarationen der Funktionen etc. verfügbar, 
aber das instruiert nicht den Compiler, das zugehörige C-Sourcefile zu 
übersetzen und nicht den Linker, das Ergebnis davon zum Endergebnis 
dazuzupacken.

Mit anderen Worten: Du solltest Dir genau ansehen, wie man weitere 
C-Sourcefiles in die Projektverwaltung Deiner IDE einfügt, so daß sie 
übersetzt und das Resultat gelinkt werden.

Sollten die Funktionen, die Du verwendest, bereits in compilierter Form 
als Library vorliegen (nein, das ist nicht eine *.h-Datei, auch wenn 
hier immer mehr Leute unterwegs sind, die das glauben), also einer Datei 
namens *.lib oder *.a (je nach Compiler), dann, und nur dann musst Du 
Deinen Linker dazu instruieren, diese Library zu verarbeiten. Bei gcc 
gibt es die Angewohnheit, nicht den Dateinamen der Library, sondern nur 
einen Teil davon anzugeben; heißt die Datei beispielsweise libfusel.a, 
wird als Linkeroption nur -lfusel angegeben. Andere Compiler mit anderen 
Linkern handhaben das anders, da musst Du in die Dokumentation Deines 
Entwicklungssystems gucken.
Gast
Rufus Τ. F. schrieb:
> C-Programme werden modular übersetzt. Jedes C-Sourcefile einzeln, und
> das Ergebnis wird vom Linker zusammengesetzt. Du bindest Headerdateien
> (*.h) ein, damit sind die Deklarationen der Funktionen etc. verfügbar,
> aber das instruiert nicht den Compiler, das zugehörige C-Sourcefile zu
> übersetzen und nicht den Linker, das Ergebnis davon zum Endergebnis
> dazuzupacken.
>
> Mit anderen Worten: Du solltest Dir genau ansehen, wie man weitere
> C-Sourcefiles in die Projektverwaltung Deiner IDE einfügt, so daß sie
> übersetzt und das Resultat gelinkt werden.
>
> Sollten die Funktionen, die Du verwendest, bereits in compilierter Form
> als Library vorliegen (nein, das ist nicht eine *.h-Datei, auch wenn
> hier immer mehr Leute unterwegs sind, die das glauben), also einer Datei
> namens *.lib oder *.a (je nach Compiler), dann, und nur dann musst Du
> Deinen Linker dazu instruieren, diese Library zu verarbeiten. Bei gcc
> gibt es die Angewohnheit, nicht den Dateinamen der Library, sondern nur
> einen Teil davon anzugeben; heißt die Datei beispielsweise libfusel.a,
> wird als Linkeroption nur -lfusel angegeben. Andere Compiler mit anderen
> Linkern handhaben das anders, da musst Du in die Dokumentation Deines
> Entwicklungssystems gucken.


Ja das habe ich alles schon, dass ist klar.
Das Problem liegt wo anders. Eigene Dateien (.c/.h) können nicht in 
Unterordner gepackt werden, wenn in diesen verlinkungen zu weiteren 
Headers stattfindet. Die müssen im Hauptverzeichnis unter Scr/Inc 
liegen. Jetzt geht alles; tricky der "Fehler" und für mich nicht ganz 
nachvollziehbar.

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.