Hallo Zusammen Ich möchte ein programm sreiben für meinen ATMEGA168 in welchem es mehrere while Schleifen gibt. z.b while(1)//Schleife 1 {. . . . break; } while(1)// Schleife 2 { . . . break; } er soll eine Schleife ausführen, bis eine bedingung kommt und dann in die nächste hüpfen usw. und das alles ist in einer großen Schleife. Frage: Es will einfach nicht funktionieren. Ist es möglich damit es gar nicht möglich ist sowas zu programmieren oder habe ich wirklich irgendwo einen anderen fehler? David
Ja,das ist möglich.Zum Abbrechen von Schleifen ist der break-Befehl schliesslich da.Alternativ könntest du auch ein Flag definieren was du vor Eintritt in die Schleife setzt und dann einfach per while(Flag) { ... } abfragst. Ob du nun aber in deinem Programm alle Bedingungen richtig gesetzt hast kann ich ohne Kristallkugel schlecht sagen.Wo kein break kommt,da läuft die Schleife logischerweise weiter. Falls du z.B ein Hardwareregister ausliest und damit weiterrechnest und diese nicht volatile ist,kann es sein das die Variable in ein Allzweckregister wegoptimiert wird.
Ja die Bedingung wir durch ein interrupt gesetzt. Es ist ein USART interrupt, welcher sagt daß was angekommen ist und dann das Programm in die nächste schleife springen soll. David
Hi dann deklarier die Variable in der deine Bedingung definiert wird einfach mal volatile.
1 | volatile unsigned char foo; |
Matthias
Hast Du deine Variablen (die in den INTs verwendeten) mit 'volatile' initialisiert? Falls nicht geben die immer '0' zurück.
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.