Hallo, ich habe eine kleines Problem. Ich möchte zwei Pins an Port F auf High setzen. Ich habe folgendes geschrieben: PORTF |= (1<<PF1) && PORTF |= (1<<PF3); Als Fehlermedlung erscheint immer: error: lvalue required as left operand of assignment Wo ist da der Fehler??
&& ist ein logischer operator. Es muss so aussehen: PORTF |= (1<<PF1) | (1<<PF3);
das && ist ein vergleichender Operator - du willst abernichts vergleichen, sondern zuweisen. Schreib den Teil nach dem && einfach in eine zweite Zeile __ Gast
Autsch. Das: Sören schrieb: > PORTF |= (1<<PF1) && PORTF |= (1<<PF3); muss korrekt natürlich so heißen:
1 | PORTF |= (1<<PF1) | (1<<PF3); |
Wenn eine andere Funktionalität beabsichtigt gewesen wäre, hätte man das auch z. B. so umbauen können:
1 | PORTF |= (1<<PF1) && (PORTF | (1<<PF3)); |
;)
Patrick schrieb: > muss korrekt natürlich so heißen: > PORTF |= (1<<PF1) | (1<<PF3); sieht zwar gut aus hat aber nebenwirkungen. Es kommt jetzt auf die Hardware an. Wenn es ein Atmel ist dann wird hier erst PORTF eingelesen und dann wieder zurückgeschrieben. Das könnte Probleme machen wenn es noch interupts gibt die auch PORTF verwenden. Wenn es auch ok, das man die beiden pins nicht gleichzeitig setzt würde ich liber so schreiben. PORTF |= (1<<PF1); PORTF |= (1<<PF3); das ist je nach hardware sogar schneller.
Sören schrieb: > Also steht "|" für und?? Nein, für (binäres) ODER. Allerdings ist die Umngangssprache da sehr ungenau. Wenn du sagst "im Ergebnis muß ein Bit gesetzt sein, daß in dem einen Operanden vorkommt, und eines, das im anderen Operanden vorkommt", dann entspricht das der eher mathematischen Aussage "im Ergebnis sollen alle Bits gesetzt sein, die im einen oder dem anderen Operanden gesetzt sind". Diese verwaschene Bedeutung in der deutschen Sprache sorgt öfters für Verwirrung, da muß man durch. Das korrekt gemeinte "in einem Operanden gesetzt und im anderen" führt im Ergebnis nur zu einem gesetzten Bit, wenn an der entsprchenden Stelle in beiden Operanden das Bit gesetzt ist.
Sören schrieb: > Okay. > Also steht "|" für und?? Wenn du schon so fragst, brauchst du dringend ein C-Buch und ein paar Vorabübungen auf einem PC. C programmieren auf einem PC hat den Vorteil, dass du wesentlich bessere Einsteigerbedingungen hast um die Grundlagen zu lernen. Das Buch wird dir die Anfänge in einer systematischen Art und Weise von der Pieke auf beibringen. | steht für Oder Aber das ist hier nicht der springende Punkt. Der springende Punkt ist, dass nicht jedes umgangssprachlich gesprochende UND sich in einem Zeichen in der Sprache C niederschlägt. In diesem Fall bedeutet dieses UND im Satz "setze Ausgang A UND setzte Ausgang B" nämlich keine irgendwie logische Verknüpfung von 2 Aussagen sondern es bedeutet ganz einfach: "zuerst mach das, danach mach das". Maximal könnte man noch "mach die beiden Dinge A und B in einem Aufwasch" darin sehen. In C schreibst sich das im einfachsten Fall einfach als 2 Anweisungen hintereinander, eine Sequenz, die abgearbeitet wird Setze Ausgang A; Setze Ausgang B; der Nettoeffekt der beiden Anweisungen ist, dass sowohl Ausgang A als auch (also UND) Ausgang B gesetzt ist. Anderes Beispiel: "Gehe zum Fenster UND mache es auf". Obwohl hier ein UND verwendet wird, bedeutet dieser Satz einfach nur die Sequenz Zum Fenster gehen; Fenster öffnen; Das ist aber etwas völlig anderes, als das UND in "Wenn es regnet UND ich keinen Schirm habe, dann werde ich nass". Hier verknüpft das UND 2 Bedingungen zu einer Komplettaussage. Und es ist dieses UND, welches sich in C in Form eines & oder eines && wiederfindet. Gerade wenn es um die Wörter UND bzw. ODER geht, sind wir in der gesprochenen Sprache unglaublich schlampig. Das macht insofern nichts, weil unser Gehirn die Dinge trotzdem richtig aussortiert und die Bedeutung rausfindet. Man muss da sehr genau aufpassen, ob man hier nicht einem logischen Trugschluss aufsitzt, wenn man die UND bzw. ODER aus der gesprochenen Sprache einfach übernimmt und 1:1 in eine Programmiersprache abbildet.
Karl Heinz Buchegger schrieb: > eines & oder eines && Du hast es geschafft, zwischen zwei Und noch ein Oder zu bekommen :-)
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.