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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren