Hallo, kennt sich jemand mit den optimization Einstellungen in CCE aus? Ich habe das Problem, dass mein Programm für einen MSP430f2272 mit level 0 und 1 problemlos läuft, sich aber bei level 2 irgendwo aufhängt (lässt sich nicht durch debuggen finden). Gibt es irgendwo eine Übersicht über die unterschiedlichen Level und was jeweil genau optimiert wird?
Ich habe ehrlich gesagt keine Ahnung von diesem Compiler ;-) aber typischer weise werden bei "niedrigen" Optimizerstufen alle Variablen initialisert und bei höheren Optimizerstufen nicht. Das beobachtete Phänomen ist typischerweise auf uninitialisierte Variablen zurückzuführen.
Nee, meistens sind das Programmier-Unsauberkeiten....Zählschleifen ohne volatile und solche bösen Sachen. Meine MSP430 Programme hier laufen in allen Optimierungsstufen einwandfrei, und das sogar mit dem gleichen Quelltext mit GCC und mit CCE3 übersetzt.
...na ja, uninitialisierte Variablen sind auch Programmier-Unsauberkeiten... gutt, ein typischer Fall den ich noch vergessen hatte, daß der Optimizer Variablenzugriffe wegoptimiert, was dann mit volatile verhindert wird...
Hallo, danke schon mal für die Antworten. Ich habe jetzt mal wild mit volatile um mich geworfen und siehe da, das Programm funktioniert auch bei Stufe 2. Nun noch eine Frage: In welchen Fällen ist volatile wirklich erforderlich bzw. an welchen Stellen sollte es nicht eingesetzt werden??
Mit volatile sollte sparsam umgegangen werden, da der Optimizer sonst seine Arbeit nicht richtig tun kann. Volatile ist nötig wenn ein Register z.B. von einem Peripherieteil im uC wie Timer oder physikalische Eingänge verändert werden. Auch globale Variablen die in Interrupts verändert werden, sollten mit volatile gekennzeichnet sein. Das sind so die wichtigesten Dinge.
>Volatile ist nötig wenn ein Register z.B. von einem Peripherieteil im uC >wie Timer oder physikalische Eingänge verändert werden. D.h. ich muss, wenn ich z.B. den AD-Wandler im Verlauf des Programms mehrmals abfrage, die entsprechende Variable als volatile definieren, da er ansonsten Änderungen nicht berücksichtigt? Das kann ja eigentlich nicht sein. Oder trifft das nur auf per Interrupt veränderbare Variablen zu?
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.