2016-12-20 5 views
1

in C, wenn wir eine Struktur haben alsLese/Schreib-Bit aus einer Struktur

struct PortBreg { 
unsigned int B0 :1; 
unsigned int B1 :1; 
unsigned int B2 :1; 
unsigned int B3 :1; 
unsigned int B4 :1; 
unsigned int B5 :1; 
unsigned int B6 :1; 
unsigned int B7 :1; 
}; 

#define Breg (*(volatile struct PortBreg *)(0x38)), 

definiert Wenn ich von Port B-Bit B3 lesen Wert wollen und schreiben Wert auf Bit B2 Port B, kann ich tun, wie

int i=Breg.B3;  //to read 
Breg.B2=i;   //to write ? 

Antwort

0

sich verlassen können, wenn der Port lesbar und beschreibbar ist, aber für einen einfachen Variable dieser Code funktioniert: Kopieren B3 auf B2. Bitte stimmen Sie mit Ihren Typen überein, int i ist nicht unsigned int i. Beachten Sie auch, dass ich jedes Mitglied in der üblichen Reihenfolge drucke, aber die Strukturdefinition eines tatsächlichen Portlesens muss möglicherweise umgekehrt werden, so dass B7 zuerst ist.

#include <stdio.h> 

struct PortBreg { 
    unsigned int B0 :1; 
    unsigned int B1 :1; 
    unsigned int B2 :1; 
    unsigned int B3 :1; 
    unsigned int B4 :1; 
    unsigned int B5 :1; 
    unsigned int B6 :1; 
    unsigned int B7 :1; 
}; 

void show(struct PortBreg Qreg) 
// bit order MSB -> LSB 
{ 
    printf("%u%u%u%u%u%u%u%u\n", 
     Qreg.B7, Qreg.B6, Qreg.B5, Qreg.B4, Qreg.B3, Qreg.B2, Qreg.B1, Qreg.B0); 
} 

int main(void) 
{ 
    struct PortBreg Breg = {0, 0, 0, 1,}; 
    unsigned i; 
    show(Breg); 
    i = Breg.B3; 
    Breg.B2 = i; 
    show(Breg); 
    return 0; 
} 

Programmausgabe:

 
00001000 
00001100 
0

Nicht immer. Wenn der Port speicherplatziert ist, kann der einfache Vorgang des Lesens und Schreibens auf das rechte Bit von C ausreichen, um ein Signal an den Leitungen auszulösen. Aber Sie müssen vielleicht andere Dinge tun. Oft müssen Sie Interrupts deaktivieren. Und das Lesen löscht oft auch den Port, oft muss man ein bisschen testen, um zu sehen, ob Daten da sind, dann lesen und löschen.

Sie müssen sich also die Hardware-Dokumentation ansehen. Im Prinzip wird der Port durch Schreiben in Bits gesteuert, als ob sie jedoch reiner Speicher wären.

Verwandte Themen