|
struct parallel {
unsigned char pin0: 1;
unsigned char pin1: 1;
unsigned char pin2: 1;
unsigned char pin3: 1;
unsigned char pin4: 1;
unsigned char pin5: 1;
unsigned char pin6: 1;
unsigned char pin7: 1;
unsigned char : 8;
};
위와 같이 비트필드를 구성했습니다.
struct parallel p; 라고 선언해주고
p를 outportb의 인자로 넣고 싶어서
outportb(0x378, (unsigned char)p)
이렇게 했더니 에러가 났습니다.
비트필드도 구조체인데 아무생각없이 int형 처럼 생각했던게 잘못이었습니다.
궁여지책으로 만든 cast가 아래와 같습니다.
unsigned char cast(struct parallel p) {
unsigned char data = 0;
data = p.pin0;
data += p.pin1 << 1;
data += p.pin2 << 2;
data += p.pin3 << 3;
data += p.pin4 << 4;
data += p.pin5 << 5;
data += p.pin6 << 6;
data += p.pin7 << 7;
return data;
}
C 자체에서 제공해주는 방법을 가르쳐주시면 감사하겠습니다.
그리고 비트필드는 어떤 곳에서 많이 사용하시고 계신지요...?
|