Forum: Mikrocontroller und Digitale Elektronik AVR-gcc: Optimierungslevel lokal ändern?


von Squeezer (Gast)


Lesenswert?

Hi,

TI's ARM-Compiler kennt ein pragma, mit dem man die Optimierung lokal 
für eine Funktion ändern kann:

    #pragma FUNCTION_OPTIONS(interface_loop,"--opt_level=4 
--opt_for_speed=5")

So kann man beispielsweise den gesamten Code auf Größe optimieren lassen 
und nur bestimmte, kritische Codeteile auf Geschwindigkeit.

Meine Frage: gibt es sowas auch für den AVR-gcc?

von Leo B. (luigi)


Lesenswert?

Soweit mir bekannt, kann der das nicht. Leider!
Ich hab dann immer die Zeitkritischen Prozesse in inline-Asm 
geschrieben.
Wir eh nicht selten nochmal etwas schneller...

von (prx) A. K. (prx)


Lesenswert?


von Squeezer (Gast)


Lesenswert?

A. K. schrieb:
> https://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html
> und unter "optimize":
> 
https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes

Die Beschreibung finde ich nicht wirklich verständlich...wie würde das 
dann aussehen?

    #pragma GCC optimize ("-Ofast")

Und wo definiere ich die Funktion, für die das gilt?

von (prx) A. K. (prx)


Lesenswert?

Squeezer schrieb:
> Und wo definiere ich die Funktion, für die das gilt?

Gilt ab da. Aber wenn du das auf eine Funktion beziehen willst, dann 
nimm lieber das Attribut.

von Squeezer (Gast)


Lesenswert?


von (prx) A. K. (prx)


Lesenswert?

Das ist ein universelles Attribut, kein AVR-spezifisches.

von Squeezer (Gast)


Lesenswert?

OK, danke!

von serfghj (Gast)


Lesenswert?

vielleicht so?
__attribute__((optimize("-O3"))) void foo(void);

von Peter D. (peda)


Lesenswert?

Squeezer schrieb:
> und nur bestimmte, kritische Codeteile auf Geschwindigkeit.

Bei anderem Level statt -Os habe ich kaum Geschwindigkeitsvorteile 
festgestellt, eher das Gegenteil.
Beim Loop aufrollen sind das oft nur die 2 Zyklen für den RJMP, dafür 
explodiert der Code.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.