stm32H743编译器关于浮点类型强制转换传参的bug

局部函数,正常传参

当测试函数作为局部函数和main函数写在同一个文件中时,参数可以正常传递。函数参数和形参都为3.14

objectivec 复制代码
float value = 0.0;
void float_test(float _v)
{
    value = _v;
}


int main(void)
{
    float_test(3.14f);
    while(1);
}

keil仿真截图,形参正常

全局函数,异常传参

当测试函数放到另一个文件中,在main函数中进行调用时,会发生异常参数,函数形参转换出错

test.c

objectivec 复制代码
float value = 0.0;
void float_test(float _v)
{
    value = _v;
}

main.c

objectivec 复制代码
int main(void)
{
    float_test(3.14f);
    while(1);
}

keil仿真截图,形参出错,变为了一个极小值,可能是数据对齐有问题

原因分析

可能是编译器在保存单精度浮点参数时还是按double类型,读取参数时确按float类型来进行读取,所以出现了错误

解决方案

浮点数传参不要使用float类型,采用默认的double类型进行传参,就可以正常传参了

相关推荐
小僧景贤38 分钟前
STM32 工程文件深度解析(Keil‑MDK + STM32CubeIDE)
stm32·单片机·stm32cubeide
国科安芯1 小时前
低轨卫星姿态与轨道控制系统中高可靠MCU的选型研究——基于AS32S601的抗辐照性能试验数据分析
分布式·科技·单片机·嵌入式硬件·系统架构
zcmodeltech4 小时前
工业生产线沙盘模型多段灯带时序控制系统设计:基于STM32与Modbus RTU的连铸-热轧-镀锌全流程联动方案
stm32·单片机·嵌入式硬件·物联网·制造·嵌入式实时数据库·多分类
小僧景贤6 小时前
STM32F407 时钟系统超详解
stm32·单片机·嵌入式硬件
西城微科方案开发6 小时前
胎压计方案开发
单片机·嵌入式硬件
JckOLF04Z6 小时前
自动开机调用迅雷下载数据库备份,完成后自动关机
数据库·单片机·嵌入式硬件
凌云拓界7 小时前
NodeVerdict:Node.js 原生诊断数据可视化工具
信息可视化·架构·typescript·开源·node.js·github·bug
国科安芯7 小时前
卫星电推进系统阀门驱动控制中的宽温域高可靠MCU应用研究——基于AS32S601电气特性与辐照试验数据的工程分析
单片机·嵌入式硬件·fpga开发·云计算·信息与通信·卫星·抗辐射芯片
210Brian8 小时前
STM32学习笔记(四)OLED显示屏与Keil调试
笔记·stm32·学习
Hello_Damon_Nikola8 小时前
CZL-601微型称重传感器从入门到精通
单片机·嵌入式硬件