www.mikrocontroller.net

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


Autor: Bastler0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, steht sehr detaillert im User Guide des CCE3.

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Bastler0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bastler0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.