Hallo zusammen, aus einem C Forum habe ich folgendes abgekupfert und, ja, ohne es genau zu kapieren. Ich habe ein 5 Byte Array aus dem ich gerne bitweise die Bitwerte in "result" zurückgeben möchte. if( (myByte >> i) & 1 ) { result = 1; } myByte enthält jeweils das Byte, welches auch korrekt ausgelesen wird (LED geht an "if(myByte)". Nur die Bitwerte kriege ich da noch nicht raus-geshiftet... Danke, Klaus.
Das Schnipsel ist ein bisschen dünne... Was ist mit i? Ein array sehe ich nicht. Vielleicht fehlt nur der else-Zweig?
1 | if( (myByte >> i) & 1 ) { |
2 | |
3 | result = 1; |
4 | |
5 | }
|
Yo, Mann. Also der Teil des Codes sieht ja gut aus. ^^ ... und wo ist der Rest?
Diese Bitroutine...
1 | int read_eeprom_bitwise(void) { |
2 | |
3 | unsigned char result=0, characters=0, bit1=0, bit2=0; |
4 | |
5 | characters=sizeof(pgmSignatureArray_01); //Anz. der Datenwerte im array ermitteln |
6 | |
7 | if(i<=characters) { |
8 | |
9 | myByte = pgm_read_byte(&pgmSignatureArray_01[i]); //Daten aus array an Adr. "i" kopieren |
10 | |
11 | }
|
12 | |
13 | |
14 | //if(myByte) PORTB ^= (1 << LED_G);
|
15 | |
16 | |
17 | bit1 = (myByte >> k); |
18 | bit2 &= 0b00000001; |
19 | |
20 | if( 1 ) { |
21 | |
22 | result = 1; |
23 | |
24 | }
|
25 | |
26 | k++; |
27 | |
28 | if(k==8) {i++; k=0;} |
29 | |
30 | if(i==characters) {i=0;} |
31 | |
32 | return 0; |
33 | |
34 | }
|
Wird hier in der main aufgerufen...
1 | if(mode==1 && flag_1==1){ // LED_RHP gibt Bitmuster aus |
2 | |
3 | read_eeprom_bitwise(); |
4 | if(result) {PORTB ^= (1 << LED_RHP);} |
5 | flag_1=0; |
6 | |
7 | }
|
i + k werden sauber hochegzählt, aber result scheint nur einfach nicht global verfügbar - bööps. Klaus.
...ach, f*ck, result war doppelt deklariert. So, nunh noch das rätsel, wieso bit2 nicht enthält, was es soll (if (1) ist nun if(bit2)). Klaus.
Naja, Werte werden in C nicht über die Parameterliste zurückgegeben, nur Zeiger. Ich hätte genommen:
1 | .
|
2 | .
|
3 | return result; |
4 | .
|
5 | .
|
und
1 | .
|
2 | .
|
3 | result = read_eeprom_bitwise(); |
4 | .
|
5 | .
|
...sooo, noch ein Fewhlerchen behoben. bit1 = (myByte >> k); bit2 = bit1 & 0b00000001; Den Funktionsaufruf hab ich so übernommen, stimmt. "return 0" ist nicht schön. Klaus.
Scheiße, es geht :)
1 | myByte = (myByte >> k); |
2 | myByte &= 0b00000001; |
3 | |
4 | if( myByte ) { |
5 | |
6 | result = 1; |
7 | |
8 | }
|
9 | |
10 | else result = 0; |
Das war der letzte Hirnfurz... Danke, Klaus.
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.