임베디드 시스템과 펌웨어

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

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

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

'1 << 3'은 2진수로 00001000이며 비트 3만 1인 값(마스크)입니다. 이것과 레지스터 값을 OR(|)로 합치면 비트 3은 반드시 1이 되고 나머지 비트는 원래 값 그대로 남습니다. 대입(=)을 쓰면 다른 비트까지 0으로 덮어써서 주변 회로의 다른 설정을 망가뜨립니다. 비트 번호는 최하위를 0으로 하여 셉니다.

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

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

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

이 분야의 비교