Compileranweisung in WINAVR?

Gast #614223
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
#614280
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?
Gast #614309
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
Gast #614346
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.
Gast #614352
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.

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