Hallo Leute ich würde gerne eine Variable nach rechts schiften aber der compiler meckert schon wieder. Ich sehe abern icht was ich falsch mache : hier der Code die deklaration: typedef struct { unsigned char bit_1:1; // 1. Bit unsigned char bit_2:1; // 2. Bit unsigned char bit_3:1; // 3. Bit unsigned char bit_4:1; // 4. Bit unsigned char bit_5:1; // 5. Bit unsigned char bit_6:1; // 6. Bit unsigned char bit_7:1; // 7. Bit unsigned char bit_8:1; // 8. Bit unsigned char bit_9:1; // 9. Bit unsigned char bit_10:1; // 10. Bit unsigned char bit_11:1; // 11. Bit unsigned char bit_12:1; // 12. Bit unsigned char bit_13:1; // 13. Bit unsigned char bit_14:1; // 14. Bit unsigned char bit_15:1; // 15. Bit unsigned char bit_16:1; // 16. Bit }manchester_bitfield; volatile manchester_bitfield bits; bits = bits >> 1; // 1x das lsb rausschiften und hier if(bits == START ) kommt jedes mal die meldung invalid operands to binary bitte leute???
Hi du kannst in C kein >> und == auf eine Struktur anwenden. Matthias
und wie löse ich jetzt mein problem am besten auf ein short kopieren und dann operation und wieder zurück kopieren ?
Hi Das wäre eine Möglichkeit. Eleganter gehts aber mit einer union. http://www.schellong.de/c.htm#struct Matthias
tut mir leid ich finde nichts dort was mir hilft ? kann du mir genauere Infos geben ?
Hi so etwa:
1 | union mbu_u |
2 | {
|
3 | manchester_bitfield bf; |
4 | uint16_t sca; |
5 | } mbu; |
6 | |
7 | mbu.sca = mbu.sca >> 1; |
8 | |
9 | if(mbu.sca == START) ... |
Matthias
Jetzt hab ichs verstanden weil sich die elemente einer union den gleichen Speicherplatz teilen ?!
müsste ja so mit short gehen ??? typedef union { unsigned char bit_1:1; // 1. Bit unsigned char bit_2:1; // 2. Bit unsigned char bit_3:1; // 3. Bit unsigned char bit_4:1; // 4. Bit unsigned char bit_5:1; // 5. Bit unsigned char bit_6:1; // 6. Bit unsigned char bit_7:1; // 7. Bit unsigned char bit_8:1; // 8. Bit unsigned char bit_9:1; // 9. Bit unsigned char bit_10:1; // 10. Bit unsigned char bit_11:1; // 11. Bit unsigned char bit_12:1; // 12. Bit unsigned char bit_13:1; // 13. Bit unsigned char bit_14:1; // 14. Bit unsigned char bit_15:1; // 15. Bit unsigned char bit_16:1; // 16. Bit unsigned short bitfield; }manchester_bitfield;
Hi mit Bit-Feldern hab ich bisher noch nichts gemacht aber WIMRE ist die Anordung der bits in dem betreffenden Wort eh "implementation defined". Du erzeugst also auf jeden Fall nicht portablen Code der evtl. nichtmal das macht was du erwartest. Und ob das mit der union so funktioniert wie du es als Beispiel bringst weiß ich auch nicht. An deiner Stelle würde ich eher den Weg gehen wie ich oben geschrieben habe und genau prüfen ob >> das tut was du erwartest.
ist schon schlimm mit der denglischen Sprache. Eigentlich wärs ja "shifting" (wenn man denn das deutsche Wort für "schieben" nicht grade zur Hand hat). Wahlweise kann man dann auch verhunzen zu: shiften schiften schifften Andreas hat damit die Vorletzte Verhunzungs-Stufe erwischt ;-)
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.