folgender unvollständiger aber zu verstehender Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
Ich glaube es ist Freitag und schon zu spät für mich :) Ok ich habs noch nicht kapiert. Kann mir jemand springen helfen ? Gruss, Jörg
|
Anzeige
|
Bits prüfen, ich komme nich mehr weiterfolgender unvollständiger aber zu verstehender Code:
Ich glaube es ist Freitag und schon zu spät für mich :) Ok ich habs noch nicht kapiert. Kann mir jemand springen helfen ? Gruss, Jörg Um was geht es? Vielleicht meintest du in der if-Anweisung eher
Kennst du den Unterschied zwischen "&" und "&&"?
Gast
#2909561
Muss man das verstehen? Ich seh weder nen vernünftigen Code-Abschnitt noch ne vernünftige Frage... Jörg Esser schrieb: > if ((dir==TRUE) & (LED_Mode & PWM) & !(LED_Mode & AUS)){ Ich hab ausnahmsweise mal die Glaskugel da und sehe gleich mehrere Fallen: Ist die if()-Bedingung ein boolscher Ausdruck? Dann musst du den Operator && für die boolsche Und-Verknüpfung verwenden. So, wie es da steht, ist das ein bitweises UND, das ein völlig anderes Ergebnis hat. (LED_MODE & PWM): Willst du mit dem zuvor gesetzten Wert vergleichen, muss der Ausdruck (LED_MODE & (1<<PWM)) lauten. Der Ausdruck (dir == TRUE) kann zudem noch folgenden Nebeneffekt haben: Nur der boolsche Wert FALSE hat einen eindeutigen Wert (0). TRUE wird üblicherweise zwar als !FALSE definiert, welcher Wert das ist, ist aber compilerabhängig. Sicherer wäre also (dir != FALSE) oder einfach (dir). Zusammengefasst: Ist if ((dir) && (LED_Mode & PWM) && !(LED_Mode & AUS)){ das, was du wolltest? Grüße Stefan Stefan Wagner schrieb: > Zusammengefasst: Ist > > if ((dir) && (LED_Mode & PWM) && !(LED_Mode & AUS)){ > > das, was du wolltest? Man betrachte noch die Werte, die die hier verwendeten Konstanten haben: > #define AUS 0 > #define GRUEN 1 > #define PWM 2 Welcher Wert muss in LED_Mode stehen, damit der Ausdruck (LED_Mode & AUS) zutrifft? Ist der Wert von (X & 0) in irgendeiner Weise von X abhängig? Rufus Τ. Firefly schrieb: > Ist der Wert von (X & 0) in irgendeiner Weise von X abhängig? Oha. Den Teil hatte ich mir gar nicht mehr angesehen. Eventuell war da aber auch !(LED_Mode & (1<<AUS)) gemeint. Grüße Stefan
Gast
#2912326
Stefan Wagner schrieb: > TRUE wird > üblicherweise zwar als !FALSE definiert, welcher Wert das ist, ist aber > compilerabhängig. Nein, schon lang nicht mehr. Laut C89-Standard ist !0 = 1. Also seit dem letzten Jahrtausend. :-) DirkB schrieb: > Laut C89-Standard ist !0 = 1. Man sollte doch so im Zehnjahresrhytmus mal die Sprachreferenz komplett lesen. Das frischt das Gedächtnis auf. Du hast natürlich recht. (Steht sogar schon so in der ersten deutschen Auflage von K&R aus dem Jahr 1983.) Ich weiß nicht mehr, wo ich die Erfahrung mit den abweichenden Werten für TRUE gemacht habe, aber vielleicht wäre damals eher ein bug report angebracht gewesen. Stattdessen haben wir defensiv codiert und nur "FALSE == 0" vorausgesetzt. Grüße Stefan @All Vielen Dank für eure Tips. Ich habe mich am Wochenende nochmals damit auseinandergesetzt. Es war natürlich eine Kombination aus && <<.Ich habe echt alles falsch gemacht. Jetz geht es mit dem neuen Code. Nochmals Danke. Ist übrigens eine Ansteuerung für 2 LED´s mit nur einem Portpin. Ich kann ROT oder GRÜN,Beide aus, und jeweils eine Dimmen. Funktioniert hier wirklich prima. Ich hoffe auch mit anderen roten und grünen Led´s ;)
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|