2016-07-08 8 views
0

MPort가있는 Cortex-M 프로세서 (Cortex-M4를 구체적으로 사용하지만 대답은 예 : M3와 같을 ​​것입니다.) MPU에서 하드웨어 예외 항목 스태킹은 어떤 특권 모드입니까?스레드 모드 또는 처리기 모드에서 Cortex-M 하드웨어에 의해 예외가 스택됩니까?

프로세스 스택 (PSP)을 사용하여 권한없는 스레드 모드로 실행 중이며 MPU가 특정 영역 내에서만 쓰기를 허용하도록 설정되어 있다고 가정합니다 (예 : 사용자 모드 프로세스가 실행 중임). 핸들러 모드에서 핸들러가 실행되기 전에 예외가 발생하면 하드웨어가 레지스터 r0-r3, lr, pc 등을 PSP에 스택합니다. 이것은 권한없는 스레드 모드에서도 발생합니까?

특히, 프로세스가 메모리에있는 임의의 지점으로 쓰기를 허용해서는 안되는 SP를 설정한다고 가정하면 예외적으로 스태킹 결과 메모리 오류가 발생합니까?

+0

MemManage 오류 상태의 MSTKERR 비트 레지스터 (MMFSR)는 예외 항목에 대해 스태킹 중에 메모리 액세스 오류가 발생했는지 여부를 나타냅니다. 예외 항목 중에 메모리 오류가 발생할 수 있음이 확실하지만 메모리 액세스가 특권 또는 비 특권 모드 (예 : MPU 제어 레지스터의 PRIVDEFENA 비트가 1이라고 가정)에있는 것처럼 처리하는지 기본적으로 묻습니다. – exobrain

답변

0

이 문제를 해결 한 후 1 년 후 돌아 오면 이전에 실행 중이던 권한으로 스태킹이 발생합니다.

따라서 권한이없는 모드에서 인터럽트가 발생하면 하드웨어는 권한이없는 코드가 스태킹을 수행하는 것처럼 기존 MPU 설정을 사용하여 PSP에 레지스터를 쌓습니다. 스태킹이 MPU 규칙을 위반하면 MemManage 오류가 발생하고 MemManage 오류 상태 레지스터의 MSTKERR 필드가 설정됩니다 (Cortex-M4 사용 설명서의 4-25 페이지)