Forum: Compiler & IDEs Compileranweisung in WINAVR?


von Peter (Gast)


Lesenswert?

Hi, kann mir bitte jemand helfen?
Ich arbeite mit einem atmega128 mit dem Studio4 / WINAVR und benötige 
aus Platzgründen die Optimierung -Os. Leider habe ich aber auch 2 
Routinen, die exakt so wie ohne Optimierung ablaufen müssen (Timing!). 
Gibt es eine Anweisung, mit der ich dem Compiler sagen kann, ab hier 
sollst du optimieren, ab hier nicht mehr?
Meine bisherige Suche zu dem Thema hat leider nichts ergeben.
Gruss

von Uwe .. (uwegw)


Lesenswert?

Wenn du GENAU bestimmen willst, was passieren soll, ist es ein Fall für 
(inline-)Assembler.

von Michael Wilhelm (Gast)


Lesenswert?

In verschiedene Module aufteilen und zusammenlinken?

MW

von Karl H. (kbuchegg)


Lesenswert?

> Leider habe ich aber auch 2 Routinen, die exakt so wie ohne
> Optimierung ablaufen müssen (Timing!).

Dann hast du bei der Programmierung was falsch gemacht.
Lass mich raten: Du hast Warteschleifen im Programm und
der Optimizer würde die rausschmeissen.

Kennst du die Funktionen aus delay.h?

von Peter (Gast)


Lesenswert?

Besten Dank für den Hinweis mit Delay.h. Ich hatte zwar schon kurz daran 
gedacht, aber irgendwie nicht geschnallt, dass durch die Verwendung als 
Lib-Funktion da der Compiler mitsamt Optimierung aussen vor bleibt.
Gruss

von Rolf Magnus (Gast)


Lesenswert?

Das hat nichts mit lib-Funktion zu tun. Die delay-Funktionen sind im 
Header implementiert. Die funktionieren deshalb, weil die eigentlichen 
Warteschleifen in Assembler implementiert sind. Das ist auch die einzige 
Möglichkeit, zuverlässig Code mit exakt definiertem Timing 
hinzubekommen. In C kann (ob nun mit oder ohne Optimierung) von einem 
Compiler zum anderen oder auch von einer Compilerversion zur nächsten 
alles wieder ganz anders sein.

von Gast (Gast)


Lesenswert?

>In C kann (ob nun mit oder ohne Optimierung) von einem
>Compiler zum anderen oder auch von einer Compilerversion zur nächsten
>alles wieder ganz anders sein.


Bin ich froh, dass ich solche Probleme im guten alten ASM nicht hab.

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.