Forum: Digitale Signalverarbeitung / DSP / Machine Learning dsPIC, FFT, " undefined reference to `_FFTComplexIP'"


von voynich (Gast)


Lesenswert?

hallo leute,

ich bin dabei die fft von microchip aus zu probieren
habe mir dazu das beispiel CE018 angesehen.
http://embeddedcodesource.com/developer/microchip_technology_59/ce018__using_the_fast_fourier_transform_fft_for_frequency_detection

wenn ich dieses beispiel einfach so überneme und nur den wert von 
FFT_BLOCK_LENGHT verkleinere sagt der compiler mir:

build/default/production/main.o(.text+0x10): In function `.LSM1':
: undefined reference to `_FFTComplexIP'
make[2]: *** [dist/default/production/CE018.X.production.hex] Error 255
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

das selbe sagt der mir auch in meinem eigenen code.

ich benutze den xc16-compiler, den dsPIC30F3010 und habe xc.h und dsp.h 
eingebunden

vielen dank für eure hilfe

: Verschoben durch Admin
von Karl H. (kbuchegg)


Lesenswert?

voynich schrieb:

> FFT_BLOCK_LENGHT verkleinere sagt der compiler mir:

Das sagt nicht der COmpiler, sondern der Linker

>
> build/default/production/main.o(.text+0x10): In function `.LSM1':
> : undefined reference to `_FFTComplexIP'


Der Linker ist dafür zuständig, aus den diversen einzeln compilierten 
C-Dateien und diversen Bibliotheken, das endgültige Programm 
zusammenzubauen.

undefined reference bedeutet:
Das Objekt (die Funktion) wird zwar verwendet (bei einer Funktion 
aufgerufen), aber ich kann die IMplementierung in den Bausteinen, die du 
mir gegeben hast nicht finden.

Also: schau nach, wo die Implementierung der Funktion _FFTComplexIP ist 
und warum sie nicht in den Build-Prozess mit einfliesst.

: Bearbeitet durch User
von voynich (Gast)


Lesenswert?

danke für die antwort aber soweit habe ich auch schon gedacht

die funktion welche ich verwende ist in dsp.h definiert daran kanns eig 
nicht liegen.

in dsp.h steht:
extern fractcomplex* FFTComplexIP (...);

hab mal gelesen das man noch extra die bib libq-dsp-coff.a und/oder 
libdsp-coff.a einbinden muss. Wie geht das? Was hat es damit auf sich?

von Karl H. (kbuchegg)


Lesenswert?

voynich schrieb:

> die funktion welche ich verwende ist in dsp.h definiert daran kanns eig
> nicht liegen.

Die Funktion ist nicht in dsp.h 'definiert'.
Die ist dort deklariert.

D.h. in dsp.h steht ....
>
> in dsp.h steht:
> extern fractcomplex* FFTComplexIP (...);

... dass es diese Funktion gibt. Irgendwo.
Aber nur weil jemand behauptet, dass es etwas irgendwo gäbe, bedeutet 
das noch lange nicht, dass es diese Funktion dann auch tatsächlich gibt 
oder dass der Linker eigenmächtig die Festplatte danach absuchen würde.


> hab mal gelesen das man noch extra die bib libq-dsp-coff.a und/oder
> libdsp-coff.a einbinden muss. Wie geht das? Was hat es damit auf sich?

Das klingt ja mal nicht so schlecht.
Ich hab nämlich auch auf der Microchip Website ein wenig gelesen. Die 
'Funktion' steckt in irgend einer Library (ich vermute mal die im 
linkerscript angegebene -ldsp), denn die eigentliche Funktionalität wird 
in Hardware erledigt. Die Funktion FFTComplexIP ist also nur ein 
Vermittler, der der Hardware die Daten zum Verwurschten vorwirft.
Also: Mit welchen Librarys linkst du?

: Bearbeitet durch User
von voynich (Gast)


Lesenswert?

juhu ...vielen dank habs jetz hinbekommen.

also normalerweise nimmt die ide dann nur das standard linkerskript aber 
um die anderen bibliotheken mit einzu binden muss ich das skript vom 
projekt nemen welches dann auch wieder das standard skript einbindet?

wie das genauer funktionier steht warscheinlich im "MPLAB XC16 ASSEMBLER 
LINKER AND UTILITIES Users Guide" von microchip oder?

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.