【发布时间】:2015-08-25 16:24:26
【问题描述】:
执行时遇到未定义的指令异常:
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代码处,跟在这段代码sn-p之后:
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
工具:
- IAR Embedded Workbench IDE 和编译器 - 7.40
- I-Jet 调试探针
- 放大 AM3517 评估板
- TI AM35X Cortex-A8 处理器
问题:
- 在上面的初始化代码中,需要哪些语句 NEON,哪个用于 VFP?
- NEON 和我是否缺少任何初始化说明? VFP 初始化?
- 是否需要在宏文件中放置用于调试的语句 探测?
【问题讨论】:
-
您的应用程序代码是在安全状态还是非安全状态下运行?如果您希望非安全访问正常工作,那么在从安全世界退出之前肯定有 additional things to do。
标签: embedded neon iar fpu cortex-a8