
我在某个.c文件中定义了一个float函数,在函数内设置断点查看return运算结果是正确的,但我在另一个.c文件中引用这个函数给某个变量赋值时,变量的值就错误了。感觉像是cubeide的浮点运算设置问题,已经开启了cubeide的支持浮点运算和sprintf的选项。 这个是浮点函数的运行结果,我在函数内设置断点查看,计算运行是正确的 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) {
} 引用时是这样的 volatilefloat mid_angle,end_angle; mid_angle=getAngle11(); 感觉是cubeide的浮点设置问题,我之前开启了支持浮点数编译和打印的设置,不知道还有啥浮点数问题 |
STM32CubeIDE报错
SDIO读取TF卡,1bit模式正常,4bit模式无法读取
cudeide执行run是烧录还是只是执行呢
cubeIDE在run后出现错误
在STM32Cube IDE1.18.0里 写ODR 编译不成,咋办?
CUEBIDE生成的APP程序,在写入FLASH之后无法正常跳转。
有关Cubeide IAP 问题
Cubeide1.18.1在线调试改变"现场表达式"中的值提示找不到地址
stm32cubeide中如何查看版本日志?
最新版STM32CubeIDE无法安装
基本可以肯定函数返回做为结果赋值同类型变量是没啥问题的。
之前用过类似操作,刚才也特意测试了下。
while (1)
{
/ USER CODE END WHILE /
/ USER CODE BEGIN 3 /
if(Flag_ADC)
{
} }
float CalculateVREF(uint32_t vref)
{
return (float )( (vref/4095.)*3.3); }
float CalculateVBAT(uint32_t vbat)
{
return (float )( ((vbat)/4095.)*9.9); }
使用的是stm32F103rct6
你是说将一个 float类型的函数返回值 赋值给另一个 flaot变量时,结果就不对了?
比方 float getAngel { float xyz, .... ,return xyz}, 本来在函数里运算完后xyz为23.456,
结果作为返回值 被赋给另一浮点变量时 却是另外一个数字,是这样吗?
[md]对对对,就是这个意思,同样的代码我在keil里运行没问题,但在cubeide里是这个结果,不知道是哪个设置的问题,我去问chat和claude,给的分析结果是我在float函数中得到的正确结果和传递给变量的错误结果,二者的十进制结果相似,可能是在float函数结算完后将结果变为了十进制表示然后赋值给变量是报错了?不知道咋解决,下面是我问claude的分析结果
观察到的关键点:
分析: 这个问题很可能是由于在函数返回值或赋值过程中发生了数据类型的误解或不正确的转换。具体来说:
我刚才使用STM32CubeIDE测试过,浮点数作为函数返回值没有任何问题。
会不会代码因为优化 或者堆栈设置方面的原因导致的差异?
[md]我也很迷,就只是函数返回值出问题了。。。我拿cubemx重写下试试,设置都用的默认设置,不知道哪出问题了
[md]
[md]没事了,新建了个工程重新配置了遍没问题了,感谢帮助