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.
Gast
#40669
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.
Gast
#40671
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).
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.