Bug in AVR Studio und GCC ?

Gast #180209
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
Gast #180210
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...

Antwort schreiben

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.

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.