完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
我现在用STVD写了个程序。是AD采集的。其中有一行:temp=temp/128;其中temp是float 型。而且值一般在128*2^9~128*2^10之间。现在调试时,出现的问题时,AD值乱跳而且很大。我在线调试发现,程序执行到上面一行后temp值就等于0了!!明明temp执行前是个3开头的8位数啊?!,我试了好几次还是一样结果。不管temp多少执行后直接等于0!!我怎么也想不明白了,难道STM8不支持浮点数除法?如果那样我该怎么做除法啊。晕了??
|
|
相关推荐
13个回答
|
|
|
|
|
|
|
|
|
大部分MCU都不支持浮点数指令,但是可以调用浮点数库的呀。
还是检查一下自己的代码吧。 实在不行,复杂的公式,简化成多条的,一条执行一次算法。 很多是编译时数据类型错了。 你改为temp=temp/128.0试试。 |
|
|
|
|
|
我也想过但有两个原因:其一,temp本身就很大,最多只能放大100倍,否则可能超范围溢出。其二,我这个temp值本身要求精度比较高,后面要用它算出通道系数。小数点后面可能不止2位即使扩大100倍还是有小数啊?,而且后面还有一系列的地方要用浮点数除法了。不过还是很感谢你!
|
|
|
|
|
|
我刚试了下temp=temp/128.0; 试了几次感觉不稳定,有几次可以,可过一会儿又会出错,我跟踪发现,到这句后又出问题了。不知大师说的浮点数的库是哪个,我全部用寄存器在编程。所以对库不是很熟悉
|
|
|
|
|
|
将128改为128.0f试试,或者在128前面加(float)试试看
|
|
|
|
|
|
没用过STM8,用过51的,无非包含一些数学库。
|
|
|
|
|
|
你反汇编一下看看,这条C语句的汇编代码是什么。
|
|
|
|
|
|
你说的寄存器操作,看不懂,你不是C语言编程吗?
|
|
|
|
|
|
即使编译器的软件库有实现,体积也很恐怖,还是想办法转换为 整数吧。
|
|
|
|
|
|
还要留意 “不要在主程序和中断程序中同时做8bit以上的乘除法运算,会出错”
|
|
|
|
|
|
temp >>= 5;
|
|
|
|
|
|
太耗费资源了
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 06:18 , Processed in 1.997709 second(s), Total 109, Slave 88 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2400