Programmierfehler???

Gast #314541
Lesenswert?
• ▲
▼
while((bit_is_clear(EINSe,AnschW))||(cstop==0));


Das Programm sollte bei diesem Befehl stehen bleiben und wenn eine der
beiden Bedingungen oder Beide nicht zutreffen weiterlaufen.

"cstop" ist int Variable

"EINSe,AnschW" ist andere Bezeichnung für PORTD (PIND,PIND1)


WINAVR + Atmega128 Programm wurde getestet und simuliert.

Wenn der oben genannte Befehl nicht möglich ist, was geht dann??
#314542
Lesenswert?
• ▲
▼
> while((bit_is_clear(EINSe,AnschW))||(cstop==0));
>
> Das Programm sollte bei diesem Befehl stehen bleiben und wenn
> eine der beiden Bedingungen oder Beide nicht zutreffen
> weiterlaufen.

Mit anderen Worten:

Das Programm soll 'schleifen', solange wie Bedingung A UND
Bedingung B zutreffen.

UND nicht ODER

So wie Du es jetzt hast, reicht eine der beiden Bedingungen,
damit die Schleife aufrecht erhalten bleibt. Erst wenn beide
Bedingungen nicht zutreffen, wird die Schleife verlassen.

Bei logischem UND bzw. ODER muss man aufpassen. Im umgangs-
sprachlichen Sprachgebrauch verwenden wir die beiden Worte
sehr oft logisch falsch.
#314547
Lesenswert?
• ▲
▼
> Bin ich da jetzt falsch informiert?

Es gibt in C 2 verschiedene Verknuepfungen:

Die mit nur einem Zeichen, also & und | sind die Bit-Verknuepfungen.
Die mit 2 Zeichen, also && und || sind die logischen Verknuepfungen.

Bit-Verknuepfung:  zwei int werden Bit fuer Bit miteinander
                   verknuepft.
                   0b1011 & 0b1101 -> 0b1001
                   ( in dezimaler Schreibweise: 11 & 13 -> 9 )

Logische Verknuepfung: beide Partner werden als logische
                   Werte true oder false aufgefasst:
                   0 wird zu false, alles andere ist true
                   Dann werden diese Wahrheitswerte miteinander
                   logisch verknuepft:

                   11 && 13

                     11 ist nicht 0, also logisch true
                     13 ist nicht 0, also logisch true

                     true UND true ergibt true

                   oder binaer

                   0b1011 && 0b1101  -> 0b0001

Sollte aber auch in jedem besseren C-Lehrbuch zu finden sein.
Ehrlich: Besorgt Euch Literatur! Das ist wesentlich besser
als diese 'Try and Error'-Methoden, Halbwahrheiten und Halbwissen,
das da jeden Tag auftaucht.
Gast #314549
Lesenswert?
• ▲
▼
Das Programm stimmt jetzt, aber: Es bleibt stehen und läuft nur weiter
wenn ich den PIN(ANSCHw) high setze, wenn es schon bei der Schleife
steht(Passt) oder "vor" der Schleife die Variable cstop ändere es
sollte aber auch weiterlaufen wenn ich die Variable ändere während das
Programm bei der Schleife stehen bleibt.


"cstop globale int  Variable
Schleife im int main (void)
ändern der Variable mit Interrupt"

Fehler beim Simulieren, Testen konnte ich noch nicht.

Und wenn ich

"while((cstop==0)&&(bit_is_clear(EINSe,AnschW)));"schreibe hängt sich
das Programm auf und nach einer Weile kommt der Dissambler

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.