TI论坛
直播中

袁丹

7年用户 189经验值
私信 关注

用starterware为Base编写了一个裸机程序,进行简单的运算,在AM3359 ICE 上运行出现停止问题?

您好,我用starterware为Base编写了一个裸机程序,进行简单的运算,在AM3359 ICE 上运行时出现了一个问题。
程序的最初有一段加法代码如下所示,问题是,第三行可以执行,到第四行程序就停止了,不能再往下运行。我认为是浮点数的原因,和VFP相关。
后来试过分别以VFPv3,VFPv3D16重新编译调用的LIB文件,但代码还是不能执行。现在又怀疑是没有使VFP有效的原因,但在代码中使VFP有效后,问题依然存在,请问这是什么原因导致的呢?
VFPv3:       基于AM335x_Technical Reference Manual.pdf  文档中的记载,AM3359是用的这个版本
VFPv3D16:基于SDK默认的版本
  • unsigned long  TEMP1=1;
  • double  TEMP2=1.23456789;
  • TEMP1 = TEMP1+1;
  • TEMP2 = TEMP2+1.0;

回帖(1)

袁丹

2018-5-15 06:20:36
这个问题解决,问题确实是没有使能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, #2nt"
       "   orr     r0,  r0, #0x00f00000 nt"
       "   mcr     p15, #0, r0, c1, c0, #2 nt"
           "        mov                r1, #0        nt "
           "        mcr                p15, #0, r1, c7, c5, #4nt"
           "        mov     r0,#0x40000000nt "
           "        fmxr     fpexc, r0 nt       ; FPEXC = r0 ");
]
举报

更多回帖

发帖
×
20
完善资料,
赚取积分