임베디드 시스템과 펌웨어
C 언어의 비트 필드를 사용한 구조체로 주변 회로의 레지스터를 나타낼 때 주의가 필요한 점으로 올바른 것은 무엇입니까?
- A비트 필드를 사용하면 프로그램이 반드시 2배 빨라진다
- B비트 필드의 비트 배열 순서 등은 컴파일러마다 달라도 되므로, 다른 컴파일러에서는 의도와 다른 비트를 조작하는 경우가 있다
- C비트 필드는 8비트 이상의 값을 나타낼 수 없다
정답과 해설 보기
정답: B. 비트 필드의 비트 배열 순서 등은 컴파일러마다 달라도 되므로, 다른 컴파일러에서는 의도와 다른 비트를 조작하는 경우가 있다
비트 필드는 읽기 쉽게 쓸 수 있지만, C 언어 규격에서는 구조체 안에서 비트를 상위부터 배열할지 하위부터 배열할지, 필드가 경계를 넘을 때의 취급, 접근 폭 등이 처리계에 맡겨져 있습니다. 그래서 어떤 컴파일러에서 올바르게 동작해도 다른 컴파일러나 CPU에서는 다른 비트를 읽고 쓸 수 있습니다. 마이크로컨트롤러 제조사가 제공하는 헤더는 마스크와 시프트로 작성된 경우가 많습니다.