DSP

dsp调试中数据类型自动转换遇到的问题

2019-07-13 13:03发布

 ————彭晓林196568501(qq)欢迎交流 问题描述:void Test(float  Data)
{
 float copyData = Data*1000*1000;
 u64 intCopyData = copyData;
 //查看intCopyData的值
}main()
{
 test();
}查看 intCopyData  的值发现 与理论值相差了几千。把 copyData  改成double也不行。 解决方案:    仔细阅读了dsp编译器手册发现编译器为了提高指令执行速度默认的把float和double类型都设置32为的浮点型(硬浮点),最大支持的浮点数是64位(软浮点)。这个C语言标准不一样。手册中给了两种解决方案:方案一:通过预处理选项设置解决。但是改变工程预处理选项(设为64位)后,连接时出警告,提示说.o文件中浮点数位宽不一致。仔细分析警告信息,发现编译器自带的库文件都是按照32位的浮点编译的。最后我放弃了这种解决方案(毕竟跟老板办事,弄出来且弄的快才是硬道理)。方案二:编译器手册中给出了一张表。把copyData 申明位long double即可。