www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit for-Schleife


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!!

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
hinter der FOR-Schleife das Semikolon weg, dann gehts !
GRUSS

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.