请问STM8S的long转float

2019-07-19 20:41发布

最近做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位数,则错误

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。