mikrocontroller.net

Forum: Compiler & IDEs Define für Optimierungsstufe?


Autor: Nybass (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
gibt es eine Möglichkeit die eingestellte Optimierungsstufe auszugeben?
Gruß Timo

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der GCC stellt dir
#define __OPTIMIZE__ 1
#define __OPTIMIZE_SIZE 1
zur Verfügung, wenn optimiert oder auf Größe optimiert wird.

Davon sollte dein Programm aber i.d.R. nicht abhängig sein.

Autor: Nybass (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir werden die Definitionen leider nicht gefunden.
Ich schreibe nur eine Testroutine und möchte auf meinem Terminal dann 
sehen ob die Optimierung an oder aus ist...
Gruß

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die sind aber schon lange im gcc.
klaus@a64a:~ > gcc -Wall tst.c && ./a.out
keine Optimierung
klaus@a64a:~ > gcc -Wall -Os tst.c && ./a.out
Optimierung nach Groesse
klaus@a64a:~ > gcc -Wall -O1 tst.c && ./a.out
Optimierung nach Geschwindigkeit
klaus@a64a:~ > gcc -Wall -O2 tst.c && ./a.out
Optimierung nach Geschwindigkeit
klaus@a64a:~ > gcc -Wall -O3 tst.c && ./a.out
Optimierung nach Geschwindigkeit
klaus@a64a:~ > cat tst.c
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>

int main( int nargs, char **args )
{

#ifdef __OPTIMIZE_SIZE__
  printf( "Optimierung nach Groesse\n" );
#elif defined __OPTIMIZE__
  printf( "Optimierung nach Geschwindigkeit\n" );
#else
  printf( "keine Optimierung\n" );
#endif

  return 0;
}

Autor: Nybass (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja genau so hab ich es eigentlich gemacht...
Liegt vielleicht an der IDE (CrossWorks), der aber GCC v4.1.1 verwendet

Gruß

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lass dir doch mal alle Makros ausgeben: avr-gcc -E -dM <filename>

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bzw. gcc -O1 -E -dM <filename> etc.

Autor: Nybass (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja funktioniert nun...
für die einzelnen stufen gibt es kein define oder?!

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keine ahnung, ich habe noch nie davon gehört.

Der Wert von _OPTIMIZE_ ist auch immer 1, egal ob man mit
-O1, -O2 oder -O3 aufruft.

Letztlich würde das auch nicht viel helfen, weil -O...
ohnehin nur eine Zusammenfassung vieler kleiner Einstllungen ist,
die man eigentlich auch abfragen können müsste, wenn man es ernst
meint.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorallem, und da wiederhole ich mich gerne, sollte dein Programm 
unabhängig von der Optimierung funktionieren.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt aber eben manchmal Dinge, die nicht davon unabhängig sind, wie 
z.B. bei der avr-libc die delay-Funktionen, die nur mit eingeschalteter 
Optimierung korrekt funktionieren.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf Magnus schrieb:
> Es gibt aber eben manchmal Dinge, die nicht davon unabhängig sind, wie
> z.B. bei der avr-libc die delay-Funktionen, die nur mit eingeschalteter
> Optimierung korrekt funktionieren.

Das hat aber nicht dich als Anwender zu interessieren, sondern die 
Bibliotheks- und Compilerbauer. Auch der inb()/outb()-Krams im 
Linux-Kernel funktioniert i.d.R. nur mit Optimierung. Und selbst die 
verlassen sich nur auf die Optimierung, weil sie wissen, was passiert. 
Bei einem anderen Compiler geht das schon in die Hose.

Du als Anwender weißt ja noch nichtmal, welche Optimierungen 
durchgeführt werden. Allenfalls kannst du einen Algorithmus zweimal 
implementieren, einmal mit Tabellen bei OPTIMIZE und einmal als nackten 
Algorithmus bei OPTIMIZE_SIZE.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven P. schrieb:
> Rolf Magnus schrieb:
>> Es gibt aber eben manchmal Dinge, die nicht davon unabhängig sind, wie
>> z.B. bei der avr-libc die delay-Funktionen, die nur mit eingeschalteter
>> Optimierung korrekt funktionieren.
>
> Das hat aber nicht dich als Anwender zu interessieren, sondern die
> Bibliotheks- und Compilerbauer.

Es hat den zu interessieren, der etwas programmiert, das von der 
Optimierung abhängt. Wenn das eine Library-Funktion ist, dann eben der 
Programmierer der Library.

> Auch der inb()/outb()-Krams im Linux-Kernel funktioniert i.d.R. nur mit
> Optimierung. Und selbst die verlassen sich nur auf die Optimierung,
> weil sie wissen, was passiert. Bei einem anderen Compiler geht das
> schon in die Hose.

Bei Mikrocontroller-Programmierung kommt es schon mal vor, daß man sich 
die Hände schmutzig machen muß.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf Magnus schrieb:
> Es hat den zu interessieren, der etwas programmiert, das von der
> Optimierung abhängt. Wenn das eine Library-Funktion ist, dann eben der
> Programmierer der Library.
Ja, ich versteh schon, was du meinst.
Die Frage ist halt: Wer, außer den Compiler- und 
(Standard-)Bibliotheksbauern, kann denn überhaupt etwas schreiben, was 
von einer Optimierung abhängt, von der überhaupt nicht weiß, was und wie 
und warum passiert?
Ein normales Programm sollte in jedem Fall unabhängig von der 
Optimierung funktionieren. Eben, weil man ohne Kenntnisse der 
Compiler-Interna überhaupt nicht weiß, was denn überhaupt optimiert 
wird, und von was man überhaupt abhängig ist.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast immerhin selbst eine sinnvolles Beispiel geliefert:
Auswahl eines Algos, je nach -O....

Allerdings fällt es schwer, viel mehr sinnvolle Anwendungen zu
konstruieren.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, ich bezog mich auf den Wunsch, auch noch die Optimierungsstufe 
herauszufinden.

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.