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
Wenn du GENAU bestimmen willst, was passieren soll, ist es ein Fall für (inline-)Assembler.
> 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?
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
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.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.