Komisch: ATmega48, I/Os und Optimization

Gast #939047
Lesenswert?

Weiss nicht was los ist, dieser code kopiert PC5 nach PC4 in einem 
Atmega48. Laeuft volle Geschwindigkeit bei 18432000 Xtal. Bei Optimize 
O0 und O1 geht es, bei den anderen nicht, Warum?


// For ATmega48
// Copy PC5 to PC4

#include <avr/io.h>

int main (void) {

  DDRC |= (1<<DDC4);        // PC4 is output
  DDRC &= ~(1<<DDC5);       // PC5 is input

  for (;;) {
    if (PINC & (1<<PC5))
      PORTC |= (1<<PC4);
    else
      PORTC &= ~(1<<PC4);
  }

}

// Works in Optimize -O0 and -O1
// DOES NOT WORK in -O2 -O3 and -Os (output High)


Benutze Studio 4.12

Ich weiss es gibt andere Methoden zum kopieren eines I/O bits, aber es 
geht mir hier um allein das Verstaendniss.

Ach ja, frueher hatte ich beim compilieren immer einen kleinen Bericht 
am ende wo stand wieviel Memory aufgebraucht wird. Jetzt habe ich es 
nicht mehr, auch keine Ahnung. (Guter Anfang fuer die Woche!)

Edward

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