在执行时,我得到了一个未定义的指令异常:
0xED2D8B0E VPUSH {D8-D14}(注意:语句是编译器作为C语言函数输入协议的一部分生成的。)
初始化代码:
;; Initialize VFP (if needed).
;; BL __iar_init_vfp HJ REMOVED AND REPLACED WITH BELOW
MRC p15, #0, r1, c1, c0, #2 ; r1 = Access Control Register
ORR r1, r1, #(0xf << 20) ; enable full access for p10,11
MCR p15, #0, r1, c1, c0, #2 ; Access Control Register = r1
MOV r1, #0
MCR p15, #0, r1, c7, c5, #4 ; flush prefetch buffer because of FMXR below
; and CP 10 & 11 were only just enabled
; Enable VFP itself
MOV r0,#0x40000000
FMXR FPEXC, r0 ; FPEXC = r0当目标FPU被设置为VFPv3或VFPV3 + NEON时,我会得到未定义的异常。
初始化代码放在"cstartup.c“文件中,位于__iar_program_start和?cstartup代码中,下面是代码片段:
MRC p15,0,R1,C1,C0,0
LDR R0,=CP_DIS_MASK ;; 0xFFFFEFFA
AND R1,R1,R0
ORR R1,R1,#(1<<12)
MCR p15,0,R1,C1,C0,0登记册(在VPUSH之前):
CPSR: 0x80000113
APSR: 0x80000000
SPSR: 0x000001D3工具:
问题:
发布于 2015-08-31 20:05:23
问题中的代码正确地初始化了Cortex-A8处理器上的浮点处理器。
获取未定义的指令异常(导致此问题)的问题是由于O.S.将无效值写入FPEXC寄存器,导致浮点处理器被禁用。
https://stackoverflow.com/questions/32209203
复制相似问题