www.mikrocontroller.net

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


Autor: Edward Cardew (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Edward Cardew wrote:

> Benutze Studio 4.12

Und welche Version vom Compiler?

Autor: micha r. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal statt dem for(;;) ein while(1) zu schreiben.

Autor: Edward Cardew (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GCC ist 1.0.0.3

Mit while ist das gleiche.

Edward

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Edward Cardew wrote:

> GCC ist 1.0.0.3

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.