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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren