PC : High Vector
리셋이 나자마자의 상황 : 즉, R14 : 1323 - 1 = 1322
R14의 위치
00001322 | BD80 pop {r7,pc}
// 스택에서 2개를 빼내어 r7, pc 로 pop
0000131E| FFAFF00F bl 0x11280 ; Interrupt_Free
>
R14 : 0x11280 갔다가 돌아올자리
PC의위치
: Interrupt_Free 내부 or R14가 위치하고있는 함수 내부
> SP (R13) 참고
SP (R13) : 0x0116FD3C
0x00000000 을 가르킴 > 근방에서 문제가 발생했을거임
ST : 00001322 | BD80 pop {r7,pc} 을 실행하자마자 라고 한다면,,,
: sp는 2개가 더해짐 ( FDstack )
> sp : r7
> sp +4 : PC
// 2개가 위로 올라감 아래에서부터
>
원래 실행되던 함수를 호출한곳 ( 즉,PC ) : 0x00EDCEB1 - 1
0xEDCEB0 이 자기 자신에게 무한 branch ( while문)
> Interrupt lock 이 되었나?
>> 맞음 사진(2)
>>> Interrupt Lock 걸린 상태에서 무한 loop 만남
>>>> Watchdog Timeout HW reset 걸린상태
사실은 이것도 Pc가 High Vector 0xFFFF0000 에걸려서 watchdog timeout 의심해볼만함
//
STM32CubeIDE에서도 메모리 덤프를 확인할 수 있습니다. 위 이미지에 있는 것과 같은 메모리의 값을 확인하려면 다음 단계를 따르면 됩니다:
STM32CubeIDE에서 메모리 뷰 확인 방법
- 디버깅 모드 시작
- 프로젝트를 빌드한 후, 디버깅 모드(Debug)로 실행합니다.
- 디버깅 버튼을 눌러 MCU의 디버깅 인터페이스에 연결하세요.
- 메모리 뷰 활성화
- 디버깅 모드에서 상단 메뉴에서 Window > Show View > Memory를 선택합니다.
- 또는 메모리 뷰가 열리지 않은 경우, 디버깅 모드의 하단 탭에서 Memory 탭을 클릭합니다.
- 메모리 주소 설정
- 메모리 뷰에서 관심 있는 메모리 주소를 입력합니다.
- 예를 들어, 0x0116FD30와 같은 주소를 입력하면 해당 메모리 영역의 내용을 확인할 수 있습니다.
- 데이터 형식 설정
- 메모리 데이터를 8비트, 16비트, 32비트로 볼 수 있으며, ASCII 값으로도 표시할 수 있습니다.
- 원하는 데이터 형식으로 설정하려면 메모리 뷰 우측 상단의 설정 버튼을 클릭하세요.
STM32CubeIDE는 디버깅 중 실시간으로 메모리 데이터를 확인할 수 있기 때문에, 위와 같은 메모리 덤프를 분석하거나 디버깅 시 유용하게 사용할 수 있습니다.
'임베디드 > 임베디드 레시피' 카테고리의 다른 글
Data Abort (0) | 2025.01.18 |
---|---|
Interrupt Lock > Watch dog Reset (0) | 2025.01.17 |
Art of Debugging (0) | 2025.01.17 |
JTAG interface (0) | 2025.01.17 |
MMU : Memory Management Unit ( 다시보기) (0) | 2025.01.16 |