임베디드 용어 사전
기초·메모리

마스크

원하는 비트만 골라 건드리기 위해 만드는 비트 패턴. 설정·해제·토글·검사의 기본 도구다.

레지스터는 비트마다 의미가 다르므로 옆 비트를 건드리지 않는 것이 전부다.

REG |=  (1u << n);          // 설정
REG &= ~(1u << n);          // 해제
REG ^=  (1u << n);          // 토글
if (REG & (1u << n)) { }    // 검사

여러 비트짜리 필드는 두 단계

REG = (REG & ~(0x3u << 4)) | (0x2u << 4);   // 4~5번 비트를 0b10 으로
       └ 지우고 ┘             └ 넣는다 ┘

지우지 않고 |= 만 하면 이전 값과 OR 되어 엉뚱한 값이 된다. 초보가 가장 자주 하는 실수다.

관용구

#define MASK(hi, lo)  (((1u << ((hi) - (lo) + 1)) - 1) << (lo))

1 << n 에서 1int31비트를 넘기면 미정의 동작이다. 32비트 레지스터를 다룰 때는 1u 로 쓰는 습관이 필요하다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 비트 조작 — 레지스터를 정확히 건드리는 법