2016-07-18 2 views
2

ARM MMU를 설치하는 코드를 작업하고있었습니다. 빠른 모델을 사용하고 있습니다. VTTBR 레지스터에 더미 값을 넣으면 데이터가 중단됩니다. 나는이 게시물을 보았습니다 How to handle this Data Abort exception in ARM 7? mode in CPSR 0x17 and board stucked at 0x10 그리고 나는 링크 레지스터를 보려고했습니다. 거기에서 나는이 명령으로 중단이 일어난 것을 발견했다 : MOVT r3,#0x8400.ARM v7에서 데이터 유형을 찾는 방법은 무엇입니까?

하지만 이전에 이미 이동이 MOV r3,#0x9240처럼 발생했습니다. 나는 두 번째 움직임에 무엇이 잘못되었는지에 대해 상당히 혼란 스럽다. 나는 데이터 유형이 가능한 네 가지 유형에서 일어난 중단을 정확히 알고 싶다. (1.alignment faults 2.translation faults 3.domain faults 4.permission faults.).

내 코드는 내가 MOVT 바닥 하프 워드에 영향을주지 않고 위 (위) 하프 워드에 값을 이동하는 것을 알고이

840000A4 : MOV r3,#0x9240 
840000A8 : MOVT r3,#0x8400 

처럼 간다.

LR에는 840000A8이 포함됩니다.

+0

코 프로세서 설명서를 읽으면 코 프로세서에 어떤 상태가 포함되어 있는지 알려줍니다. –

답변

3

실제로 대답하려면 the ARMv7-A Architecture Reference Manual의 12 페이지 이상을 재생해야하므로 조사 할 대상을 나타내는 일련의 표지를 더 많이 고려해야합니다. ARMv7-A의 시스템 수준 프로그래밍은 적절한 참조 자료가 없으면 고통 스럽습니다. 아키텍처 버전을 훨씬 오래되고 간단한 ARM7 코어 (ARMv4 아키텍처)와 혼동하는 경우 특히 그렇습니다.

ARMv6 이후로 FSR은 이제 DFSR (mrc p15, 0, <Rt>, c5, c0, 0)이며 주석에서 말하는 것처럼 데이터 오류 상태 (명령 오류에는 별도의 IFSR이 있음)가 표시됩니다. 중단이 동기이면 DFAR (mrc p15, 0, <Rt>, c6, c0, 0)이 오류가있는 주소를 알려줍니다.

또한, 링크가 데이터 중단을위한 * 값을 등록하는 폴트 명령 8 bytes ahead이다 (통상의 PC의 동작과는 달리,이 명령어 세트에 관계없이, 항상 8 바이트이며, 참고 있지만), 그렇다면 당신의 LR은 0x840000a8을 포함하고 있습니다, 당신은 범인을 위해 0x840000a0을 볼 필요가 있습니다.

* 하이픈 모드가 다른 물고기의 주전자이기 때문에 우리는 하이픈 모드에 예외를 적용하는 것에 대해 이야기하는 것은 아닙니다.

관련 문제