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类型进行传参,就可以正常传参了

相关推荐
Topplyz1 小时前
如何减小DCDC的纹波?
单片机·嵌入式硬件·硬件工程·电源·layout·dcdc
sramdram3 小时前
灵动高性能32位MCU空调解决方案
单片机·嵌入式硬件·mcu·32位mcu
Hotchip_MEMS4 小时前
ASIC+MCU方案简化:MS2102AB-M00如何降低主控芯片的判别压力?
人工智能·单片机·嵌入式硬件·物联网·制造
sramdram5 小时前
应用在单片机上的MRAM芯片嵌入式存储方案
单片机·嵌入式硬件·mram·mram芯片
piaoyiren5 小时前
普中A6 STC8A 动态数码管显示讲解
嵌入式硬件·51单片机·c
阿拉斯攀登7 小时前
内核模块开发:module_init 与模块机制详解
linux·网络·嵌入式硬件·linux驱动
ICGOODFIND17 小时前
2026物联网模组选型指南:U-BLOX定位模组+SIMCOM芯讯通主流蜂窝通信模组参数与场景适配
嵌入式硬件·物联网·硬件工程·iot
阿拉斯攀登8 小时前
嵌入式 Linux 驱动概述:分类、内核模块、开发环境
linux·嵌入式硬件·linux内核·嵌入式·linux驱动
2401_854151558 小时前
STM32 位带操作——像 51 一样操作 GPIO
单片机·嵌入式硬件
zlinear数据采集卡18 小时前
从0到1硬核拆解:工业级数据采集卡的隔离设计与Modbus通信实战
arm开发·单片机·嵌入式硬件·fpga开发·开源