TI中文支持网
TI专业的中文技术问题搜集分享网站

CC430F5137中进行浮点数赋值时,for循环变量条件i被置为0,使代码进入死循环的问题?

#define   FFTPOINT    32

int main(void)

 {

 for(i=0;i<FFTPOINT;i++)  

{          

 Vin[i].real=sin(i*14.0*3.14159/180.0)+5.1;     

  Vin[i].imag=0;

  }

在CC430F5136中进行硬件仿真,当i=8的时候,执行到Vin[i].real=sin(i*14.0*3.14159/180.0)+5.1;     这一句时i=8变为i=0,这样导致for循环进入了死循环,程序无法往下运行,麻烦各位高手帮忙解决一下。

 

 

在CC430F5137中运行这样一段程序,在for循环执行到

Lina Lian:

long li4,

请问你的代码中 FFTPOINT的值究竟是多少?是不是代码不全?另外,请问你所谓的

long li4导致程序陷入死循环,这样for循环进入了死循环,

是什么意思?是一直在for循环里不出来吗?

最后部分,你是不是也没有写完?

麻烦您将描述添加完整,我们好看看有何建议并最大限度帮助你!O(∩_∩)O谢谢!

BR,

Lina

long li4:

回复 Lina Lian:

您好:

我重新整理了问题,不知道您是否看的懂?是因为i值在在还未满足循环条件时又被初始化为0,导致一直停留在for循环当中。

由与外接晶振只有32.768KHz。我怀疑是时钟频率过低导致运行不正常。随后通过倍频将频率提高,以上问题得到解决。

但是我还是得不到合理的解释,是因为在进行浮点数计算时时钟频率达不到要求从而导致i值被复位为0?还是别发热什么原因造成的?

Lina Lian:

回复 long li4:

long li4,

有以下几点建议:

1. MSP430的特点是超低功耗,它并不擅长进行浮点乘法,尤其是除法运算。故建议 i*14.0*3.14159/180.0 进行一下优化。另外sin()函数也可调用math library来进行运算,这样可提高运行效率。

2. 请问你的主频MCLK从哪里来?值为多少?你倍频后又将主频提高到了多少?一般而言,32.768KHz应该不会直接用为MCLK的,毕竟它太低了。

3. 另外请问你用的是CCS还是IAR, Complier是否是最新版的, 如果不是的话,升级看看。

希望对你有帮助!O(∩_∩)O~

BR,

Lina

Shi JianHua:

回复 Lina Lian:

会不会是浮点溢出,提供个参考。感觉你的意思就是想移植一个功能。

Triton Zhang:

检查下你的RAM空间,从现象描述可能是因为你空间不够,造成溢出更改了i的值.

long li4:

回复 Triton Zhang:

您好:

        RAM空间总共4K,我检查了一下用了大约2k。要是RAM溢出的话,应该报错的。

 

long li4:

回复 Lina Lian:

您好:

       1.关于 i*14.0*3.14159/180.0 优化的问题没有理解您说的是以哪种优化方式优化。sin()是不是调用(math.h)头文件中的sin()函数。

       2.主频MCLK是由DCOCLK来的,DCOCLK是以XT1为参考倍频得到的。主频现在是5.37MHz。在为倍频之前timer、uart、RF都正常运行。

       3.用的是IAR,是5.5.2版本的,查了一下最新版本时5.6的。这个应该差不多吧!

      

 

 

 

long li4:

回复 Shi JianHua:

您好:

      不调用sin(),单独赋值一个浮点数就可以正常运行。

Triton Zhang:

回复 long li4:

你把变量 i  定义成初始赋值的静态变量试下呢?

如果不能解决,尝试把堆栈定义大点,你调用了数学库的函数,有可能会有堆栈损耗造成堆栈溢出。

赞(0)
未经允许不得转载:TI中文支持网 » CC430F5137中进行浮点数赋值时,for循环变量条件i被置为0,使代码进入死循环的问题?
分享到: 更多 (0)