1 | uint8_t n=0xFF; |
2 | while(1) |
3 | {
|
4 | _delay_ms(250);LED=1;_delay_ms(1);LED=0; |
5 | n--; |
6 | if(n==0x00)break; |
7 | }
|
Im Anhang das projekt für avr-gcc mit Makefile (unter linux benutzt) mit isptiny progger mit atmega32 und 16MHz quarz drann.
|
Forum: Compiler & IDEs while scheife wird nie verlassen, warum?
Im Anhang das projekt für avr-gcc mit Makefile (unter linux benutzt) mit isptiny progger mit atmega32 und 16MHz quarz drann. while(bedingung){} das Programm bleibt solange in einer While-Schleife wie ihre Bedingung Wahr ist (logisch 1) mit while(1){} bleibt die Bedingung immer Wahr, somit wird die Schleife auch nie verlassen. vllt besser while(n != 0x00){} // solange n ungleich 0x00 > das Programm bleibt solange in einer While-Schleife wie ihre Bedingung > Wahr ist [..] ..oder die Schleife vorzeitig verlassen wird > [..] mit while(1){} bleibt die Bedingung immer Wahr, > somit wird die Schleife auch nie verlassen. ..außer sie wird vorzeitig verlassen. Ad TO: woher weisst Du denn, dass die Schleife nie verlassen wird? Die Schleife sollte nach zirka 64 sekunden verlassen werden: 256*(250ms+1ms) = 64256ms Mach doch aus der while eine do while.
Ist es beabsichtigt, dass du bei n=255 insgesamt 256 schleifendurchlaufe hast? :
Bearbeitet durch User
Die Zeile if(n==0x00)break; hatte ich beim ersten Überfliegen nicht gesehn. Deshalb auch der Nachtrag mit "solange ungleich 0x00" wenn es nur eine Schleifen-Ausstieg gibt ist die if-Abfrage unsinnig da die While-Schleife selber bei jedem Durchgang eine Bedingungs-Abfrage macht Und was kommt nach der while-Schleife? Die wird mit Sicherheit durch den break verlassen. Wenn aber danach nichts mehr an Code kommt, dann fängt der AVR wieder von vorne an. Für Dich erscheint es so, als würde die while-Schleife nicht verlassen. Als Tipp zum testen: Füge nach dieser Schleife diesen Code ein:
That's it. OldMan schrieb: > Und was kommt nach der while-Schleife? steht doch im Anhang. > Wenn aber danach nichts mehr an Code kommt, dann fängt der > AVR wieder von vorne an. nein macht er nicht, nach der main baut die toolchain eine entlosschleife ein. > Für Dich erscheint es so, als würde die while-Schleife nicht verlassen nein Alles klar. Hab nen Denkfehler gehabt. Sie wird doch unterbrochen, so wie es gehört. Habe nur 4 bit an LED's gelegt und habe nicht dran gedacht das das blinkmuster 16 mal wiederholt wird bis 0x00 erreicht ist anstelle nur ein mal :-/ Man, man, man, er hat keine Geduld für die lange Zeit, oder das delay läuft nicht ab. 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
Noch kein Account? Hier anmelden.
|
|