Exception Vector Table
- 임베디드 프로그램이 메모리에 바이너리로 로딩될 때 가장 앞번지에 위치하고 있는 테이블
(가끔씩 젤 마지막에 위치하는 수도 있음)
exception 발생시, 각 모드에 맞게 cpu의 PC(program counter)에 exception을 처리하기 위한 주소(exception vector table)가 강제적으로 할당된다.
아래는 excption에 따라 cpu의 PC에 강제적으로 할당되는 EVT의 주소를 나타낸다.
우선순위
------------------------
[3] 0x1C :FIQ
------------------------
[4] 0x18 :IRQ
----------------------------
. 0x14 : (reserved)
----------------------------
[2] 0x10 :Data Abort
----------------------------
[5] 0x0c :Prefetch Abort
----------------------------
[6] 0x08 :Software Interrupt
----------------------------
[6] 0x04 :Undefined Instruction
----------------------------
[1] 0x00 :Reset
----------------------------
이상의 어드레스가 PC에 할당되면 이동된 번지에서는 cpu가 exception에 따라 어떤 처리를 해야할 지를 코딩해주어야한다.
이 때 약간의 주의해야 할 점들이 있다.
Branch Instruction (B, BL, BX, BLX) 은 현재 프로그램 카운터에서 ± 32MB 이내의 범위로 뛰어넘을 수 있다.
그래서, Exception vector table에서 각 테이블들은 LDR과 PC를 사용하여 직접 PC(r15)에 주소값을 넣어주는 편이 좋다. 이때는, 4GB의 범위를 가지게 된다. (long branch)
======>>> 실행을 위한 메모리 내에서의 코딩
0x00000000 : LDR pc,EVT
0x00000004 : LDR pc,EVT + 4
0x00000008 : LDR pc,EVT + 8
0x0000000c : LDR pc,EVT + 12
0x00000010 : LDR pc,EVT + 16
0x00000014 : LDR pc,EVT + 20
0x00000018 : LDR pc,EVT + 24
0x0000001c : LDR pc,EVT + 28
-------------------------------------------------------
참고 :http://blog.naver.com/dreamingduck/5508019
'dev, tech > embedded' 카테고리의 다른 글
CISC & RISC (0) | 2006.07.13 |
---|---|
state change example (0) | 2006.07.13 |
<img src="http://blogimgs.naver.com/nblog/ico_scrap01.gif" class="i_scrap" width="50" height="15" alt="본문스크랩" /> 유용한 사이트 목록 (0) | 2006.07.13 |
BL 사용시의 두가지 방법 (0) | 2006.07.13 |
<img src="http://blogimgs.naver.com/nblog/ico_scrap01.gif" class="i_scrap" width="50" height="15" alt="본문스크랩" /> watchdog timer operation (0) | 2006.07.13 |
댓글