Abort .. 는 원인찾ㄱ기가 쉬운편
system에 Abort
> Abort Vector 에 break 걸어놓고 기다려보기
> Abort Exception Vector 에 break 걸린상황!
R14 (LR) : Abort 난 곳의 +8 지점을 가르킴
Interrupt : Lock ( I I )
CPSR : Abort mode (abt) // 전전편에서는 (svc)
R14 : 어디에서 왔는지 알려줌 > -8
// 26-8 = 1E
ST : 00EDCF1E | 6008 str r0,[r1] ;return
r1 : 0x FFFFFFFF
r0 : 8
>>
r0 의 값을 r1 이 가르키는 주소에 넣어주려다가 문제가 생긴걸로 보임
>
0xFFFFFFFF는 Memory Map 상에 없음 > 문제발생!
주변을 둘러보니
* HWIO_ADDR = 0x8 ;
// 0xFFFFFFFFFFFF 라는 주소에 0x8 을 넣었음
mov r0, #0x8
// r0 에 0x8 저장 ( 숫자 8 ) ( immdiate value ) > 즉시 값 사용 or 메모리접근,연산 등 수행할 준비
volatile int4 *HWIO_ADDR = (volatile int4 *) 0xFFFFFFFFFFFF;
> 주소 크기 및 위치 불일치
>> 문제 발생
>>
- HWIO_ADDR(0xFFFFFFFFFFFF)에 0x8 저장.
- r0 레지스터에 0x8 저장.
- r1이 가리키는 주소(0xFFFFFFFF)에 r0 값(0x8) 저장
하려는 의도인데
잘못된 주소 크기와 주소 불일치로 Abort 난상황!!
이번에는 Low Vector 에 Abort 걸린상황임
Reset Vector : 0x00000000
Undefined Instr : 0x00000004
Software Interrupt: 0x00000008
Prefetch Abort : 0x0000000C
Data Abort : 0x00000010
IRQ : 0x00000018
FIQ : 0x0000001C
'임베디드 > 임베디드 레시피' 카테고리의 다른 글
Task Lock > Watch Reset, 메모리덤프 보는법 ( stm32 cubeide) (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 |