Forum: Mikrocontroller und Digitale Elektronik Probleme mit Optimierung bei CCE für MSP430


von Bastler0815 (Gast)


Lesenswert?

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?

von Christian R. (supachris)


Lesenswert?

Ja, steht sehr detaillert im User Guide des CCE3.

von Bernhard M. (boregard)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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.

von Bernhard M. (boregard)


Lesenswert?

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

von Bastler0815 (Gast)


Lesenswert?

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??

von Johnny (Gast)


Lesenswert?

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.

von Bastler0815 (Gast)


Lesenswert?

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