mikrocontroller.net

Forum: Compiler & IDEs Slight Optimization oder Size Optimizations


Autor: Markus (Gast)
Datum:

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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:

> Kann mich jemand aufklären?

Du hast Code geschrieben, der abhängig von der Optimierung seine 
gedachte Funktion nicht mehr erfüllt. Beispielsweise Zeitschleifen, die 
mit Optimierung nicht mehr (oder nicht lang genug) warten.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist denn Slight Optimization (welcher -O Schalter)?

Allgemein:
Variablen von Interrupts müssen im Main als volatile gecastet werden.


Peter

Autor: Klaus Wachtler (mfgkw)
Datum:

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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Da hat man aber nichts brauchbares am
> Display gesehen.

Timingprobleme bei der Initialisierung und/oder beim der Ausgabe. 
Optimierter Code läuft halt schneller.

Oliver

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver schrieb:
> Timingprobleme bei der Initialisierung und/oder beim der Ausgabe.
> Optimierter Code läuft halt schneller.

Stimmt.
Insbesondere wenn man denkt, Tasten Entprellen sei nicht nötig, das 
macht sich durch die Laufzeit ganz von alleine.


Peter

Autor: Markus (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah ok, so war das gemeint, danke für den Tipp!

liebe grüße markus

Autor: Peter Dannegger (peda)
Datum:

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

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.