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

watch dog Reset in ISR

twoweeks-within 2025. 1. 19. 20:17

 

 

High Reset Vector : 0xFFFF0000  Reset 발생

 

 

system mode (USR)

R14 값 O

R13 : ISR 처리 한 후 > system mode 의 stack 의 시작부분을 가르킴 

 // push 한 부분을 다 pop 했으므로

 

  > 근데 여기서의 R13은 그렇지 않음 

//

system Mode 의 stack 시작은 0x00FEEE730 부터!

 

>>>

ISR 을 처리하다가 HW reset 즉, Watchdog Time out으로 죽었다는걸 유추가능

 

자 그다음, USR 의 R14 : 0x47B1 로 가보면..

 

000047AC|       bl   0x11280

000047B0 |       ldr r0,0x4844

 

0x47B0 으로 들어오기 위해 47AC 에서 R14에 47B1 을 넣었음 // thumb : -1 

 > 이 근처에 Watchdog Time out을 낸 code가 있을텐데 

>>

0x47C4 |                  b  0x47c4

    > 0x47C4에 계속 머물게하는 코드 발견! 

 

47AC에서 bl 할때 47B0 을 LR에 넣어두고 가는데

47C4로 갈때까지 아무도 branch 를 하는곳이 없음 > LR이 보존됨

// 새로 또 branch 를 해야 0x47B0 을 덮어쓸텐데

 

 >>  ISR 을실행하다가 Watchdog가 timeout이 나서 죽어버림

 

 

 

만약.. 이전처럼 SVC 의 LR을 찾아 갔었으면

 

 >뭔가 이상한점을 발견하지 못함 

     > 한참을 헤맸을거야

 

>> system mode의 stack이 처음을 가르키고 있는가를 확인해 보는것도 좋은방법!

                       

'임베디드 > 임베디드 레시피' 카테고리의 다른 글

1장 정리안된부분  (0) 2025.01.20
Excetption , JTAG, ICD (완)  (0) 2025.01.20
0x0 go  (0) 2025.01.19
Abort is ISR - IRQ mode 에서의 Abort  (0) 2025.01.19
Stack corruption  (0) 2025.01.19