你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8如何进行floa和long运算?

[复制链接]
zqszqs0001 提问时间:2018-5-29 11:55 /
求助:
stm8用到floa和long运算,运行时发现有问题,
请问各位,
stm8如何进行floa和long运算?
收藏 评论6 发布时间:2018-5-29 11:55

举报

6个回答
zqszqs0001 回答时间:2018-5-29 13:22:37
本帖最后由 zqszqs0001 于 2018-5-29 13:23 编辑

                                        PWM_Hz=uart2_rx[5]&0x0f;
                                        PWM_Hz=PWM_Hz+10*(uart2_rx[5]>>4);
                                        PWM_Hz=PWM_Hz+100*(uart2_rx[4]&0x0f);
                                        PWM_Hz=PWM_Hz+1000*(uart2_rx[4]>>4);
                                        PWM_Hz=PWM_Hz+10000*(uart2_rx[3]&0x0f);
                                        PWM_Hz=PWM_Hz+100000*(uart2_rx[3]>>4);
PWM_Hz为float或者unsigned long型;uart2_rx[]为byte型;
uart2_rx[3]=0x12,uart2_rx[4]=0x34,uart2_rx[5]=0x56,运行后PWM_Hz应该是123456,但是,运行后PWM_Hz不是这个数。

为什么?
stm1024 回答时间:2018-5-29 12:57:13
有啥问题,丢出代码大家帮你看看?
toofree 回答时间:2018-5-29 14:14:21
一般8位机的long型是32位的,int是16位,float和double也是32位。
具体stm8的话,写个程序看看就知道是几位的了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

andeyqi 回答时间:2018-5-29 18:05:40
stm8的int 和 long 都是一样的,float 运算和别处的使用方式都是一样的没啥区别,如果是float 比较的话 不能直接比较  需要做差运算比较

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

andeyqi 回答时间:2018-5-29 18:18:05
正常应该是123456,你看下sizeof(PWM_Hz)占几个字节,你的结果是多少,猜测有可能是PWM_Hz数据溢出了。
feixiang20 回答时间:2018-5-29 23:01:00
直接用(float)a转换,只是精度会有下降,在32位系统中float有1个符号位+8个2的幂次位+23个精度位=32位,long有1个符号位+31个精度位=32位,有效数字会有损失。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版