임베디드 용어 사전
C 함정

정렬

값이 자기 크기의 배수 주소에 놓여야 한다는 제약. Cortex-M에서 위반하면 폴트가 나거나 느려진다.

alignment. 주소가 타입 크기의 배수여야 한다는 규칙이다.

uint8_t buf[8];
uint32_t *p = (uint32_t *)&buf[1];   // 1번지 — 4의 배수가 아니다
uint32_t v = *p;                     // UsageFault 가능 (UNALIGNED)

Cortex-M 에서의 실제

  • 일부 명령(다중 로드/스토어, 비트밴딩 등)은 정렬되지 않으면 무조건 폴트
  • 일반 로드/스토어는 허용될 수 있으나 느리다
  • SCB->CCR 의 UNALIGN_TRP 비트를 켜면 모든 비정렬 접근을 폴트로 잡아낸다 — 개발 중에 유용하다

자주 나오는 상황

수신 버퍼의 중간을 구조체 포인터로 캐스팅
패킹된 구조체의 멤버 주소를 포인터로 넘김

둘 다 정렬을 깨뜨린다. 바이트 단위로 읽어 조립하면 안전하고 이식성도 얻는다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 임베디드 C 함정 — 컴파일은 되는데 틀린 것들