这个是浮点函数的运行结果,我在函数内设置断点查看,计算运行是正确的
Name : value
Details:4.37491322
Default:4.37491322
Decimal:1082916682
Hex:0x408bff4a
Binary:1000000100010111111111101001010
Octal:010042777512
这个是引用函数赋值后得到的错误结果,通过引用函数赋值之后得到的变量直接飞了,引用函数后得到的结果是错误的
Name : mid_angle
Details:1.08291674e+009
Default:1.08291674e+009
Decimal:1317083135
Hex:0x4e8117ff
Binary:1001110100000010001011111111111
Octal:011640213777
我确保函数类型和赋值的类型一致,都是float,且代码在keil中编译运行没问题,在cubeide中未改动代码,但函数传递值时就错了,不知道咋解决
floatgetAngle11(void)
{
float angle_data,d_angle,value;
angle_data = I2C_getRawCount();
// tracking the number of rotations
// in order to expand angle range form [0,2PI] to basically infinity
d_angle = angle_data - angle_data_prev;
// if overflow happened track it as full rotation
if(fabs(d_angle) > (0.8*cpr) ) full_rotation_offset += d_angle > 0 ? -_2PI : _2PI;
// save the current angle value for the next steps
// in order to know if overflow happened
angle_data_prev = angle_data;
// return the full angle
// (number of full rotations)*2PI + current sensor angle
value=(full_rotation_offset + ( angle_data / (float)cpr) * _2PI);
return value ;
}
引用时是这样的
volatilefloat mid_angle,end_angle;
mid_angle=getAngle11();
感觉是cubeide的浮点设置问题,我之前开启了支持浮点数编译和打印的设置,不知道还有啥浮点数问题
更多回帖