Forum: Mikrocontroller und Digitale Elektronik union werte auslesen


von µC-nob (Gast)


Lesenswert?

Hi,
ich hab mir eine union definiert, und möchte jetzt dessen Werte 
auslesen.
1
typedef struct
2
{
3
  unsigned Pin2     : 1;  
4
  unsigned Pin4     : 1;  
5
  unsigned Pin5     : 1;  
6
  unsigned Pin6     : 1;  
7
  unsigned Pin7     : 1;  
8
  unsigned Pin8     : 1;  
9
  unsigned InEnable  : 1;  
10
  unsigned dummy1   : 1;  
11
} tNPZugriff;
12
13
union 
14
{
15
  char Data;
16
  tNPZugriff Val;
17
} NPStruct;

Auslesen wollte ich das so:
1
if ((NPStruct.Data & 0x01 ) == 1) //Pin2
2
if ((NPStruct.Data & 0x02 ) == 1) //Pin4
3
if ((NPStruct.Data & 0x04 ) == 1) //Pin5

ich dachte jede meine Variablen hätte eine bitposition

--> Pin2 = 2^0
--> Pin4 = 2^1
--> Pin5 = 2^2 usw...

ist aber wohl nicht so??
Klappt nähmlich nicht, wies ich oben machen wollte??

Wie kann ich in so einem Fall sie Variablen richtig auslesen??


Danke

Gruß

von Niels H. (monarch35)


Lesenswert?

µC-nob wrote:
> ist aber wohl nicht so??
> Klappt nähmlich nicht, wies ich oben machen wollte??

Mit Verlaub, aber "Klappt nicht" ist ne absolut besch*ssene 
Problembeschreibung.

von Johannes M. (johnny-m)


Lesenswert?

> unsigned Pin2     : 1;
unsigned was ?

Abgesehen davon ist es nicht vorgeschrieben, in welcher Reihenfolge bei 
einem Bitfeld die Elemente abgelegt werden. Der AVR-GCC legt z.B. das 
erste Element an der niedrigstwertigen Position ab, aber wie andere 
Compiler das machen, steht quasi in den Sternen.

von Wolfgang Horn (Gast)


Lesenswert?

Hi,  µC-nob,

Das Geschreibene erscheint mir nicht falsch.

Zur hinreichenden Anamnese fehlt mir noch:
1. wie ist "unsigned" definiert? Es müßte "unsigned char" heißen.
2. mit welchen Befehlen steuerst Du den Port an,
3. mit welchen Befehlen liest Du ihn aus.


ciao
Wolfgang Horn

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.