JTAG 연결 불안정과 레지스터 값 불일치 디버깅
Visual Studio에서 ARM 기반 SOC 디버깅을 할 때 JTAG 연결이 불안정하게 끊기는 문제를 겪었습니다. 처음엔 드라이버 설치 문제로 봤는데, 확인해보니 GDB 서버 버전과 OpenOCD 버전이 맞지 않아서 세션이 중간에 끊겼습니다. 버전을 맞추고 나서 안정됐습니다. 두 번째로 어려웠던 건 레지스터 값이 코드 예상과 다르게 나오는 케이스였습니다.
메모리 맵을 직접 열어서 주소 오프셋이 데이터시트와 맞는지 대조했고, 비트 필드 설정이 잘못됐다는 걸 발견했습니다. 디버거가 멈추는 지점에서 레지스터를 읽는 것이 가장 직접적인 확인 방법이라는 걸 배웠습니다. 임베디드 디버깅은 소프트웨어만 보지 않고 하드웨어 스펙과 같이 봐야 한다는 게 핵심이라고 생각합니다.