[STM8]

STM8不支持浮点数除法运算吗?

[复制链接]
2362|25
手机看帖
扫描二维码
随时随地手机跟帖
chenho|  楼主 | 2018-10-12 13:47 | 显示全部楼层 |阅读模式
我现在用STVD写了个程序。是AD采集的。其中有一行:temp=temp/128;其中temp是float 型。而且值一般在128*2^9~128*2^10之间。现在调试时,出现的问题时,AD值乱跳而且很大。我在线调试发现,程序执行到上面一行后temp值就等于0了!!明明temp执行前是个3开头的8位数啊?!,我试了好几次还是一样结果。不管temp多少执行后直接等于0!!我怎么也想不明白了,难道STM8不支持浮点数除法?如果那样我该怎么做除法啊。晕了??
评论
chongdongchen 2018-10-12 22:07 回复TA
STVD绝对支持浮点数除法,好好查查程序 
zhanghqi| | 2018-10-12 13:52 | 显示全部楼层
可以把Temp先放大一定的倍数在进行运算

使用特权

评论回复
liliang9554| | 2018-10-12 13:55 | 显示全部楼层

STM8不支持浮点数。
但你的编译工具有可能支持。

使用特权

评论回复
heweibig| | 2018-10-12 13:59 | 显示全部楼层
大部分MCU都不支持浮点数指令,但是可以调用浮点数库的呀。
还是检查一下自己的代码吧。
实在不行,复杂的公式,简化成多条的,一条执行一次算法。
很多是编译时数据类型错了。
你改为temp=temp/128.0试试。

使用特权

评论回复
chenho|  楼主 | 2018-10-12 14:05 | 显示全部楼层
我也想过但有两个原因:其一,temp本身就很大,最多只能放大100倍,否则可能超范围溢出。其二,我这个temp值本身要求精度比较高,后面要用它算出通道系数。小数点后面可能不止2位即使扩大100倍还是有小数啊?,而且后面还有一系列的地方要用浮点数除法了。不过还是很感谢你!

使用特权

评论回复
chenho|  楼主 | 2018-10-12 14:09 | 显示全部楼层
我刚试了下temp=temp/128.0;  试了几次感觉不稳定,有几次可以,可过一会儿又会出错,我跟踪发现,到这句后又出问题了。不知大师说的浮点数的库是哪个,我全部用寄存器在编程。所以对库不是很熟悉

使用特权

评论回复
liliang9554| | 2018-10-12 14:12 | 显示全部楼层
将128改为128.0f试试,或者在128前面加(float)试试看

使用特权

评论回复
huangchui| | 2018-10-12 14:16 | 显示全部楼层
没用过STM8,用过51的,无非包含一些数学库。

使用特权

评论回复
huangchui| | 2018-10-12 14:22 | 显示全部楼层
你反汇编一下看看,这条C语句的汇编代码是什么。

使用特权

评论回复
yszong| | 2018-10-12 14:25 | 显示全部楼层
你说的寄存器操作,看不懂,你不是C语言编程吗?

使用特权

评论回复
liliang9554| | 2018-10-12 14:30 | 显示全部楼层

即使编译器的软件库有实现,体积也很恐怖,还是想办法转换为 整数吧。

使用特权

评论回复
zhaoxqi| | 2018-10-12 14:33 | 显示全部楼层
还要留意 “不要在主程序和中断程序中同时做8bit以上的乘除法运算,会出错”
参考跳坑记录:https://bbs.21ic.com/icview-1616344-1-1.html

使用特权

评论回复
huangchui| | 2018-10-12 14:39 | 显示全部楼层
temp >>= 5;

使用特权

评论回复
xiaoqizi| | 2018-10-12 14:40 | 显示全部楼层
太耗费资源了

使用特权

评论回复
dengdc| | 2018-10-12 14:43 | 显示全部楼层
/128.0试下;

使用特权

评论回复
木木guainv| | 2018-10-12 14:44 | 显示全部楼层
别用除法  用右移运算

使用特权

评论回复
heweibig| | 2018-10-12 14:47 | 显示全部楼层
你这是取整了,人家要的是浮点数运算

使用特权

评论回复
dengdc| | 2018-10-12 14:50 | 显示全部楼层

stvd不知道有没有浮点库 iar浮点库大的飞起
你可以用定点数处理

使用特权

评论回复
zhenykun| | 2018-10-12 14:54 | 显示全部楼层
8位机能不能浮点就不用浮点,宁愿用 long long 的类型也不要用浮点,可以把数据先放大10的N次方倍,计算完再恢复

使用特权

评论回复
jiajs| | 2018-10-12 14:58 | 显示全部楼层
比如 ADC 参考电压 3.3V ,不要 volt = read * 3.3 / 1024,用 volt = read * 3300L / 1024,计算周期也快多了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

748

主题

9853

帖子

5

粉丝