打印
[STM8]

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

[复制链接]
5907|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiangnanyanmeng|  楼主 | 2017-8-21 13:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大师好,又来向大家求教了。我现在用STVD写了个程序。是AD采集的。其中有一行:temp=temp/128;其中temp是float 型。而且值一般在128*2^9~128*2^10之间。现在调试时,出现的问题时,AD值乱跳而且很大。我在线调试发现,程序执行到上面一行后temp值就等于0了!!明明temp执行前是个3开头的8位数啊?!,我试了好几次还是一样结果。不管temp多少执行后直接等于0!!我怎么也想不明白了,难道STM8不支持浮点数除法?如果那样我该怎么做除法啊。晕了??
沙发
feelhyq| | 2017-8-21 13:28 | 只看该作者
可以把Temp先放大一定的倍数在进行运算

使用特权

评论回复
板凳
戈卫东| | 2017-8-21 13:31 | 只看该作者
STM8不支持浮点数。
但你的编译工具有可能支持。

使用特权

评论回复
地板
gx_huang| | 2017-8-21 13:35 | 只看该作者
大部分MCU都不支持浮点数指令,但是可以调用浮点数库的呀。
还是检查一下自己的代码吧。
实在不行,复杂的公式,简化成多条的,一条执行一次算法。
很多是编译时数据类型错了。
你改为temp=temp/128.0试试。

使用特权

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

使用特权

评论回复
6
jiangnanyanmeng|  楼主 | 2017-8-21 13:51 | 只看该作者
gx_huang 发表于 2017-8-21 13:35
大部分MCU都不支持浮点数指令,但是可以调用浮点数库的呀。
还是检查一下自己的代码吧。
实在不行,复杂的 ...

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

使用特权

评论回复
7
jiangnanyanmeng|  楼主 | 2017-8-21 13:52 | 只看该作者
戈卫东 发表于 2017-8-21 13:31
STM8不支持浮点数。
但你的编译工具有可能支持。

谢谢大师指点,我再看看!

使用特权

评论回复
8
huotou| | 2017-8-21 13:58 | 只看该作者
将128改为128.0f试试,或者在128前面加(float)试试看

使用特权

评论回复
9
gx_huang| | 2017-8-21 14:29 | 只看该作者
jiangnanyanmeng 发表于 2017-8-21 13:51
谢谢大师指点。我刚试了下temp=temp/128.0;  试了几次感觉不稳定,有几次可以,可过一会儿又会出错,我 ...

没用过STM8,用过51的,无非包含一些数学库。
你反汇编一下看看,这条C语句的汇编代码是什么。
你说的寄存器操作,看不懂,你不是C语言编程吗?

使用特权

评论回复
10
aozima| | 2017-8-21 14:41 | 只看该作者
即使编译器的软件库有实现,体积也很恐怖,还是想办法转换为 整数吧。

另外,还要留意 “不要在主程序和中断程序中同时做8bit以上的乘除法运算,会出错”
参考跳坑记录:https://bbs.21ic.com/icview-1616344-1-1.html

使用特权

评论回复
11
七颗咖啡豆| | 2017-8-21 16:16 | 只看该作者
temp >>= 5;

使用特权

评论回复
12
mmuuss586| | 2017-8-21 16:28 | 只看该作者
/128.0试下;

使用特权

评论回复
13
pkuzhx| | 2017-8-24 08:46 | 只看该作者

你这是取整了,人家要的是浮点数运算

使用特权

评论回复
14
shcshc1234| | 2017-8-24 11:46 | 只看该作者
stvd不知道有没有浮点库 iar浮点库大的飞起
你可以用定点数处理

使用特权

评论回复
15
Xflyan| | 2017-8-24 12:02 | 只看该作者
8位机能不能浮点就不用浮点,宁愿用 long long 的类型也不要用浮点,可以把数据先放大10的N次方倍,计算完再恢复
比如 ADC 参考电压 3.3V ,不要 volt = read * 3.3 / 1024,用 volt = read * 3300L / 1024,计算周期也快多了
浮点是不得以的情况下才去用的

使用特权

评论回复
16
Bjorn| | 2017-8-26 16:11 | 只看该作者
可以调用浮点数库

使用特权

评论回复
17
Thor9| | 2017-8-29 17:56 | 只看该作者
很多是编译时数据类型错了。

使用特权

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

本版积分规则

5

主题

36

帖子

0

粉丝