while ich blicks nicht

Gast #2129148
Lesenswert?
• ▲
▼
Moin,

ich blicks im Moment nicht, vielleicht sollte ich auch erst noch einen 
Kaffee trinken...

Ich habe hier folgende Zeilen Code :
1
.....
2
     while ((receiveACK()==0) && (Timer< 4));  //Wenn kein ACK und Timer über 4 dann weiter
3
     if ((Timer >= 4) && (Try == 3)){
4
        timeout = 1;  // 3. Versuch und timeout , hier lief was schief !
5
        USART0_Puts("Timeout !!");
6
      }
7
      if (Timer <4){
8
         // wir haben einen ACK erhalten !
9
         TimerOff();
10
         return 0;
11
      }
12
      TimerOff();
13
    } // for try
14

15

16

17
    return timeout;

ich bekomme immer einen Timeout, obwohl die Funktion receiveACK() eine 
return 1;
liefert !
Habe ich da einen Denkfehler ? Dieser Codeschnipsel soll folgendes 
machen , es wird solange auf ein ACK gewartet bis entweder eine 1 oder 
die Variable Timer (Ein Interrupt der jede Sekunde die Variable um 1 
erhöht) >= 4 ist.
Wird die Zeit überschritten, wird das ganze noch 3x aufgerufen, 
For-schleife mit der Var. try.

Ich blicks nicht.

Vielleicht sieht Jemand von euch was.

Gruß
Oddel
Gast #2129163
Lesenswert?
• ▲
▼
Vielleicht habe ich ja auch noch zuwenig Koffein im Blut, aber:

das mit dem UND scheint mir in Ordnung zu sein.
Denn mit dem von Raffi vorgeschlagenen ODER wid ja die Schleife nicht 
verlassen, auch wenn ein ACK vorliegt, wenn der Timer noch nicht >= 4 
ist.

Aber...
... die anschliessende if-Bedingung testet nur auf die Anzahl der 
Timeouts. Falls also gleichzeitig_ ein ACK kommt _und der Timer==4 
ist, dann schlägt das if doch zu. Es wird wohl häufig (oder immer) der 
Fall eintreten, das ein ACK erst bei Timer==4 kommt.

Antwort schreiben

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.

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.