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 |