【求助】 PIC16 小量的浮点数运算竟然能占用这么多的资源?(有图)
大家好,最近项目要用到PIC16F677,一路磕磕碰碰,问题重重啊~~今天出现了一个更让人头大的问题,让我难以置信PIC16F677的浮点数运算能力。不知道是我代码问题,还是其他原因,导致我的片子的资源已经全被浮点数运算占满了。有图有真相,上图!下图是没有注释MeasureTemp这个函数里面的一些浮点数运算的效果,编译之后可以看出,ROM已经接近100%了,RAM也接近90%了,真吓人。—_—!!
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_591565BDWTDU.jpg
(原文件名:没有注释的效果.jpg)
下图是注释了MeasureTemp这个函数里面的浮点数运算的效果,还算是能接受~~
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_591566O5BQFJ.jpg
(原文件名:注释后的效果.jpg)
就这么几句话,差距怎么就这么大~~恳请大家指点下~~小弟先谢谢了!! 你看一下编译出来的汇编代码就知道了 是的 浮点运算 很耗ram 很耗rom···· pic都是用汇编的,浮点数转成整数来算,你搞毛啊 明显整数就能解决的,为什么用浮点呢? 浮點是單晶片的天敵你不知道嗎? unsigned int ADCD;
int CurResValue;
ADCD=(((unsigned int)ADRESH)<<8)|ADRESL;
CurResValue=((unsigned int)((50000ul*(ADCD<<6))>>16))/((char)(25-(((unsigned char)(((unsigned int)(ADCD*50u))>>8))>>2)))*10;
试下看,我没验证过,上面CurResValue应该是int型的吧,而不是unsigned int,(2.5-CurvoltageValue)的结果有可能是负的
阻值有负的?? 回复【1楼】real_zyf
-----------------------------------------------------------------------
谢谢,这是个很不错的方法,学习了~~ 回复【6楼】hsztc
-----------------------------------------------------------------------
hsztc你好,非常感谢你的建议。已按照你说的作了修改,比起以前,对算式多做了一些化简,没有用浮点数了,现在大概还剩50%的RAM和ROM空间。 hsztc 发表于 2010-10-21 01:08
unsigned int ADCD;
int CurResValue;
高手,化难为易 什么编译器啊?
页:
[1]