예전에도 비슷한 글을 쓴 적이 있는데. 기억 안 나니 넘어나고 -_-;
ARM에서 일반적인 익셉션 핸들러는 다음과 같다.
0x00 리셋
0x04 Undef.
0x08 슈퍼바이저
0x0C 프리패치 어보트
0x10 데이터 어보트
0x14 예비
0x18 IRQ
0x1C FIQ
익셉션이 발생하면 하드 와이어드 물리적으로 저 주소로 뛴다. 저 주소에 공간이 따로 없으므로 핸들러는 다음과 같이 실제 처리할 곳으로 점프한다.
LDR PC, Reset_Addr
LDR PC, Undefined_Addr
LDR PC, SWI_Addr
LDR PC, Prefetch_Addr
LDR PC, Abort_Addr
NOP
LDR PC, [PC,#-0xF20]
LDR PC, [PC,#-0xF20]
IRQ, FIQ에 이상한 주소를 쓴 이유는 일부 ARM7이 지원하는 인터럽트 벡터 테이블과 관계있다. 마이컴과 비슷한 이념으로 설계된 칩에서는 하드 와이어드하게 인터럽트 벡터 테이블을 쓰도록 되어있다. 표준 ARM이라면 핸들러 주소 레이블이 들어갈 것이다.
. . . .
요구사항은 다음과 같다.
. . .
솔루션 (XIP 의 경우)
솔루션 (램 복사 실행의 경우)
부트로더 단계의 무한 리부팅을 지원해야 하는 경우
해결 : 모든 예외 핸들러를 리셋으로 붙여서 빌드하는 버전을 만든다.
램 복사 부트로더의 예외 핸들러
뭔 소리야 -_-; 그림 그리기는 귀찮고 설명은 불친절하니 전혀 도움이 안 되는 글이 되었음