Problem mit for-Schleife

Gast #791432
Hallo Community,

ich habe ein Problem: Ich bin zwar nicht mehr unerfahren was 
Porgrammierung für ATMEL's in C angeht, aber ich bin dennoch ratlos...

Wenn ich ein C-Programm schreibe, was nur eine for-Schleife besitzt, die 
verzögert meinen Port ein- und ausschaltet, dann funktioniert es nur, 
wenn ich meine Laufvariable gglobal deklariere.
Wenn ich folgendes schreibe:

void warte(void)

{
  for(unsigned int i=0; i<60000 ; i++);
}

dann übergeht mein Hauptprogramm diese Schleife, vereinbare ich i 
global, dann funktioniert es.

Vereinbare ich i global, und setze die Schleife folgendermassen:

void warte(void)

{
  for(i=60000; i>0 ; i--);
}

wird diese Schleife ebenfalls übergangen..wo liegt hier der Fehler?? Ich 
versteh es nicht und verzweifle langsam..ich nutze das AVR Studio und 
das STK500 mit einem Mega32.
#791437
AVRStudio kann kein C. Also ist es vermutlich der WINAVR-Compiler...

Und dass leere Schleifen ein gefundenes Fressen für den Optimizer sind, 
ist ein altbekanntes Phänomen. Wenn Du irgendwelche Warteschleifen 
brauchst, dann sorge entweder dafür, dass der Optimizer nichts 
optimieren kann (z.B. indem Du die Zählvariable volatile deklarierst 
oder ein Assembler-nop einbaust) oder (besser) Du benutzt die Funktionen 
aus der util/delay.h. Die können nicht wegoptimiert werden und sind 
extra dafür da.
Gast #791454
Danke dir, das er das wegoptimiert, habe ich auch noch nicht
gehört...habe es gerade mal mit der Delay-Funktion probiert, klappt
perfekt..vielen Dank nochmal!!
#791670
fubu1000 wrote:
> Hallo,
> hinter der FOR-Schleife das Semikolon weg, dann gehts !
> GRUSS

Äh? Wenn keine Befehle in der Schleife ausgeführt werden sollen, dann 
ist das Semikolon richtig und nötig.

Ein "volatile" vor der Deklaration der Zählvariable hätte auch zum 
Erfolg geführt. Sonst erkennt der Kompiler (zu recht) dass die Schleife 
sinnlos ist und lässt sie weg.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.