while schleife funktioniert nicht

Gast #756899
hallo,

ich habe ein problem mit der while schleife. im hauptprogramm meines 
atmega8 möchte ich mit einer while schleife abwarten bis eine bestimmte 
variabel größer als ein vordefinierter wert ist.  wenn die variabel 
größer als 10 ist soll das hauptprogramm weiterlaufen.
also:

..

while (c < 10) //c wird durch externen interrupt erhöht
{
}

..

wieso funktioniert das so nicht?

wenn ich in den geschwungenen Klammern einen weiteren befehl schreibe 
funktioniert es.

while (c < 10) //c wird durch externen interrupt erhöht
{
  uart_puts("c < 10 \r\n");
}

Karl
Geht es denn mit -O0?

Ansonsten vielleicht umformulieren um den Optimiser auszutricksen.
1
while(1)
2
{
3
 if(c > 9)
4
 {
5
  break;
6
 }
7
}

So mal aus der Hüfte geschossen, wie genau der Optimiser darauf 
reagiert, bin ich mir auch nicht sicher.
Gast
Die Optimierungsstufe -O0 kann ich nicht wählen da sonst das programm 
nicht auf den µC passt. Ich werde es einmal mit deiner methode 
versuchen. danke für deine bemühungen. Gibt es im Internet Erklärungen 
zu den einzelnen Optimierungsstufen?
Gast
Die einzelnen Optimierungsstufen sind schnell erklärt:

-O0: keine Optimierung
-O1: Optimierung der Registerbelegung, also Umkopieren zwischen 
Registern vermeiden, häufig verwendete Variablen komplett in Registern 
halten
-O2: Optimierung der Programmstruktur auf Funktionsebene (darunter fällt 
auch das Wegoptimieren sinnloser Schleifen)
-Os: Dasselbe wie -O2, bis auf solche Optimierungen, die typischerweise 
die Codegröße erhöhen
-O3: Optimierung der Programmstruktur auf Sourcefileebene (also auch 
Inlining etc.)
Moderator Persönliche Seite
Karl wrote:
> ich habe es jetzt in volatile geändert und es funktioniert trozdem
> nicht.Als Optimierungsstufe habe ich -Os gewählt.

Dann musst du Nägel mit Köpfen machen und ein compilierfähiges
Beispiel liefern.  Außerdem solltest du "funktioniert nicht" dann
noch näher erläutern (was erwartest du? was passiert stattdessen?).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.