www.mikrocontroller.net

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


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Matthias

Autor: Andreas (Gast)
Datum:

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

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann kommt aber incompatible types

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

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

Matthias

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tut mir leid ich finde nichts dort was mir hilft ? kann du mir genauere
Infos geben ?

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

so etwa:

union mbu_u
{
    manchester_bitfield bf;
    uint16_t sca;
} mbu;

mbu.sca = mbu.sca >> 1;

if(mbu.sca == START) ...


Matthias

Autor: Andreas (Gast)
Datum:

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

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wegstabenverbuchsler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.