임베디드 시스템과 펌웨어

C 언어의 비트 필드를 사용한 구조체로 주변 회로의 레지스터를 나타낼 때 주의가 필요한 점으로 올바른 것은 무엇입니까?

  1. A비트 필드를 사용하면 프로그램이 반드시 2배 빨라진다
  2. B비트 필드의 비트 배열 순서 등은 컴파일러마다 달라도 되므로, 다른 컴파일러에서는 의도와 다른 비트를 조작하는 경우가 있다
  3. C비트 필드는 8비트 이상의 값을 나타낼 수 없다
정답과 해설 보기

정답: B. 비트 필드의 비트 배열 순서 등은 컴파일러마다 달라도 되므로, 다른 컴파일러에서는 의도와 다른 비트를 조작하는 경우가 있다

비트 필드는 읽기 쉽게 쓸 수 있지만, C 언어 규격에서는 구조체 안에서 비트를 상위부터 배열할지 하위부터 배열할지, 필드가 경계를 넘을 때의 취급, 접근 폭 등이 처리계에 맡겨져 있습니다. 그래서 어떤 컴파일러에서 올바르게 동작해도 다른 컴파일러나 CPU에서는 다른 비트를 읽고 쓸 수 있습니다. 마이크로컨트롤러 제조사가 제공하는 헤더는 마스크와 시프트로 작성된 경우가 많습니다.

이 분야 연습하기 분야로 돌아가기

임베디드 시스템과 펌웨어의 다른 문제

  1. 많은 마이크로컨트롤러에서 변경하지 않는 큰 테이블(폰트 데이터 등)을 const를 붙여 선언하는 이점으로 올바른 것은 무엇입니까?
  2. JTAG나 SWD 같은 디버그용 인터페이스로 할 수 있는 것으로 올바른 것은 무엇입니까?
  3. 1 ms마다 일정한 제어 계산을 하고 싶습니다. OS를 사용하지 않는 마이크로컨트롤러에서의 구현으로 가장 적절한 것은 무엇입니까?
  4. 마이크로컨트롤러의 브라운아웃 검출(BOD, 브라운아웃 리셋)의 역할로 올바른 것은 무엇입니까?
  5. 인터럽트에 우선순위를 줄 수 있는 마이크로컨트롤러에서, 우선순위가 낮은 인터럽트의 핸들러를 실행 중에 우선순위가 높은 인터럽트가 발생했습니다. 일반적으로 어떻게 됩니까? (인터럽트 중첩을 허용하는 설정으로 가정)

이 분야의 비교