很急,很急!有碰到过类似问题的兄弟请给个指导。 小弟先谢过!
最近在搞蓝牙BLE的一个项目。 目前在调试硬件驱动阶段。移植 MPU6050 (陀螺仪+三轴加速度) 的四元素融合算法的时候编译器报错。
IAR版本:IAR FOR 8051 v9.1 .
情景一::
// compute reference direc
tion of flux
hx = 2*(*mx)*(0.5 - q2q2 - q3q3) + 2*(*my)*(q1q2 - q0q3) + 2*(*mz)*(q1q3 + q0q2);
hy = 2*(*mx)*(q1q2 + q0q3) + 2*(*my)*(0.5 - q1q1 - q3q3) + 2*(*mz)*(q2q3 - q0q1);
hz = 2*(*mx)*(q1q3 - q0q2) + 2*(*my)*(q2q3 + q0q1) + 2*(*mz)*(0.5 - q1q1 - q2q2);
如上的计算就会报下面这个错。
Error[e133]: The output format intel-extended cannot handle multiple address spaces. Use format variants (-y -O) to specify which address space is wanted
情景二::公式angle= (atan2((double)y,(double)x) * (180 / 3.14159265) + 180); 计算也会报上面这个错,
因为这个公式只有一个,我把它分开写了
Rangle=atan2((double)y,(double)x);
KRad=180.0 /PI;
angle=Rangle*KRad;
angle=angle+KAngle;
编译成功,能正常计算。 但是四元素融合算法里类似这种复杂公式的计算太多了,这样全部分开不是一个解决办法。。。还需要从根本上解决这个报错问题。
情景三:
不仅计算,光光声明一个函数头
void AHRSupdate(float gx, float gy, float gz, float ax, float ay, float az, float mx, float my, float mz) [/* 函数体计算部分全部屏蔽 */}
这样,编译能通过,但是在主程序中调用该函数时,也会包上面那个错。Error[e133]: The output format intel-extended cannot handle multiple address spaces. Use format variants (-y -O) to specify which address space is wanted。
试过网上的的由于EEROM使用,输出设置不当造成。。但是我程序中并没有使用EEPORM。 有各位大侠解惑! 谢谢!