struct in for schleife auslesen

OP #1854288
Lesenswert?

Hallo,
ich habe folgende "struct". Diese möchte ich in einer for Schleife bit 
für bit auslesen, um die Daten an ein Schieberegister zu senden.
"" KEIN SPI MODE ""
1
typedef union
2
{
3
    byte _byte;
4
    struct{
5
          unsigned LCD_D0:    1;            //  
6
          unsigned LCD_D1:    1;            //  
7
          unsigned LCD_D2:    1;            //  
8
          unsigned LCD_D3:    1;            //  
9
          unsigned LCD_D4:    1;            //  
10
          unsigned LCD_D5:    1;            //  
11
          unsigned LCD_D6:    1;            //  
12
          unsigned LCD_D7:    1;            //  
13
    };
14
     unsigned char Data;
15
} my_LCD_DATA;                              //Buffer Descriptor Data Register
16
my_lcd_wd_c2704m_1hnn my_LCD_DATA LcdData;
Gruß Siegfried
Moderator (Firma: Titel) Persönliche Seite #1854300
Lesenswert?

Siegfried Saueressig schrieb:
> Diese möchte ich in einer for Schleife bit für bit auslesen,
Geht so einfach über einen Index nicht, weil du ja kein Array von Bits 
definiert hast...

Du kannst ja mal sowas probieren:
1
typedef union
2
{
3
    byte _byte;
4
    struct{
5
          unsigned LCD_D[8]:  1;            //  
6
    };
7
     unsigned char Data;
8
} my_LCD_DATA;                              //Buffer Descriptor Data Register
9
my_lcd_wd_c2704m_1hnn my_LCD_DATA LcdData;
Aber ich bin mir da nicht so sicher, was die Bitreihenfolge angeht... 
:-o

> my_lcd_wd_c2704m_1hnn my_LCD_DATA LcdData;
Das erhält von mir das Attribut: ABSOLUT UNLESERLICH
Wieviele Unterschiede sind in den folgenden Zeichenketten:
 my_lcd_wd_c2704m_1hnn my_LCD_DATA LcdData;
 my_lcd wd_c2704m 1hnn_my_LCD DATA_LcdData;
#1854368
Lesenswert?

Und wie bereits geschrieben, das geht so nicht.

Mach's so wie es alle anderen auch machen:
In einer Schleife aus _byte (oder Data; warum geibt es da eigentlich 2 
mal denselben Member in der union) und einer Maske das jeweils 
interessierenden Bit herausholen. In der Schleife die Maske um jeweils 1 
Stelle nach links (oder rechts; ja nachdem welche Reihengfolge man haben 
will) verschieben und gut ists.

Das ganze ist ein 4 Zeiler. Das lohnt nicht, sich da groß den Kopf zu 
zerbrechen, wie man da unbedingt ein Bitfeld zum Einsatz bringt. 
Manchmal sind die klassischen Verfahren einfach die besten.

Wer die klassiche Schreibweise zur Extraktion einen Bits beherrscht
* hat keine Schwierigkeiten durch unerwarteten Overhead beim
  bitweisen Zugriff in ein Byte, der bei Bitfeldern durch die Syntax
  verschleiert wird.
* weiß sich in allen Lebenslagen zu helfen.
Moderator (Firma: Titel) Persönliche Seite #1854381
Lesenswert?

Karl heinz Buchegger schrieb:
> Wer die klassiche Schreibweise zur Extraktion einen Bits beherrscht
> * hat keine Schwierigkeiten durch unerwarteten Overhead beim
>   bitweisen Zugriff in ein Byte, der bei Bitfeldern durch die Syntax
>   verschleiert wird.
Das ist auch der Grund, warum ich nach einem kurzen Blick auf diese 
C-Syntaxelemente solche Bitfelder gleich wieder aus meinem Repertoire 
entfernt habe.
> * weiß sich in allen Lebenslagen zu helfen.
Und kommt in einige nicht, aus denen er kein Entkommen mehr findet (z.B. 
ein 16-Bit Feld, das zwischen einem Little- und einem 
Big-Endian-Prozessor ausgetauscht wird...)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren