Slight Optimization oder Size Optimizations

Gast #1979288
Lesenswert?
• ▲
▼
Ich habe jetzt meinen Atmega644 COntroller mit 20 MHz betrieben, und die 
Size Optimizations eingestellt. Da hat man aber nichts brauchbares am 
Display gesehen. Als ich auf Slight Optimization gewechselt habe, sehe 
ich schon mehr.
Wieso ändert das etwas, weil die Programmgröße ist bei beiden gut 
undoptimiert, jedoch verstehe ich nicht wieso es beim einen geht und 
beim anderen nicht.
Kann mich jemand aufklären?
#1979431
Lesenswert?
• ▲
▼
Peter Dannegger schrieb:
> Variablen von Interrupts müssen im Main als volatile gecastet werden.

Wie kommen Variablen vom Interrupt nach Main?

Globale Variablen? Die werden dann aber nicht im Main und nicht im
Rhein als volatile deklariert, sondern außerhalb an Land,
z.B. vor allen Funktionen.

Ich vermute, wir denken an dasselbe, aber dann ist die Formulierung
für Anfänger vielleicht etwas verwirrend.
#1979475
Lesenswert?
• ▲
▼
Nicht nur das.
Es gibt noch viele andere Dinge.
Allen gemeinsam ist aber, dass der Programmierer irgendetwas nicht 
C-Standardkonform geschrieben hat, und der Compiler seine Rechte 
ausgenutzt hat um den Code zu verändern. Und dabei ist es dann passiert: 
Der Programmierer hat eine C-Regel verletzt oder nicht bedacht (meist 
aus Unwissenheit), und der Compiler hat diesen Fauxpas benutzt um eine 
Optimierung durchzuführen, die kontraproduktiv war.

Der Fehler liegt also nicht im Compiler sondern in den meisten Fällen im 
fehlenden Wissen des Programmierers.
#1979494
Lesenswert?
• ▲
▼
Klaus Wachtler schrieb:
> Wie kommen Variablen vom Interrupt nach Main?
> Globale Variablen?

Hatte ich vorausgesetzt.
Soweit ich weiß, geht das nur über globale Variablen.


Klaus Wachtler schrieb:
> Die werden dann aber nicht im Main und nicht im
> Rhein als volatile deklariert, sondern außerhalb an Land,
> z.B. vor allen Funktionen.

Das kann im Interrupt aber teuer werden. Deshalb bevorzuge ich das 
Casten.


Peter
Gast #1980005
Lesenswert?
• ▲
▼
Die Frage war eigentlich warum es mit Slight Optimierung funktioniert 
und mit Size nicht, obwohl beide brauchbaren gut optimierten Code 
liefern. Ca 30% weniger.

PS: Ich weiß was volatile ist und wie es anzuwenden ist.

Danke bisher.
#1980008
Lesenswert?
• ▲
▼
Markus schrieb:
> Die Frage war eigentlich warum es mit Slight Optimierung funktioniert
> und mit Size nicht,

Und die Antwort ist immer noch dieselbe:
Weil du irgendwo ein Schlupfloch offen gelassen hast oder etgegen den 
C-Regeln programmiert hast, was der Optimizer des Compilers in dem einen 
Fall ausgenutzt hat und im anderen Fall nicht.

Das Problem steckt in deinem C-Code und nicht im Compiler!
#1980180
Lesenswert?
• ▲
▼
Markus schrieb:
> Die Frage war eigentlich warum es mit Slight Optimierung funktioniert
> und mit Size nicht, obwohl beide brauchbaren gut optimierten Code
> liefern. Ca 30% weniger.

Dazu müßte man erstmal wissen, was Du mit "Slight Optimization" meinst.
Im GCC-Manual "3.10 Options That Control Optimization" steht diese 
Option jedenfalls nicht.

Ich kenne nur -Os und -O0 .. -O3.


Peter

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.