Codevision- konverze syntaxe souboru .S
Milan
magixe na volny.cz
Pondělí Únor 13 09:45:00 CET 2012
Dobrý den. Našel jsem na internetu příklad projektu pro spektrální
analyzátor.
Projekt je psaný v AVRGCC a používá unitu FFFT.h která má v externím
souboru
nadefinované rutiny - funkce v asembleru. Externí soubor má název FFFT.S
Používám Codevision AVR a nedaří se mě (jsem začátečník) přepsat syntax
zápisu tak aby CVAVR pracoval
s tím externím souborem FFFT.S
Chci poprosit někoho zkušenějšího zda by byl ochoten mě pomoci a
nakopnout správným směrem
jak vyřešit přidání asemblerovských procedur do CodevisionAvr.
Můj kopmpletní projekt a původní zdrojáky bych poslal emailem.
Nechci po nikom aby to za mě přepisoval nebo na tom pracoval ale pouze
poradit
jakým zpusobem to uzpůsobit pro codevision.
Pro tento test lze použít eval.verzi CvAvr
ke stažení zde
http://www.hpinfotech.ro/cvavre.zip
Zatím pro názornost přidám výsek z kodu (jedna procedura)
překladač hlásí
Linker error: C:\cvavr2\examples\Analyzer\fft.h(20): function
'fft_input' declared, but never defined
takže podle mě "nevidí" definici této funkce v externím souboru.
//======================================================
Soubor FFFT.h
#ifndef FFFT_ASM /* for c modules */
typedef struct _tag_complex_t {
int r;
int i;
} complex_t;
#ifndef INPUT_NOUSE
#ifdef INPUT_IQ
void fft_input (const complex_t *, complex_t *);
#else
void fft_input (const int *, complex_t *);
#endif
#endif
//======================================================
Soubor FFT.s
#ifndef INPUT_NOUSE
.global fft_input
.func fft_input
fft_input:
pushw T2H,T2L
pushw AH,AL
pushw YH,YL
movw XL, EL ;X = array_src;
movw YL, DL ;Y = array_bfly;
clr EH ;Zero
ldiw ZH,ZL, tbl_window ;Z = &tbl_window[0];
ldiw AH,AL, FFT_N ;A = FFT_N;
1: lpmw BH,BL, Z+ ;B = *Z++; (window)
ldw CH,CL, X+ ;C = *X++; (I-axis)
FMULS16 DH,DL,T2H,T2L, BH,BL, CH,CL ;D = B * C;
stw Y+, DH,DL ;*Y++ = D;
#ifdef INPUT_IQ
ldw CH,CL, X+ ;C = *X++; (Q-axis)
FMULS16 DH,DL,T2H,T2L, BH,BL, CH,CL ;D = B * C;
#endif
stw Y+, DH,DL ;*Y++ = D;
subiw AH,AL, 1 ;while(--A)
brne 1b ;/
popw YH,YL
popw AH,AL
popw T2H,T2L
clr r1
ret
.endfunc
#endif /* INPUT_NOUSE */
Další informace o konferenci Hw-list