OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3890|回复: 3

请问STM8S的long转float

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-10-27
在线时间
4 小时
发表于 2016-10-27 21:28:10 | 显示全部楼层 |阅读模式
1金钱
最近做MPU6050陀螺仪,用的是STM8S003,使用网上 catluoq 朋友的DMP程序,可以读取数据,但飘动很大,仿真发现

float getdmplong(uchar address)
{
long dmptempl;
float fff;
  dmptempl = dmpdatas[address];
  dmptempl <<= 8;
  dmptempl |= dmpdatas[address+1];
  dmptempl <<= 8;
  dmptempl |= dmpdatas[address+2];
  dmptempl <<= 8;
  dmptempl |= dmpdatas[address+3];
  fff = (float)dmptempl;
  return (fff);
}
void getquaternion(void)
{
  quartf[0] = getdmplong(0)/1073741824.0;
  quartf[1] = getdmplong(4)/1073741824.0;
  quartf[2] = getdmplong(8)/1073741824.0;
  quartf[3] = getdmplong(12)/1073741824.0;
}


getquaternion 调用 getdmplong 函数时,返回的 dmptempl 隐形转换为 float ,数据错误

1.jpg 如果断点把 fff 改为 1593835520 则监视窗口显示是正确的
2.jpg
错误时的内存是 5F 00 00 00
3.jpg
哪位高手指点下,是怎么回事?
如果 dmptempl  小于10位数,则转换为 fff 是正确的,大于 10位数,则错误

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-10-27
在线时间
4 小时
 楼主| 发表于 2016-10-29 15:19:10 | 显示全部楼层
自己顶一下,感觉这里不是很热闹,都没人理睬俺的问题
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-4-2
在线时间
12 小时
发表于 2017-3-3 16:28:14 | 显示全部楼层
你好~~   最近我也在做类似的, 我发现如果我用DMP的话  003根本就装不下   要用105K6才行    请问你是怎么做到了?
回复

使用道具 举报

7

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2015-9-30
在线时间
22 小时
发表于 2017-8-9 23:38:14 | 显示全部楼层
楼主问题解决了吗?最近我也碰到同样的问题啊,即dmptempl  小于10位数正常,大于10位数就不正常了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-26 07:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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