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