임베디드 용어 사전
디버깅

CFSR

어떤 종류의 폴트가 왜 났는지 비트로 알려 주는 레지스터. 폴트 분석의 출발점이다.

Configurable Fault Status Register (0xE000ED28). 추측 대신 증거로 원인을 좁힌다.

세 부분으로 나뉜다
  MMFSR  메모리 관리 폴트   MPU 위반 · 실행 불가 영역
  BFSR   버스 폴트         정밀/비정밀 구분 · 스태킹 중 오류
  UFSR   사용 폴트         UNALIGNED · DIVBYZERO · 정의되지 않은 명령

함께 보는 것

HFSR   HardFault 로 승격됐는지 (FORCED 비트)
MMFAR  메모리 폴트가 난 주소
BFAR   버스 폴트가 난 주소     ← 유효 비트가 서 있을 때만 신뢰한다

읽는 순서

1. CFSR 에서 종류 확인          예: UNALIGNED 비트
2. BFAR/MMFAR 로 문제 주소 확인   예: 0x00000003 → 널 포인터 근처
3. 스택 프레임에서 PC 를 꺼낸다
4. 맵 파일이나 addr2line 으로 함수·줄 번호 특정

비정밀 버스 폴트

쓰기가 버퍼링돼 폴트가 늦게 도착하면 주소가 유효하지 않다. 그럴 때는 SCB->CCR 의 쓰기 버퍼 비활성화 비트를 켜서 재현하면 정확한 위치가 잡힌다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 폴트 해독 — HardFault 에서 원인을 찾아내기