아마 다들 어릴때 운동회를 했을것입니다.
운동회의 시작은 본부석의 내빈의 인사와 선언으로 시작했을것이고
다치거나 하면 본부석에서 치료를 받았을것이고 문제가 있으면 본부석에서 어떻게 하라고 지시를 받기도 했을것입니다.
가장중요한 상품도 본부석에서 받았겠지요.운동회의 본부석과 같은 역할을 하는것이 Vetor Table 입니다.
Vetor Table은 프로그램이 동작중에 문제가 생겼을때 어떻게 해야 될지를 제일먼저 아는곳이라고 볼 수 있습니다.
왜냐하면 문제가 생기면 이곳으로 Jump를 하게 되어 있기 때문이지요.
본부석은 가장 찾기 좋은 곳에 있어야 합니다. 따라서 Vetor Table은 프로그램의 맨앞에 위치합니다.
Coprocessor에서 위치를 바꿀 수 도 있습니다.

어떤일이 일어나면 Vetor Table로 갈까요?
Reset/Prefetch Abort/Data abort/Undefined Instruction/SWI/IRQ/FIQ 가 있습니다.
Reset
여기가 프로그램의 시작점입니다. Bootload가 Source Code를 올리고 나면 여기로 Jump 해서 시작을 하게 됩니다.
Reset이 되면 ARM의 각 동작모드의 Stack을 초기화 해주고 C언어의 main 함수를 호출해 줍니다.
Hardware적으로 Reset(Watchdog)이 걸리는 경우도 있을 수 있습니다. 또는 전류가 많이 필요한데 모자라는 경우 Reset이 되는경우도 있습니다.Reset이라는 의미는 처음부터 다시 시작한다는 의미입니다. PC(Program Counter)라고 해서 지금 어디를 수행하는지를 알려주는 레지스터가 있습니다. 프로그램이 문제가 생겨서 이 PC를 0으로 설정하는 경우도 있을수 있습니다.
Prefetch Abort/Data Abort
실제로 존재하지 않는 주소를 읽거나 쓰거나 할경우 발생합니다. 또는 Aligned Access가 있는데 이건 Interger 나 Long일경우 마지막번지가 0,4,8,c 로 끝나야 하는데 이외의 번지가 들어오면 발생합니다.왜냐하면 값을읽어오는데 한번에 32bit 값을 읽어와야 하는데 값이 어중간하게 걸쳐있으면 2번읽어와야 하니까요. Cache에서 다음 Code및 Data를 읽어오기 위해 Abort를 사용하는 경우도 있습니다.또는 빠른 Signal 처리를 위해 사용되기도 합니다. Task에 Signal을 보내 처리하는것 보다 Abort를 발생시켜 비상상황을 만들어 처리하는게 훨씬 빠르기 때문입니다.결국 Abort는 원래 비정상적인 경우 발생하게 되지만 정상적인 경우에서도 호출되기도 합니다.
Undefined Instruction
이경우는 CPU가 명령어를 해석을 못할 경우 발생이 됩니다. CODE 영역의 경우 Read Only만 되어야 합니다. 프로그램이 동작중에 이영역에다 Write를 하게 되면 CODE가 변경이 되어 발생하는 경우도 있습니다. 또는 PC(Program Counter)가 Code를 가르키지 않고 엉뚱한곳을 가르키게 되면 문제가 발생할 수 있죠. 또는 Device를 떨어뜨려서 메모리 Line에 금이가거나 또는 기판이 휘어지거나 할때 접촉이 불량해서 제대로 된 CODE를 읽지 못할 경우도 발생할 수 있습니다.
SWI(Software Interrupt)
프로그램에서 의도적으로 Interrupt를 발생해서 처리하려고 할때 사용됩니다.
IRQ(Interrupt Request)
HW Interrupt에 의해 호출됩니다. Interrup Controller에서 Interrupt가 발생되면 IRQ를 호출하게 됩니다. 다음 누가 Interrupt를 호출했는지 검사를 하게 됩니다.
FIQ(Fast Interrupt Request)
Interrupt라는 것은 빠른 처리를 위해서 사용하는것이죠. 이걸 더 빠르게 처리하기 위해 사용합니다.
왜 빠르냐면 FIQ 처리시 레지스터를 적게 백업하고 FIQ가 호출되면 Jump를 하지 않고 처리합니다.
Branch 문은 기본적으로 현재 동작하고 있는 레지스터를 Stack에다 집어넣고 Jump를 하게 되어 있지요
Branch(Jump)가 적을 수록 속도가 빨라지게 됩니다.함수를 호출을 많이 자주하게 되면 속도가 그만큼 느려집니다.
SWI/IRQ/FIQ의 경우 정상적인 동작인 경우이며 Reset/Prefetch Abort/Data Abort/Undefined Instruction의 경우 오류가 발생할때 호출되기 때문에 Exception이라고 이야기 하기도 합니다.
'Microprocessor' 카테고리의 다른 글
Multi Task, Multi Process, Multi Thread (0) | 2023.05.31 |
---|---|
Static RAM & Dynamic RAM (0) | 2023.05.31 |
Scatter loading & ROM Binary (0) | 2023.05.31 |
Nand Flash Boot (0) | 2023.05.31 |
EBI & CS (0) | 2023.05.31 |