AVR Assembler Konstanten variabel machen

OP #3701260
Lesenswert?

Hallo zusammen,

ich bin momentan am verzweifeln.
Ich habe hier eine fft Routine in Assembler, welche ich aus C aufrufe.
Die Routine funktioniert einwandfrei.

In der Confing.h wird aber eine Konstante mit 256 definiert
#define FFT_N  256

Diese Konstante möchte ich zur Laufzeit ändern können 
(64,128,256,512,1024).

Ich bekomme es aber nicht hin das Assembler abzuändern, da ich von 
Assembler wenig Ahnung habe.

Im Assembler File wird durch die Konstante FFT_N noch weitere Konstanten 
definiert. Dadurch lässt sich FFT_N nicht einfach in eine externe 
variable umändern.

Ich hoffe jemand von euch kann sich das Assembler File mal anschauen und 
die Konstanten variabel machen. Ich wäre sehr dankbar dafür.

Mit freundlichen Grüßen
Sebastian
Angehängte Dateien:
#3701274
Lesenswert?

Sebastian Weidmann schrieb:
> Hallo zusammen,
>
> ich bin momentan am verzweifeln.

> Diese Konstante möchte ich zur Laufzeit ändern können
> (64,128,256,512,1024).
>
> Ich bekomme es aber nicht hin das Assembler abzuändern, da ich von
> Assembler wenig Ahnung habe.

Das geht auch nicht so einfach. Dazu wären massive Umbauten im Assembler 
Code notwendig.
Alleine schon das Zusammenführen der jeweiligen vordefinierten Tabellen 
für die jeweilige FFT Größe in eine gemeinsame Tabelle, zieht einen 
Rattenschwanz an Änderungen nach sich.
Möglich: ja. Aber nicht in 20 Minuten.
Persönliche Seite #3701302
Lesenswert?

Am einfachsten ist es wohl, 4 Varianten zu erzeugen: eine für jede 
Konstante.  Und dann abhängig vom Wert von die Ausprägung des 
Algorithmus' für das entsprechende FFT_N auszurufen.

Damit vereinfacht sich das ganze auf die Umbenennung von Labels, die 
Generierung und die Verzweigung, die man einfach in C implementieren 
kann.  Falls die Variante zur Compilezeit bekannt ist, kann der 
Vergleich dann wegoptimiert werden.
#3701314
Lesenswert?

Johann L. schrieb:
> Am einfachsten ist es wohl, 4 Varianten zu erzeugen


hab ich auch schon überlegt.

Eine andere Überlegung, wobei ich nicht weiß, ob das mathematisch 
zielführend ist.
Da eine FFT ja sowieso nur mit 2-er POtenzen funktioniert ...
... könnte man nicht einfach hergehen und grundsätzlich immer mit einer 
10 Bit FFT rechnen und dazu einfach die Eingangswerte entsprechend oft 
duplizeren?

Mir ist klar, dass man da natürlich Laufzeit verschenkt. Aber rein 
prinzipiell: würde die FFT da das richtige Ergebnis liefern?

Also anstelle einer 9 bit FFT mit den Eingangswerte
23, 56, 78, 98, ....
eine 10 Bit FFT anwerfen mit den Eingangswerten
23, 23, 56, 56, 78, 78, 98, 98, ....
OP #3701326
Lesenswert?

@Karl Heinz
Hab ich schon versucht. Das Ergebnis war aber nicht so berauschend.
Warum kann ich mathematisch aber nicht erklären.
Kommt aber eh nicht in Frage, da die Laufzeit eine sehr große Rolle 
spielt.

Die 4-5 Varianten Lösung gefällt mir am besten und werde ich so jetzt 
umsetzen.

Vielen vielen Dank für eure schnelle Hilfe!!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren