Forum: Mikrocontroller und Digitale Elektronik Variable nach rechts schiften ??


von Andreas (Gast)


Lesenswert?

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???

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

du kannst in C kein >> und == auf eine Struktur anwenden.

Matthias

von Andreas (Gast)


Lesenswert?

und wie  löse ich jetzt  mein problem am besten auf ein short kopieren
und dann operation und wieder zurück kopieren ?

von Andreas (Gast)


Lesenswert?

dann kommt aber incompatible types

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

Das wäre eine Möglichkeit. Eleganter gehts aber mit einer union.

http://www.schellong.de/c.htm#struct

Matthias

von Andreas (Gast)


Lesenswert?

tut mir leid ich finde nichts dort was mir hilft ? kann du mir genauere
Infos geben ?

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

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

von Andreas (Gast)


Lesenswert?

Jetzt hab ichs verstanden weil sich die elemente einer union den
gleichen Speicherplatz teilen ?!

von Andreas (Gast)


Lesenswert?

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;

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

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.

von Wegstabenverbuchsler (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.