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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren