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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.