Forum: Mikrocontroller und Digitale Elektronik Komisch: ATmega48, I/Os und Optimization


von Edward Cardew (Gast)


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

von Andreas K. (a-k)


Lesenswert?

Edward Cardew wrote:

> Benutze Studio 4.12

Und welche Version vom Compiler?

von micha r. (Gast)


Lesenswert?

Probier mal statt dem for(;;) ein while(1) zu schreiben.

von Edward Cardew (Gast)


Lesenswert?

GCC ist 1.0.0.3

Mit while ist das gleiche.

Edward

von Andreas K. (a-k)


Lesenswert?

Edward Cardew wrote:

> GCC ist 1.0.0.3

In den 80ern des letzten Jahrhunderts gab es AVR noch nicht.

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.