Hallo, kurze Frage: Gibt es einen Grund, warum beim warten auf einen bestimmten Zustand mit "loop_until_bit_is_set" do{} while () genutzt wird? Oder ist es wie "for (;;)" statt "while (1)" nur eine "übliche Schreibweise"? Danke und Gruß Lutz
Nein Das sind zwei unterschiedliche Schleifenarten. Das eine ist eine kopfgestuerte Schleife, das andere eine fußgesteuerte Schleife. Sprich bei do { //Befehl }while() hier wird der befehl mindestens ein mal ausgeführt bevor die Abbruchbedinung abgefragt wird bei while() { //Befehl } kann es sein das der Befehl nie ausgeführt wird. Grüßle Jochen
Das ist in der Tat ein Unterschied: while (expression) {statement} ist eine sogenannte "pre-check-loop". Das Schleifenfortsetzungskriterium wird vor dem Schleifendurchlauf geprüft. Trifft das Fortsetzungskriterium gleich von Anfang an nicht zu, wird die Schleife kein einziges Mal durchlaufen. do {statement} while (expression) ist eine "post-check-loop" - die Schleife wird durchlaufen und danach wird das Schleifenfortsetzungskriterium geprüft. Somit wird diese Schleife mindestens einmal durchlaufen. In Struktogrammschreibweise: +-----------------+ | Kriterium | | +--------------+ | | | | | | +--+--------------+ und +--+--------------+ | | | | | | | +--------------+ | Kriterium | +-----------------+
Der von Euch aufgezeigte Unterschied ist einigermaßen klar. Ich meinte in diesem Falle aber speziell den Einsatz in der avr-libc mit "loop_until_bit_is_set" oder dem Gegenspieler "_clear". Da SOLLTE es doch eigentlich egal sein, ob er die Bedingung vor oder nach der expression prüft. Da liegt mein "Problem", da ich mittlerweile bei vielen Sachen in C einen "tieferen Sinn" zu übersehen fürchte. Und einmal falsch gelernt läßt sich ja bekanntlich schwer wieder korrigieren...
Ist solange egal, bis Du die den erzeugten Code mal ansiehst.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.