C Code frage

#1417461
Lesenswert?

Moin moin!

Ich komme gerade nicht drauf, und bevor ich mist progge wollte ich 
nochmal nachfragen.

 while ((EadcBUSY & UCBUSY)==0x01)

ist doch genau das gleiche wie

 while (EadcBUSY & UCBUSY);



oder stimmt das nur wenn UCBUSY==0x01 ?

LG
#1417467
Lesenswert?

Bergie B. schrieb:
> Moin moin!
>
> Ich komme gerade nicht drauf, und bevor ich mist progge wollte ich
> nochmal nachfragen.
>
>  while ((EadcBUSY & UCBUSY)==0x01)
>
> ist doch genau das gleiche wie
>
>  while (EadcBUSY & UCBUSY);
>
>
>
> oder stimmt das nur wenn UCBUSY==0x01 ?

Wenn UCBUSY nicht 0x01 ist, dann wird das Ergebnis der UND Verknüpfung 
niemals 0x01 sein können. In diesem Sinne wird bei der ersten Variante 
von einer impliziten Annahme ausgegangen. Und das kann ins Auge gehen.
(Vorausgesetzt, UCBUSY ist eine Maske, mit der genau 1 Bit und nicht 
mehr extahiert werden soll. Aber davon gehe ich mal aus)

Daher ist es besser nicht auf explizit 0x01 abzufragen, sondern entweder

   while ((EadcBUSY & UCBUSY) != 0)

oder

   while ((EadcBUSY & UCBUSY) == UCBUSY)

Aber gerade bei Vergleichen ist man des öfteren in der paradoxen 
Situation, dass Tipp-Faulheit belohnt wird.

    while (EadcBUSY & UCBUSY);

macht genau dasselbe
#1417644
Lesenswert?

Danke euch allen für eure mühen mir etwas bei zu bringen!

Werde nun die Kurze Variante versuchen.


while ((EadcBUSY & UCBUSY) != 0)
{
//warten
}

while (EadcBUSY & UCBUSY);

wobei ich bei dieser Variante jedes BIT testen kann egal ob mein UCBUSY 
nun eine
0x01 == 00000001b
ist oder
0x03 == 00000010b

und wenn ich in der Schleife warten möchte bis das BIT1 wird würde ich:

while (!(EadcBUSY & UCBUSY));

benutzen?

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