mikrocontroller.net

Forum: Compiler & IDEs Bug in AVR Studio und GCC ?


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe folgendes C Programm geschrieben und mit WINAVR
kompiliert.

Als ich die Cof Datei im AVR Studio geöffnet habe und debuggen wollte
mit dem JTAG ICE habe ich bemerkt dass die laufvariable int i nicht
hochgezählt wird. Obwohl dass Programm funktioniert.

# include <io.h>
# include <iom16.h>        //ATmega8-Deklarationen

int i;

void main(void)
{
  DDRD=0xFF;                //Alle PORTB-Pins auf Ausgang
  while(1)
  {
    for (i=0;i<0xF000;i++) //Warteschleife, abhängig von
AVR-Taktfrequenz
    {};
    PORTD++;
  }
}

Im Disassembler Mode habe ich gesehen dass diese Variable im Register
steht (R24 und R25) und nicht wie im C-Debugfenster angegeben im SRAM ,
ist dass also ein Bug des Compilers oder des AVR Studios. Vieleicht kann
dass mal jemand compilieren und im SingleStep die Variable i beobachten
ob sie hochgezählt wird. Bei mir jedenfalls nicht.

Danke für eure Hilfe

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
for(i = 0; i < 0xF000; i++)
    ;

Das ergibt für den Compiler bei eingeschalteter Optimierung "sinnlosen
Code", weil mit "i" nichts passiert. Er wird in diesem Falle "i"
auf die Konstante 0xF000 festlegen. Abhilfe schafft hier das
Schlüsselwort "volatile" -- oft diskutiertes Thema.
Besser noch:
Funktionen der avr-libc verwenden, Verzögerungsroutinen finden sich im
Headerfile "delay.h" und sind mittlerweile sogar in der avr-libc-Doku
Dokumentiert...

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo bekomme ich diese Bibliothek her? Und wie binde ich diese ein, hast
du dafütr ein kleines Beispiel,

Danke übrigens für den Tipp jetzt wird mein int i hochgezählt ;)

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe avr-libc Dokumentation.

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.