임베디드/임베디드 레시피

Task Lock > Watch Reset, 메모리덤프 보는법 ( stm32 cubeide)

twoweeks-within 2025. 1. 18. 15:51

 

 

 

 

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에서 메모리 뷰 확인 방법

  1. 디버깅 모드 시작
    • 프로젝트를 빌드한 후, 디버깅 모드(Debug)로 실행합니다.
    • 디버깅 버튼을 눌러 MCU의 디버깅 인터페이스에 연결하세요.
  2. 메모리 뷰 활성화
    • 디버깅 모드에서 상단 메뉴에서 Window > Show View > Memory를 선택합니다.
    • 또는 메모리 뷰가 열리지 않은 경우, 디버깅 모드의 하단 탭에서 Memory 탭을 클릭합니다.
  3. 메모리 주소 설정
    • 메모리 뷰에서 관심 있는 메모리 주소를 입력합니다.
    • 예를 들어, 0x0116FD30와 같은 주소를 입력하면 해당 메모리 영역의 내용을 확인할 수 있습니다.
  4. 데이터 형식 설정
    • 메모리 데이터를 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