Das angehängte Programm läuft mit -O0, -O1 und -O2 scheinbar ohne Probleme, nur mit -Os lande ich irgendwann während iRealFT() wieder am Resetvektor. Breakpoint 3 wird nie erreicht. Dieses Verhalten habe ich sowohl im AVR-Studio als auch in simulavr festgestellt, außerdem zeigt Simulavr die folgende Meldung an: WARNING: file memory.c: line 148: **** Attempt to read invalid addr: 0x0460 WARNING: file memory.c: line 148: **** Attempt to read invalid addr: 0x0461 gcc-Version 3.3.1 20030720, binutils 2.14 20030727 Was mich außerdem verwundert hat: das mit -Os erzeugte Binary ist um einiges größer als bei -O1 oder -O2. Ich konnte das Problem leider nicht genauer eingrenzen, da ich mit simulavr noch nicht so gut zurechtkomme und das AVR-Studio in VMWare nicht so richtig Spaß macht.
Irgendwo wird der Stackframe korrumpiert. Der Framepointer in rr28:29 steht beim Betreten von iRealFFt() auf 0x428, beim Verlassen auf 0x228. Sieht also danach aus, als würde r29 irgendwo zerstört und nicht wiederhergestellt. Ich würde damit an Deiner Stelle in der avr-gcc Liste mal fragen. Der Code scheint ja vorher durch ein Verschlüsselungsprogramm geschickt worden zu sein. :->
Ähm ja, der Code ist teilweise ziemlich beängstigend, vor allem das grausame Loop-Unrolling das der Autor da betrieben hat. Aber bei Gelegenheit wird das alles durch Assembler ersetzt (sobald ich den Fortr^wC-Code verstanden habe). Wegen dem Bug werde ich mal in der Mailingliste fragen.
Weiß nicht, vielleicht hilft Dir ja auch Appnote AVR223 weiter? Im Prinzip müßte doch da auch eine FFT drin sein, hab's mir aber noch nicht angesehen.
Das scheinen dort eher Filter in "klassischer Bauweise" zu sein. Mein Wissen in diese Richtung ist noch ziemlich klein, aber AFAIK ist ein FFT-Filter ja etwas aufwändiger zu realisieren (2 versetzt überlagerte FFTs mit Fensterfunktion -> am Spektrum rumbasteln -> iFFT).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.