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

相关推荐
Be for thing1 小时前
【嵌入式成长10】STC89C51蜂鸣器|有源/无源蜂鸣器区分、三极管驱动、定时器播放音乐实战
单片机·嵌入式硬件·学习
郎哥编程课堂2 小时前
单片机零基础训练营第2天:嵌入式开发常用的三种进制
单片机·嵌入式硬件
LCG元2 小时前
STM32 DAC+DMA+定时器触发生成任意波形:数据对齐陷阱、输出缓冲器选型与频率精度实测
stm32·单片机·嵌入式硬件
etc95272 小时前
IAR下如何同时指定section的LMA和VMA
arm开发·嵌入式硬件·mcu
LuminousCPP3 小时前
嵌入式-51单片机入门(三)-数码管驱动:从单管点亮、多位扫描到动态刷新与消隐原理
笔记·单片机·嵌入式硬件·51单片机
小柯博客3 小时前
01 · 点亮 STM32MP25 的硬件视频编解码:VPU 与那些“安静“的坑
c语言·笔记·stm32·单片机·嵌入式硬件·嵌入式·视频编解码
自小吃多3 小时前
Capture软件原理图PDF输出笔记
笔记·嵌入式硬件
花月mmc4 小时前
Arduino UNO R4 ——电压电流数据显示
嵌入式硬件·mcu·物联网
姚青&16 小时前
测试流程搭建
测试用例·bug·jira
恒锐丰小瑞17 小时前
率能SS8841T 40V/2.5A/双通道H桥驱动芯片,PWM控制接口与低导通电阻(350mΩ),用于POS打印机/安防相机/机器人
单片机·嵌入式硬件·机器人