Forum: Mikrocontroller und Digitale Elektronik while-Schleifen Atmega168


von Dave_ (Gast)


Lesenswert?

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

von Nico Schümann (Gast)


Lesenswert?

Wie sieht diese Bedingung aus? Wird sie über ein Interrupt gesetzt?

von Ronny (Gast)


Lesenswert?

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.

von Dave_ (Gast)


Lesenswert?

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

von Dave_ (Gast)


Lesenswert?

Gibt es etwa bei Interrupts und while schleifen Probleme?

David

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

dann deklarier die Variable in der deine Bedingung definiert wird
einfach mal volatile.
1
volatile unsigned char foo;

Matthias

von Sonic (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.