发 帖  
[问答] STM8支持浮点数除法运算吗?
410 STM8
分享
我现在用STVD写了个程序。是AD采集的。其中有一行:temp=temp/128;其中temp是float 型。而且值一般在128*2^9~128*2^10之间。现在调试时,出现的问题时,AD值乱跳而且很大。我在线调试发现,程序执行到上面一行后temp值就等于0了!!明明temp执行前是个3开头的8位数啊?!,我试了好几次还是一样结果。不管temp多少执行后直接等于0!!我怎么也想不明白了,难道STM8不支持浮点数除法?如果那样我该怎么做除法啊。晕了??
0
2018-10-12 14:43:15   评论 邀请回答
13个回答
可以把Temp先放大一定的倍数在进行运算
2018-10-12 14:43:26 1 评论

举报

1 条评论
STM8不支持浮点数。
但你的编译工具有可能支持。
2018-10-12 14:43:36 评论

举报

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

举报

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

举报

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

举报

将128改为128.0f试试,或者在128前面加(float)试试看
2018-10-12 14:44:22 评论

举报

没用过STM8,用过51的,无非包含一些数学库。
2018-10-12 14:44:32 评论

举报

你反汇编一下看看,这条C语句的汇编代码是什么。
2018-10-12 14:44:44 评论

举报

你说的寄存器操作,看不懂,你不是C语言编程吗?
2018-10-12 14:44:53 评论

举报

即使编译器的软件库有实现,体积也很恐怖,还是想办法转换为 整数吧。
2018-10-12 14:45:03 评论

举报

还要留意 “不要在主程序和中断程序中同时做8bit以上的乘除法运算,会出错”
2018-10-12 14:45:16 评论

举报

2018-10-12 14:45:27 评论

举报

2018-10-12 14:46:57 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

提问题
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表