임베디드 면접 용어 사전
자동차 MCU 실습BFAR

CFSR

Cortex-M의 폴트 원인 레지스터. HardFault가 났을 때 어떤 종류의 오류였는지 비트로 알려 준다.

Configurable Fault Status Register (0xE000ED28). HardFault 를 추측이 아니라 근거로 잡는 출발점이다.

세 부분으로 나뉜다

MMFSR  메모리 관리 폴트   MPU 위반, 실행 불가 영역 실행
BFSR   버스 폴트         존재하지 않는 주소 접근, 정밀·비정밀 구분
UFSR   사용 폴트         정렬 위반(UNALIGNED), 0 나눗셈, 잘못된 상태

함께 보는 레지스터가 더 있다.

레지스터내용
HFSRHardFault로 승격됐는지(FORCED)
MMFAR / BFAR문제가 된 주소

실전 절차

void HardFault_Handler(void) {
    volatile uint32_t cfsr = SCB->CFSR;
    volatile uint32_t bfar = SCB->BFAR;
    for (;;) { }        /* 디버거로 멈춰 값을 본다 */
}
1. CFSR 에서 어떤 종류인지 확인      (예: UNALIGNED 비트)
2. BFAR/MMFAR 로 문제의 주소 확인    (예: 0x00000003 → 널 포인터 근처)
3. 스택 프레임에서 원래 PC 를 꺼낸다  (예외 진입 시 R0-R3, R12, LR, PC, xPSR 이 쌓인다)
4. PC 를 맵 파일과 대조해 함수를 특정한다

왜 이걸 해두면 좋은가

"디버깅 어떻게 하세요"는 거의 반드시 나오는 질문이다. 일부러 폴트를 내고 원인을 역추적해 본 경험은 이 질문의 완성된 답이 된다. 평소에 로그로만 디버깅한 지원자와 확실히 갈린다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — S32K144 실습 — 쿡북(AN5413)·초음파 입력캡처·CAN·HardFault 추적