打印
[STM8]

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

[复制链接]
2563|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试试。

使用特权

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

使用特权

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

使用特权

评论回复
7
liliang9554| | 2018-10-12 14:12 | 只看该作者
将128改为128.0f试试,或者在128前面加(float)试试看

使用特权

评论回复
8
huangchui| | 2018-10-12 14:16 | 只看该作者
没用过STM8,用过51的,无非包含一些数学库。

使用特权

评论回复
9
huangchui| | 2018-10-12 14:22 | 只看该作者
你反汇编一下看看,这条C语句的汇编代码是什么。

使用特权

评论回复
10
yszong| | 2018-10-12 14:25 | 只看该作者
你说的寄存器操作,看不懂,你不是C语言编程吗?

使用特权

评论回复
11
liliang9554| | 2018-10-12 14:30 | 只看该作者

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

使用特权

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

使用特权

评论回复
13
huangchui| | 2018-10-12 14:39 | 只看该作者
temp >>= 5;

使用特权

评论回复
14
xiaoqizi| | 2018-10-12 14:40 | 只看该作者
太耗费资源了

使用特权

评论回复
15
dengdc| | 2018-10-12 14:43 | 只看该作者
/128.0试下;

使用特权

评论回复
16
木木guainv| | 2018-10-12 14:44 | 只看该作者
别用除法  用右移运算

使用特权

评论回复
17
heweibig| | 2018-10-12 14:47 | 只看该作者
你这是取整了,人家要的是浮点数运算

使用特权

评论回复
18
dengdc| | 2018-10-12 14:50 | 只看该作者

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

使用特权

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

使用特权

评论回复
20
jiajs| | 2018-10-12 14:58 | 只看该作者
比如 ADC 参考电压 3.3V ,不要 volt = read * 3.3 / 1024,用 volt = read * 3300L / 1024,计算周期也快多了

使用特权

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

本版积分规则

748

主题

9853

帖子

5

粉丝