임베디드2011. 6. 11. 01:47

프로세서 익셉션이 일어 났을때, 현재 PC값은 LR에 복사가 되고, CPSR은 SPSR로 복사가 됩니다.  그 후에 CPSR은 어떤 익셉션이냐에 따라서 변할 것이고, PC도 익셉션 핸들러를 돌리기 위해 익셉션에 맞게 정의된 주소로 바뀝니다. 

 

그후, ARM의 서브루틴 콜(BL)은 서브루틴으로 뛰기 전에 r14에 리턴할 주소를, PC값을 바꾸기 전에 복사해놓고, 서브루틴에서 돌아올때는 PC에 r14값을 넘겨줍니다.  그러므로 지금 일어난 익셉션을 핸들하고 있는  현 ARM 모드는 같은 종류의 익셉션이 일어낳지 않도록 해야 합니다.(안 그러면 서브루틴 리턴 주소가 익셉션 리턴 주소로 덮어씌어질테니까요)

 

ARMv4이전까지는 익셉션 코드에서 서브루틴콜을 피하거나 권한모드에서 유저모드로 들어가서 처리했는데, 전자는 너무 제한적이고, 후자는 태스크가 필요한 권한을 가지지 못할 수도 있다는 문제가 있습니다.  그래서 ARM v4 이후에서는 시스템 모드라는 걸 지원해서 이러한 문제를 해결했습니다.  시스템 모드는, 유저모드에 있는 레지스터를 공유할 수 있는 권한모드이기 때문입니다.

 

비슷한 얘기지만 인터럽트 핸들러를 재진입시에도 시스템 모드를 사용해서 문제를 해결 할 수 있습니다.  ARV v4이전까지는 Supervisor 모드로 들어가야 했습니다.

'임베디드' 카테고리의 다른 글

SiP vs SoC  (0) 2021.04.14
ARM cp15 register에 관련된 용어들  (0) 2011.06.28
cache thrashing  (0) 2011.04.30
Posted by code cat