현재 PIC 마이크로 컨트롤러 용 코드를 작성하고 있으며 코드 일부에 "상태 카운터"로 uint8_t
을 사용하여 일부 코드를 구조화하고 싶습니다. 여기에는 많은 비트 연산이 포함됩니다. 내가 뭘하고 싶은건이 헤더에있는 SFR 비트 구조체에 비슷한 맥락 에서이 uint8_t
에 대한 구조체를 만드는 것입니다, 내가 아래에 사용하고있는 헤더 파일에서 하나의 예제가 포함되어 있습니다.구조체의 구성원으로 uint8_t의 주소 비트
헤더 파일을 사용하면 구조체 내의 요소에 액세스하는 것과 비슷한 표기법 (예 : U1STAbits.UTXBF
및 uint16_t
)을 사용하여 SFR 내의 비트에 액세스 할 수 있습니다. 이것은 내가 허용 할 수있는대로 코드에서 구현하고 싶습니다. 스위치 문을 내 코드의 주요 구조로 사용하십시오.
#define U1STA U1STA
extern volatile unsigned int U1STA __attribute__((__sfr__));
__extension__ typedef struct tagU1STABITS {
union {
struct {
unsigned URXDA:1;
unsigned OERR:1;
unsigned FERR:1;
unsigned PERR:1;
unsigned RIDLE:1;
unsigned ADDEN:1;
unsigned URXISEL:2;
unsigned TRMT:1;
unsigned UTXBF:1;
unsigned UTXEN:1;
unsigned UTXBRK:1;
unsigned :1;
unsigned UTXISEL0:1;
unsigned UTXINV:1;
unsigned UTXISEL1:1;
};
struct {
unsigned :6;
unsigned URXISEL0:1;
unsigned URXISEL1:1;
};
};
} U1STABITS;
extern volatile U1STABITS U1STAbits __attribute__((__sfr__));
업데이트 : 비트 필드 구조체와 내가 수행하는 숫자로 비트 필드에 액세스 할 수 오전 uint8_t 사이에 노동 조합을 정의함으로써
typedef struct {
union {
struct{
unsigned breakDetected :1;
unsigned overrunError :1;
unsigned framingError :1;
unsigned startDetected :1;
unsigned dmxMode :1;
unsigned rdmMode :1;
};
uint8_t UartFlags;
};
} UartFlagsBits;
UartFlagsBits uartFlags;
이것을 비트 필드라고합니다. 그리고 당신의 질문은 무엇입니까? –
거의 모든 최신 CPU의 주소 지정 가능한 최소 단위는 바이트입니다. 표시하는 것과 같은 비트 필드는 개별 비트를 가져 오거나 설정하는 데 필요한 코드를 생성하는 컴파일러에서 처리합니다. –
비슷한 방법으로 비트 필드를 선언한다면 uint8_t로도 액세스 할 수 있습니까? – RobbG