앞선 포스트로 Exception Type과 Priority 설정에 대해서 알아봤고
이번에는 Exception이 처리되는, Handling 과정에 대해 살펴보도록 하겠습니다.


- Exception States

Exception Handling에 대해서 살펴보기 전에 Exception State에 대해서 먼저 살펴봅시다.

Exception State에는 Active, Inactive, Pending, Active and Pending, 총 4가지의 State가 존재합니다.

 

1. Active State

Processor가 Interrupt를 처리하는 상황이에요. 즉, Interrupt Service Routine이 진행 중인 상황입니다.

 

2. Inactive State

Active State, Pending State가 아닌 State를 의미합니다.

 

3. Pending State

Interrupt가 Process기다리는 State입니다. 

상황으로 보자면 Interrupt가 발생했을 때 바로 Interrupt Service Routine으로 진입하지 않아요.

기존에 하던 작업을 나중에 Interrupt를 처리하고 복구해야하기 때문에
Interrupt Service Routine으로 들어가기 전에 기존에 하던 작업들의 정보를 Stack에 저장하는 등의 과정을 거칩니다.

따라서 Interrupt가 발생했을 때에는 Active State가 아닌 Pending State가 되게 됩니다.

 

4. Active and Pending State

이름을 보면 Active State와 Pending State가 공존하는 State입니다.

예를 들어 우선순위가 높은 Interrupt를 처리하는데 우선순위가 낮은 Interrupt가 발생하게 되면
Processor는 우선순위가 높은 Interrupt를 처리하고 있으니 Active인데
동시에 우선순위가 낮은 Interrupt는 대기중이니 Pending 이기도 하죠.

이런 상황이 Active and Pending State입니다.


- Exception Handling

그럼 이제 Exception Handling 과정을 살펴봅시다. 

 

1) 일반적인 Program 실행 중, Exception이 발생하면 Interrupt Service Routine으로 진입하기 이전에 
현재 실행중인 Program 관련한 정보를 담고있는 R0-R3, R12, PC, LR 등이 Stack에 PUSH 됩니다. 

이때 Exception State를 생각해보면
Exception이 발생했지만 Service Routine으로 진입 전이기 때문에 Active State가 아닌 Pending State겠죠.

 

2) 문맥 보존을 위한 Stack PUSH가 끝나면 이제 Vector Table을 통해 해당 Interrupt Handler의 주소를 PC값으로 불러오고
Interrupt Service Routine으로 들어가 Interrupt 처리를 시작합니다.
이때는 Interrupt Service Routine이 시작 됐으므로 Active State가 됩니다.

 

3) Interrupt 처리가 끝나면 Interrupt Service Routine이 종료되고
기존 프로그램으로 돌아가기 위해 앞서 문맥보존을 위해 Stack에 PUSH했던 정보들을 POP하게 됩니다.

그리고 Exception State는 Service Routine이 끝났으니 더이상 Active State가 아니고
뒤이어 발생한 Exception이 없다고 가정한다면 Pending State 또한 아니기 때문에 Inactive State가 되겠습니다.

 

4) Interrupt 처리도 마쳤고 기존 Program관련 정보들도 복원을 했으니 이제 기존에 하던 Program을 이어서 하면 되겠네요:)

 


Cortex-M7의 Exception처리에 대해 공부한 내용은 여기까지입니다.
더 올리게 될 수도 있지만 아마도 Cortex-M7에 대한 포스팅은 여기까지일 것 같아요. 

Cortex와 관련해 배웠던 내용들이 이후 Debugging이나 Assembly를 공부할 때 많이 사용이 될테니 
기억이 안날 때 한번씩 들러야겠습니다 :)

다들 고생하셨습니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기