This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM3359 ICE 不能运行浮点数运算

Other Parts Discussed in Thread: AM3359

您好,我用starterware为Base编写了一个裸机程序,进行简单的运算,在AM3359 ICE 上运行时出现了一个问题。

程序的最初有一段加法代码如下所示,问题是,第三行可以执行,到第四行程序就停止了,不能再往下运行。我认为是浮点数的原因,和VFP相关。

后来试过分别以VFPv3,VFPv3D16重新编译调用的LIB文件,但代码还是不能执行。现在又怀疑是没有使VFP有效的原因,但在代码中使VFP有效后,问题依然存在,请问这是什么原因导致的呢?

VFPv3:       基于AM335x_Technical Reference Manual.pdf  文档中的记载,AM3359是用的这个版本

VFPv3D16:基于SDK默认的版本

  1. unsigned long  TEMP1=1;
  2. double  TEMP2=1.23456789;
  3. TEMP1 = TEMP1+1;
  4. TEMP2 = TEMP2+1.0;
  • 这个问题解决,问题确实是没有使能VFP的原因。执行以下代码即可。

    1:使CP10,CP11有效(ARM7通过两个协处理器CP10和CP11来实现VFP。其中CP10支持单精度浮点操作,CP11支持双精度浮点操作

    2:使能VFP

    具体参考<<Cortex-A8Technical Reference Manual(Revisionr3p2).pdf>>: RUL:http://infocenter.arm.com/help/topic/com.arm.doc.ddi0344k/index.html

    • 3.2.27 c1, Coprocessor Access Control Register
    • 13.4.3 Floating-point Exception Register, FPEXC

    void CP15VFPEnable(void)

    {

       asm("  mrc     p15, #0, r0, c1, c0, #2\n\t"

           "   orr     r0,  r0, #0x00f00000 \n\t"

           "   mcr     p15, #0, r0, c1, c0, #2 \n\t"

        " mov r1, #0 \n\t "

        " mcr p15, #0, r1, c7, c5, #4\n\t"

        " mov     r0,#0x40000000\n\t "

        " fmxr     fpexc, r0 \n\t       ; FPEXC = r0 ");

    }