完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我在某个.c文件中定义了一个float函数,在函数内设置断点查看return运算结果是正确的,但我在另一个.c文件中引用这个函数给某个变量赋值时,变量的值就错误了。感觉像是cubeide的浮点运算设置问题,已经开启了cubeide的支持浮点运算和sprintf的选项。
这个是浮点函数的运行结果,我在函数内设置断点查看,计算运行是正确的Name : valueDetails:4.37491322Default:4.37491322Decimal:1082916682Hex:0x408bff4aBinary:1000000100010111111111101001010Octal:010042777512这个是引用函数赋值后得到的错误结果,通过引用函数赋值之后得到的变量直接飞了,引用函数后得到的结果是错误的Name : mid_angleDetails:1.08291674e+009Default:1.08291674e+009Decimal:1317083135Hex:0x4e8117ffBinary:1001110100000010001011111111111Octal: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 infinityd_angle = angle_data - angle_data_prev;// if overflow happened track it as full rotationif(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 happenedangle_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个回答
|
|
|
基本可以肯定函数返回做为结果赋值同类型变量是没啥问题的。
之前用过类似操作,刚才也特意测试了下。 while (1) { / USER CODE END WHILE / / USER CODE BEGIN 3 / if(Flag_ADC) { Flag_ADC=0x00; Vrefint = CalculateVREF(AdcResult_vref); Vbat = CalculateVBAT(AdcResult_vbat) ;}} float CalculateVREF(uint32_t vref) { return (float )( (vref/4095.)*3.3);} float CalculateVBAT(uint32_t vbat) { return (float )( ((vbat)/4095.)*9.9);} |
|
|
|
|
|
在CubeIDE中遇到浮点函数返回值错误的问题,可能是由于以下原因导致的。以下是逐步排查和解决方案: 1. 检查浮点ABI和编译选项一致性
2. 验证函数原型声明
3. 确认FPU已正确初始化
4. 确保栈对齐正确
5. 排除优化干扰
6. 工具链更新
7. 调试寄存器传递
8. 检查变量类型和赋值
示例解决方案
最终验证
通过以上步骤,应能解决CubeIDE中浮点返回值错误的问题。如果问题依旧,建议检查硬件连接或尝试简化代码示例以进一步隔离问题。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写?
1465 浏览 0 评论
stm32f103用freertos对一个采样率为1kHz的传感器,进行采样,数据出差
1518 浏览 0 评论
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
3664 浏览 1 评论
3856 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
2475 浏览 1 评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
746浏览 5评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
679浏览 5评论
725浏览 5评论
外部中断触发类型为双边沿触发,进入中断回调后有什么办法判断该边沿是上升沿还是下降沿?
963浏览 5评论
STM32L071CBT6低温环境下无法正常工作是什么原因引起的?
764浏览 5评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-10 10:54 , Processed in 0.604721 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
13117