Forum: Compiler & IDEs while ich blicks nicht


von Oddel (Gast)


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

von Raffi (Gast)


Lesenswert?

Hi Oddel

while ((receiveACK()==0) && (Timer< 4));

Klar.. "Mach solange receiveACK==0 UND Timer kleiner als 4"
while(receiveACK() == 0 || Timer < 4);

von Guru (Gast)


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.

von Oddel (Gast)


Lesenswert?

Hallo Guru,

du hast recht ! Habe den Fehler gerade gefunden die receiveACK Funktion 
liefert mir erst nach Timer=4 die 1 zurück, Damn hab' vergessen eine 
Variable zu setzen....

DANKE !

von Guru (Gast)


Lesenswert?

Gern, geschehen, Oddel.

Nicht das Du aus Versehen die koffeinfreie Variante erwischt hast. ;-)

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.