2014-11-05 1 views
0

다음 CPU로 작업하고 있습니다. Stellaris LM4F120H5QR 마이크로 컨트롤러. 이 CPU에는 MPU가 포함되어 있으므로이 기능을 사용하고 싶습니다. 하지만 많은 레지스터가 비 휘발성 모드 일 때 더 이상 액세스 할 수 없으며 시스템이 인터럽트 내부에 있고 비 휘발성 모드에서 읽을 수 있음을 나타내는 레지스터를 찾을 수없는 것처럼 보입니다.ARM Cortex M4 : 내부 인터럽트가있는 경우 unpriviled 모드에서 테스트

인터럽트에서 호출 할 때 다른 경로를 사용할 수있는 코드가 있기 때문에이 코드가 필요합니다. 권한이없는 모드에서 잘못된 검사를 수행하면 시스템이 실수로 액세스 오류로 점프합니다.

그렇다면 권한이없는 모드에서 호출 할 때 오류를 생성하지 않는 방식으로 인터럽트에서 함수가 호출되는지 어떻게 확인할 수 있습니까?

답변

0

ARM's documentation에 따르면 CONTROLISR 레지스터가 필요한 것일 수 있습니다.

그래서, CMSIS 프로토 타입을 사용하여, 코드가 같을 수 있습니다 내가 아는 한

if (__get_IPSR() || !(__get_CONTROL() & 0x1)) 
{ 
    /* Privilged code */ 
} 
else 
{ 
    /* Unprivileged code */ 
} 

, 사람들을 읽는 경우에도 사용자 스레드에 허용되어야한다.

+0

해당 페이지에 따르면 두 레지스터는 모두 권한 모드에서만 액세스 할 수 있습니다. 아니면 내가 잘못 읽었습니까? – Cheiron

+0

ARM 매뉴얼에서는 실제로 이러한 레지스터를 권한이 있음을 나타내지 만 CONTROL에서 읽기는 권한이없는 모드에서도 사용할 수 있습니다. 이 코드는 사용자 스레드 컨텍스트에서 사용되는 "Cortex M3에 대한 확실한 안내서"책의 샘플이 있습니다. – mash5

관련 문제