Forum: Compiler & IDEs Wie stelle ich die Optimierung ein, dass...


von Mark (Gast)


Lesenswert?

dieses foo=4 wegoptimiert wird ( oder erwarte ich da zuviel ??? )

#include <avr/io.h>


 uint8_t foo;

int main(void)
{
    /* Setzt das Richtungsregister des Ports A auf 0xff
       (alle Pins als Ausgang): */
    DDRB = 0xff;
 foo = 4;
    /* Setzt PortA auf 0x03, Bit 0 und 1 "high", restliche "low": */
    PORTB = 0x03;

}

von Karl H. (kbuchegg)


Lesenswert?

Das kann der Compiler nicht wegoptimieren, da es sich bei foo
um eine globale Variable handelt.

Der Compiler hat keine Möglichkeit festzustellen, ob es nicht
irgendwo eine 2te 'Compilation Unit' (ein 2tes C-Source Code
File) gibt, dass sich mittels

   extern uint8_t foo;

Zugang zu dieser Variablen verschafft und auf ihren Wert angewiesen
ist.

Wenn du eine Variable nicht brauchst warum legst du sie
dann an?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ich hätte erwartet, dass GCC 4.x mit -fwhole-program -funit-at-a-time
die Zuweisung entfernt, aber selbst da passiert es nicht.

von Mark (Gast)


Lesenswert?

@ Karl

..absichtlich macht das keiner  -  aber irren ist menschlich -  daher 
wäres nett, wenn der Compiler das bemerkt -  aber ok -  habs so 
verstanden .....

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.