C Code frage

#1417467
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
Gast #1417468
Es ist nicht das Gleiche.

Zum Testen eines Bits schreibt man eigendlich:

while ((EadcBUSY & UCBUSY) != 0)

Verkürzen kann man das als:

while (EadcBUSY & UCBUSY)
#1417474
Uhu Uhuhu schrieb:
> Karl heinz Buchegger schrieb:
>> Wenn UCBUSY nicht 0x01 ist, dann wird das Ergebnis der UND Verknüpfung
>> niemals 0x01 sein können.
>
> Doch, z.B. wenn UCBUSY == 3 und EadcBUSY == 1

Ja, du hast recht. Hatte die Antwort dahingehend schon korrigiert.
OP #1417644
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.