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
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...
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 ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.