Komisch: ATmega48, I/Os und Optimization

Gast #939047
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.