最近做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 ,数据错误
如果断点把 fff 改为 1593835520 则监视窗口显示是正确的
错误时的内存是 5F 00 00 00
哪位高手指点下,是怎么回事?
如果 dmptempl 小于10位数,则转换为 fff 是正确的,大于 10位数,则错误
一周热门 更多>