共2条
1/1 1 跳转至页
ADS1,atof ADS1.2应用中的小问题(atof)
问
请问在ADS1.2中用atof,atoi函数为什么结果不对?
程序如下:
#include <stdlib.h>
double atof(const char *string);
int atoi(const char *string);
void Main(void)
{
double disp1;
double disp2,disp4;
int disp3;
char temp[10]="1";
char tempf[10]="2";
char tempw[10]="3";
char tempi[10]="4";
char tempe[10]="5";
rI_ISPC = 0xffffffff;
Port_Init();
DelayMs(20);
disp1=(double)(atof(temp));
disp2=(double)atof(tempf);
disp3=(int)atoi(tempi);
disp4=(double)atof(tempw);
}
出来的结果是:
disp1=5
disp2=0
disp3=variable removed by compiler(optimization)
disp4=0
结果不对?为什么? 答 1: 请大家帮忙?谢谢!请问在ADS1.2,我上面的程序哪里有错呢? 答 2: atof函数问题?我现在测试结果是atof函数输出只有整数部分,atoi只有最低位,请问这是什么原因呢? 答 3: 错误不在函数上面是你的变量声明在main前面就可以了 你试试吧 答 4: 我感觉是atof的问题你数组设置123就可以 设置321就只能是1 答 5: 在ADS1.2中atof不可以用吗? 答 6: 主要是目标环境设置问题主要是目标环境设置成ARM7TDMI-ETM(S) 答 7: 除了内核设置外还有浮点的选项打钩旧可以了 答 8: 现在好用了吧主要是函数的对内核支持有限
答 9: 那S3C44B0X是ARM7TDMI这个函数不能用吗?谢谢您的回复! 答 10: 你的对了吗?我感觉是atof的问题
你数组设置123就可以 设置321就只能是1
你设置后,结果对了吗? 答 11: 浮点的选项打钩旧可以了浮点的选项打钩旧可以了 答 12: 标准库有问题的几率很小。尽可能假设自己是错的,标准库中除了一些IO相关的函数需要用户重新实现外其他的函数都与目标cpu无关,ads对标准库支持还算不错的。
下面的代码跑得很正常:
double disp1;
double disp2,disp4;
int disp3;
char temp[10]="3";
char tempf[10]="2";
char tempw[10]="1";
char tempi[10]="4";
char tempe[10]="5";
disp1=(double)(atof(temp));
disp2=(double)atof(tempf);
disp3=(int)atoi(tempi);
disp4=(double)atof(tempw);
disp4 = disp1 + disp2 + disp3;
CuCos::Start(); // uCos start!!!
return (int)disp4; 答 13: 谢谢您的关注!现在出现了新的问题:如果我用ADS1.2的默认地址0x8000,且用调试中为软件仿真,atof结果是正确的;如果我设置为地址RO_Bace为0xc000000,结果就不正确了。
如果我调试时设置为ADP则地址如何设置都是不可以的?什么原因呢? 答 14: 俺以前用的时候也遇到过这个问题啊后来只好自己重新写了这两个函数用。请问楼上的几位,这个问题解决了吗?再问wuchao78 ,浮点的选项打钩旧 在哪里设置啊?
答 15: ads1.2软件调试我用的ads1.2软件调试;如果设置为地址RO_Bace为0xc000000,正确 呀没有问题呀
答 16: 不会吧!我的报错。我的报错是out of heap memory .你的可以呀!我用的是ad.2s加embestinfo公司的ICESever;调试S3C44B0X,用硬件仿真就不可以了。不明白! 答 17: 怎么sprintf也不好用呢?现在我的ADS1.2下sprintf函数和alsphla等C++函数都是不好用,请问哪里需要设置呢?我用软件仿真是可以用的,可是我用的是ads1.2加英蓓特公司的ICE Server,和仿真器加目标板就不能用了?请问这可能的原因呢?谢谢! 答 18: 编译器将变量优化掉了,改变优化级别即可正确
程序如下:
#include <stdlib.h>
double atof(const char *string);
int atoi(const char *string);
void Main(void)
{
double disp1;
double disp2,disp4;
int disp3;
char temp[10]="1";
char tempf[10]="2";
char tempw[10]="3";
char tempi[10]="4";
char tempe[10]="5";
rI_ISPC = 0xffffffff;
Port_Init();
DelayMs(20);
disp1=(double)(atof(temp));
disp2=(double)atof(tempf);
disp3=(int)atoi(tempi);
disp4=(double)atof(tempw);
}
出来的结果是:
disp1=5
disp2=0
disp3=variable removed by compiler(optimization)
disp4=0
结果不对?为什么? 答 1: 请大家帮忙?谢谢!请问在ADS1.2,我上面的程序哪里有错呢? 答 2: atof函数问题?我现在测试结果是atof函数输出只有整数部分,atoi只有最低位,请问这是什么原因呢? 答 3: 错误不在函数上面是你的变量声明在main前面就可以了 你试试吧 答 4: 我感觉是atof的问题你数组设置123就可以 设置321就只能是1 答 5: 在ADS1.2中atof不可以用吗? 答 6: 主要是目标环境设置问题主要是目标环境设置成ARM7TDMI-ETM(S) 答 7: 除了内核设置外还有浮点的选项打钩旧可以了 答 8: 现在好用了吧主要是函数的对内核支持有限
答 9: 那S3C44B0X是ARM7TDMI这个函数不能用吗?谢谢您的回复! 答 10: 你的对了吗?我感觉是atof的问题
你数组设置123就可以 设置321就只能是1
你设置后,结果对了吗? 答 11: 浮点的选项打钩旧可以了浮点的选项打钩旧可以了 答 12: 标准库有问题的几率很小。尽可能假设自己是错的,标准库中除了一些IO相关的函数需要用户重新实现外其他的函数都与目标cpu无关,ads对标准库支持还算不错的。
下面的代码跑得很正常:
double disp1;
double disp2,disp4;
int disp3;
char temp[10]="3";
char tempf[10]="2";
char tempw[10]="1";
char tempi[10]="4";
char tempe[10]="5";
disp1=(double)(atof(temp));
disp2=(double)atof(tempf);
disp3=(int)atoi(tempi);
disp4=(double)atof(tempw);
disp4 = disp1 + disp2 + disp3;
CuCos::Start(); // uCos start!!!
return (int)disp4; 答 13: 谢谢您的关注!现在出现了新的问题:如果我用ADS1.2的默认地址0x8000,且用调试中为软件仿真,atof结果是正确的;如果我设置为地址RO_Bace为0xc000000,结果就不正确了。
如果我调试时设置为ADP则地址如何设置都是不可以的?什么原因呢? 答 14: 俺以前用的时候也遇到过这个问题啊后来只好自己重新写了这两个函数用。请问楼上的几位,这个问题解决了吗?再问wuchao78 ,浮点的选项打钩旧 在哪里设置啊?
答 15: ads1.2软件调试我用的ads1.2软件调试;如果设置为地址RO_Bace为0xc000000,正确 呀没有问题呀
答 16: 不会吧!我的报错。我的报错是out of heap memory .你的可以呀!我用的是ad.2s加embestinfo公司的ICESever;调试S3C44B0X,用硬件仿真就不可以了。不明白! 答 17: 怎么sprintf也不好用呢?现在我的ADS1.2下sprintf函数和alsphla等C++函数都是不好用,请问哪里需要设置呢?我用软件仿真是可以用的,可是我用的是ads1.2加英蓓特公司的ICE Server,和仿真器加目标板就不能用了?请问这可能的原因呢?谢谢! 答 18: 编译器将变量优化掉了,改变优化级别即可正确
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |