0

首先,我按照 DS-5开始演示,可以在 ARM FVP -> VE_Coretex_A9x1 上正确调试我的代码。

然后我按照链接启用 NEON,它需要在构建中设置 CPU 目标,axf 文件已正确构建,但调试器停止工作。CA9_FVP 连接到板后挂起。它显示waitForTargetToStop.

Connected to stopped target ARM FVP (Installed with DS-5) - VE_Cortex_A9x1 Execution stopped at: S:0x00000000 loadfile "test.axf" S:0x00000000 DCI 0xe7ff0010 ; ? Undefined Loaded section ER_RO: S:0x80000000 ~ S:0x80002C0B (size 0x2C0C) Loaded section ER_RW: S:0x80002C0C ~ S:0x80002C1F (size 0x14) Entry point S:0x80000000 cd "Documents\DS-5 Workspace" Semihosting server socket created at port 8001 Semihosting enabled automatically due to semihosting symbol detected in image 'math_neon.axf' Working directory "Documents\DS-5 Workspace" set debug-from main start Starting target with image test.axf Running from entry point wait

作为条目调试的结果:

_fp_init
S:0x80002B88 : MOV r0,#0x3000000
S:0x80002B8C : VMSR FPSCR,r0 --> 此行将导致 PC 跳转到 0x00000004 并卡住

S:0x00000000:DCI 0xe7ff0010;? 不明确的
S:0x00000004 : STMDA r0,{r11,sp-pc}
S:0x00000008 : DCI 0xe7ff0010 ; ? 不明确的
S:0x0000000C : STMDA r0,{r11,sp-pc}
S:0x00000010 : DCI 0xe7ff0010 ; ? 不明确的
S:0x00000014 : STMDA r0,{r11,sp-pc}
4

2 回答 2

1

我遇到了同样的问题。发生的情况是在它到达 main() 函数之前引发了一个异常。如果您从入口点(调试配置配置、调试器选项卡)进行调试并逐步执行 asm 代码,您可以看到 fp_init() 函数在尝试写入 FPSCR 寄存器时引发了异常。原因是在代码可以写入 FPSCR 寄存器之前需要启用完全访问。

一种解决方案是编写自己的 fp_init() 函数。我通过从 DS-5 附带的 firefox_A9-FVP_AC5 教程项目中的“startup.s”文件中复制 VFP/NEON 激活码来编写我的。我想保留 C 文件,所以我在我的项目中添加了一个“startup.c”文件,内容如下。这对我有用。

__asm void _fp_init(void) {
  IF {TARGET_FEATURE_NEON} || {TARGET_FPU_VFP}

  ; Enable access to NEON/VFP by enabling access to Coprocessors 10 and 11.
  ; Enables Full Access i.e. in both privileged and non privileged modes
        MRC     p15, 0, r0, c1, c0, 2     ; Read Coprocessor Access Control Register (CPACR)
        ORR     r0, r0, #(0xF << 20)      ; Enable access to CP 10 & 11
        MCR     p15, 0, r0, c1, c0, 2     ; Write Coprocessor Access Control Register (CPACR)
        ISB

  ; Switch on the VFP and NEON hardware
        MOV     r0, #0x40000000
        VMSR    FPEXC, r0                   ; Write FPEXC register, EN bit set

  ENDIF
}
于 2018-10-18T19:53:54.047 回答
0

转到 Project Properties > C/C++ Build > Settings > Tool Settings > ARM Linker > Image Layout并将Image 入口点(--entry) 填充为Vectors

注意:这是针对在 Eclipse 上运行的 DS5

于 2018-10-16T04:37:51.377 回答