mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik while-Schleifen Atmega168


Autor: Dave_ (Gast)
Datum:

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

Autor: Nico Schümann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht diese Bedingung aus? Wird sie über ein Interrupt gesetzt?

Autor: Ronny (Gast)
Datum:

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

Autor: Dave_ (Gast)
Datum:

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

Autor: Dave_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es etwa bei Interrupts und while schleifen Probleme?

David

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Matthias

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du deine Variablen (die in den INTs verwendeten) mit 'volatile'
initialisiert? Falls nicht geben die immer '0' zurück.

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.