Typedef struct -> Portzuweisung

Gast #1852898
Lesenswert?

Hallo,

ich verwende den Mikroeletronica MikroC 8.1 Compiler. Um mir meine 
Arbeit etwas zu erleichtern wollte ich mir eine Struktur definieren die 
8Bit breit ist und die ich dann den Port direkt zuweißen kann. Aber das 
ganze funktioniert irgendwie nicht so wirklich. Bei der Portzuweisung 
bekomme ich die Fehlermeldung "Cannot Assign" zurück
1
 //Datentypdefinitionen
2
 typedef struct   //definiert eigenen Datentyp->niederwertigstes Bit wird zuerst
3
  {               //kodiert
4
   unsigned char       FS_G2 : 1;     //Bit0 am Port -> Fahrstrom Gleis 2
5
   unsigned char       FS_G1 : 1;     //Bit1 -> Fahrstrom Gleis 1
6
   unsigned char       FS_G3 : 1;     //Bit2 -> Fahrstrom Gleis 3
7
   unsigned char       FS_G4 : 1;     //Bit3 -> Fahrstrom Gleis 1
8
   unsigned char       W1    : 1;     //Bit4 -> Weiche 1
9
   unsigned char       W2    : 1;     //Bit5 -> Weiche 2
10
   unsigned char       FS_D  : 1;     //Bit6 -> Fahrtrichtung
11
   unsigned char       FS_On : 1;     //Bit7 -> Anschalten des Fahrstromes
12
  } control_bitfield;
13

14
 control_bitfield port_config;       //legt Variable mit eigenen Datentyp an
15

16
 portb=port_config;  //An dieser stelle stellt der Compiler dann die arbeit ein


Was könnte ich ändern damit das ganze funktioniert??


Vielen Dank für eure Hilfe!



mit freundlichen Grüßen

Andreas
Gast #1852911
Lesenswert?

Das was der Compiler anmeckert ist ganz richtig.
Du versuchst einem int typ (char) ein struct zuzuweisen.
Das paßt nicht.
Aber es geht doch, so:

Definiere eine union aus deinem Struct
und einem (gleich großen) char Element.
Dieses kannst Du dann mit dem Inhalt deines Bitfeldes zuweisen.

Sieht etwa so aus:

typedef struct   //definiert eigenen Datentyp->niederwertigstes Bit wird 
zuerst
  {               //kodiert
   unsigned char       FS_G2 : 1;     //Bit0 am Port -> Fahrstrom Gleis 
2
   unsigned char       FS_G1 : 1;     //Bit1 -> Fahrstrom Gleis 1
   unsigned char       FS_G3 : 1;     //Bit2 -> Fahrstrom Gleis 3
   unsigned char       FS_G4 : 1;     //Bit3 -> Fahrstrom Gleis 1
   unsigned char       W1    : 1;     //Bit4 -> Weiche 1
   unsigned char       W2    : 1;     //Bit5 -> Weiche 2
   unsigned char       FS_D  : 1;     //Bit6 -> Fahrtrichtung
   unsigned char       FS_On : 1;     //Bit7 -> Anschalten des 
Fahrstromes
  } control_bitfield;

 union u
 {
     control_bitfield port_config;       //legt Variable mit eigenen
     unsigned char allebits;
 } bits;

 bits.port_config.FS_G2 = 1;   // ein bit setzen

 portb = bits.allebits;        // Wert aller bits zuweisen


 (habe den Code nicht durch einen Compiler gedreht, es sollte jedoch 
klar
  werden wie man das machen kann)

Gruß
Hans

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