Forum: Compiler & IDEs AVR-GCC: Bug bei Verwendung von -Os


von Andreas S. (andreas) (Admin) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

von Joerg Wunsch (Gast)


Lesenswert?

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. :->

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ä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.

von Joerg Wunsch (Gast)


Lesenswert?

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.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.