bit-banding. 비트 하나를 워드 하나처럼 다루게 해 주는 주소 별칭이다.
무엇이 문제였나
GPIOA->ODR |= (1u << 5); // 읽고 → 고치고 → 쓴다 (3단계)
이 세 단계 사이에 인터럽트가 끼어들어 같은 레지스터를 건드리면 한쪽 수정이 사라진다.
비트밴딩의 해법
SRAM 과 주변장치 영역의 앞 1MB 는 각 비트가 별칭 영역의 워드 하나에 대응한다. 그 주소에 0 또는 1 을 쓰면 해당 비트만 바뀐다.
별칭 주소 = 별칭 베이스 + (바이트 오프셋 × 32) + (비트 번호 × 4)
쓰기 한 번이라 중간에 끼어들 틈이 없다.
주의
- Cortex-M3/M4 계열의 기능이고 모든 칩에 있는 것은 아니다(M0+ 에는 없다)
- 요즘은 GPIO 의 전용 set/reset 레지스터(BSRR 등)를 쓰는 쪽이 더 흔하다 — 같은 효과를 더 단순하게 얻는다