임베디드 시스템과 펌웨어

입력용 레지스터 in의 비트 5가 1인지 검사하는 올바른 C 언어 조건은 무엇입니까?

  1. Aif (in | (1 << 5))
  2. Bif (in == 5)
  3. Cif (in & (1 << 5))
정답과 해설 보기

정답: C. if (in & (1 << 5))

'in & (1 << 5)'는 비트 5 이외를 모두 0으로 만든 값이 되므로, 비트 5가 1이면 32(0이 아니므로 참), 0이면 0(거짓)이 됩니다. C 언어에서는 0이 아닌 값이 참이므로 그대로 if문의 조건으로 쓸 수 있습니다. 결과를 1 또는 0으로 얻고 싶으면 '(in >> 5) & 1'로 씁니다. OR을 쓰면 결과가 항상 0이 아니게 되어 검사가 되지 않습니다.

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

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

  1. 위의 코드는 레지스터 reg의 여러 비트로 이루어진 설정 필드를 바꿔 쓰고 있습니다. 무엇을 하고 있습니까?
  2. 메인 처리에서 레지스터 비트를 'reg |= mask;'(읽기-수정-쓰기)로 조작하는 도중에 인터럽트 핸들러가 같은 레지스터의 다른 비트를 바꾸면 발생할 수 있는 문제와 대책의 조합으로 올바른 것은 무엇입니까?
  3. 마이크로컨트롤러의 입력 핀에 스위치만 연결하고 풀업이나 풀다운 저항을 달지 않았습니다. 스위치가 열려 있을 때 일어날 수 있는 일은 무엇입니까?
  4. 마이크로컨트롤러의 GPIO(범용 입출력) 핀을 사용할 때 가장 먼저 설정해야 하는 것으로 올바른 것은 무엇입니까?
  5. 기계식 스위치를 눌렀을 때 접점이 잘게 튀어 짧은 시간에 여러 번 온과 오프를 반복하는 현상을 무엇이라고 합니까?

이 분야의 비교