Code Verständnis

Gast #1226506
Lesenswert?
• ▲
▼
Hallo

habe unter "Codesammlung" folgendes Code Fragment gefunden:
1
....
2

3
void delay_1ms( u16 i )
4
{
5
  do{
6
    _delay_ms( 1 );
7
  }while( --i );
8
}
9

10

11
int main( void )
12
{
13

14
    delay_1ms( 10000 );  
15
}
16
...

Ich verstehe die do while schleife irgendwie nicht. Kann man diesen Code 
auch anders schreiben, so dass auch ein Amateur wie ich es bin versteht?
Also eine äquivalente Schreibweise.

Grüsse
#1226510
Lesenswert?
• ▲
▼
Ganz einfach: Die Funktion delay_1ms wird mit einem Parameter i (hier 
10000) aufgerufen.

Die Schleife in der Funktion macht dann in jedem Durchlauf 1ms Pause, 
zieht 1 von der Variablen i ab (i--) und widerholt so lange die 
Schleife, so lange i größer als 0 ist (wenn i durch i-- 0 wird, wird die 
Schleife verlassen).
#1226538
Lesenswert?
• ▲
▼
Mario wrote
1
void delay_1ms( u16 i )
2
{
3
  while(i) {                 // leserlicher while(i > 0)
4
    _delay_ms( 1 );
5
    --i;
6
}

Das ist aber nicht dasselbe wie
1
void delay_1ms( u16 i )
2
{
3
  do{
4
    _delay_ms( 1 );
5
  }while( --i );
6
}

Beim ersteren wird zuerst überprüft, ob i bereits null ist und erst dann 
1ms gewartet, während bei letzterem zuerst gewartet und dann überprüft 
wird. Eigentlich ist deine Methode die "richtigere" weil es logischer 
ist, dass beim Aufruf von delay_1ms(0) nicht garnicht gewartet wird.

MfG Mark

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