STM32/STM8技术论坛
直播中

傅梦麒

未满1年用户 11经验值
擅长:可编程逻辑
私信 关注
[问答]

使用cubeide编译时出现浮点函数传递错误咋解决

这个是浮点函数的运行结果,我在函数内设置断点查看,计算运行是正确的
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的浮点设置问题,我之前开启了支持浮点数编译和打印的设置,不知道还有啥浮点数问题

回帖(2)

傅梦麒

2024-10-15 10:58:56
使用的是stm32F103RC
T6
举报

王娟

2024-10-16 17:55:35
看起来你在CubeIDE中遇到了浮点函数传递错误的问题。这个问题可能是由于CubeIDE的编译器设置或者浮点数精度问题导致的。以下是一些建议来解决这个问题:

1. 检查编译器设置:确保CubeIDE使用的编译器支持浮点数运算。你可以在CubeIDE的设置中查看编译器选项,确保启用了浮点数支持。

2. 使用volatile关键字:在某些情况下,编译器可能会优化浮点数运算,导致错误的结果。你可以尝试在函数参数和返回值前添加volatile关键字,以防止编译器优化。

例如:
```c
float getAngle11(void) {
    volatile float ang;
    // ...
}
```

3. 使用定点数代替浮点数:如果你的应用场景允许,可以考虑使用定点数代替浮点数。这样可以避免浮点数精度问题。

4. 检查代码逻辑:确保你的代码逻辑正确,没有其他潜在的错误导致浮点数运算错误。

5. 更新CubeIDE:确保你的CubeIDE版本是最新的,以便获得最新的编译器和库支持。

6. 尝试其他IDE:如果问题仍然存在,你可以尝试使用其他IDE(如Keil)来编译和运行你的代码,看看是否仍然存在问题。

希望这些建议能帮助你解决浮点函数传递错误的问题。如果问题仍然存在,请提供更多关于你的代码和环境的信息,以便进一步分析和解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分