Forum: Mikrocontroller und Digitale Elektronik Elm-Chans FFT-Routinen unter CodeVisionAVR =/


von Natz (Gast)


Lesenswert?

Hallo,

ich hab da ein Problemchen.
Und zwar möchte ich die FFT-Routine von Elm-Chan verwenden und zwar 
unter CodeVisionAVR
Fixed-point FFT routines for megaAVRs, (C)ChaN, 2005

Das funktioniert unter Eclipse/WinAVR auch super soweit ...
Frequenz messen und auf Display wiedergeben, alles wunderbar.

Habe mein restliches Programm so weit wie ich konnte an Codevision 
angepasst,
doch stoße ich bei dem Assembler-Teil an meine Grenzen.

Hier mal ein Code-Schnippsel aus der ffft.S wie ich sie unter Eclipse 
einfach nutze.

Im Header ffft.h
1
void fft_output (complex_t *, uint16_t *);

Im Assembler-File ffft.S
1
.global fft_output
2
.func fft_output
3
fft_output:
4
  pushw  T2H,T2L
5
  pushw  T4H,T4L
6
  pushw  T6H,T6L
7
  
8
  ;...
9
  ;BLABLABLABLABLABLABLA
10
  ;...
11
  
12
  popw  T4H,T4L
13
  popw  T2H,T2L
14
  clr  r1
15
  ret
16
.endfunc

Das der CodeVision-Compiler nicht einfach so das Assembler-File frisst 
ist mir auch klar,
aber wie hab denn die ffft.S anzupassen, so dass es funktioniert?

Die CodeVision-Hilfe brachte ein Beispiel, welches so auch ganz 
plausibel erscheint.
1
// function in assembler declaration
2
// this function will return a+b+c
3
#pragma warn- // this will prevent warnings
4
int sum_abc(int a, int b, unsigned char c) {
5
#asm
6
    ldd   r30,y+3 ;R30=LSB a
7
    ldd   r31,y+4 ;R31=MSB a
8
    ldd   r26,y+1 ;R26=LSB b
9
    ldd   r27,y+2 ;R27=MSB b
10
    add   r30,r26 ;(R31,R30)=a+b
11
    adc   r31,r27
12
    ld    r26,y   ;R26=c
13
    clr   r27     ;promote unsigned char c to int
14
    add   r30,r26 ;(R31,R30)=(R31,R30)+c
15
    adc   r31,r27
16
#endasm
17
}
18
#pragma warn+ // enable warnings
19
20
21
void main(void) 
22
{
23
int r;
24
// now we call the function and store the result in r
25
r=sum_abc(2,4,6);
26
}
Kann ich aus dem ffft.S-File einfach eine ffft.c-Datei machen und die 
Funktionen,
wie in der Hilfe beschrieben umschreiben?
Wenn ich ehrlich bin hab ich das auch schon versucht, aber da hat er 
rumgemeckert wegen
fehlender Namen der Funktionsparameter ... ich kann doch da nicht 
irgendwas X-beliebiges reinschreiben oder?

Bin über jeden Denkanstoß dankbar

Grüße
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.