sunnydragon 发表于 2010-10-20 22:45:40

【求助】 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)
就这么几句话,差距怎么就这么大~~恳请大家指点下~~小弟先谢谢了!!

real_zyf 发表于 2010-10-20 23:17:37

你看一下编译出来的汇编代码就知道了

litteworm 发表于 2010-10-20 23:55:08

是的 浮点运算 很耗ram 很耗rom····

first_blood 发表于 2010-10-21 00:02:32

pic都是用汇编的,浮点数转成整数来算,你搞毛啊

hsztc 发表于 2010-10-21 00:24:13

明显整数就能解决的,为什么用浮点呢?

g921002 发表于 2010-10-21 00:28:12

浮點是單晶片的天敵你不知道嗎?

hsztc 发表于 2010-10-21 01:08:28

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)的结果有可能是负的

阻值有负的??

sunnydragon 发表于 2010-10-21 10:13:03

回复【1楼】real_zyf
-----------------------------------------------------------------------

谢谢,这是个很不错的方法,学习了~~

sunnydragon 发表于 2010-10-21 10:20:51

回复【6楼】hsztc
-----------------------------------------------------------------------

hsztc你好,非常感谢你的建议。已按照你说的作了修改,比起以前,对算式多做了一些化简,没有用浮点数了,现在大概还剩50%的RAM和ROM空间。

retome 发表于 2017-9-6 23:04:34

hsztc 发表于 2010-10-21 01:08
unsigned int ADCD;
int CurResValue;



高手,化难为易

retome 发表于 2017-9-6 23:12:46

什么编译器啊?
页: [1]
查看完整版本: 【求助】 PIC16 小量的浮点数运算竟然能占用这么多的资源?(有图)