임베디드 시스템과 펌웨어

C 언어에서 레지스터 reg의 비트 3만 0으로 만들고 나머지 비트는 바꾸지 않는 올바른 표기는 무엇입니까?

  1. Areg &= ~(1 << 3);
  2. Breg |= ~(1 << 3);
  3. Creg &= (1 << 3);
정답과 해설 보기

정답: A. reg &= ~(1 << 3);

'~(1 << 3)'은 비트 3만 0이고 나머지는 모두 1인 값입니다. 이것과 AND(&)를 취하면 비트 3은 반드시 0이 되고, 나머지 비트는 1과의 AND이므로 원래 값 그대로 남습니다. 비트를 세우는 OR, 내리는 AND NOT, 반전시키는 XOR(^), 검사하는 AND의 네 가지는 펌웨어에서 레지스터를 조작할 때의 기본 형태입니다.

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

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

  1. LED를 연결한 출력 핀의 비트를 실행할 때마다 점등과 소등으로 번갈아 바꾸고 싶습니다. 올바른 C 언어 표기는 무엇입니까?
  2. 입력용 레지스터 in의 비트 5가 1인지 검사하는 올바른 C 언어 조건은 무엇입니까?
  3. 위의 코드는 레지스터 reg의 여러 비트로 이루어진 설정 필드를 바꿔 쓰고 있습니다. 무엇을 하고 있습니까?
  4. 메인 처리에서 레지스터 비트를 'reg |= mask;'(읽기-수정-쓰기)로 조작하는 도중에 인터럽트 핸들러가 같은 레지스터의 다른 비트를 바꾸면 발생할 수 있는 문제와 대책의 조합으로 올바른 것은 무엇입니까?
  5. 마이크로컨트롤러의 입력 핀에 스위치만 연결하고 풀업이나 풀다운 저항을 달지 않았습니다. 스위치가 열려 있을 때 일어날 수 있는 일은 무엇입니까?

이 분야의 비교