[STM32F1] KEIL开发STM32遇到函数传递float变量的问题

[复制链接]
10457|6
 楼主| imeum 发表于 2014-3-10 21:58 | 显示全部楼层 |阅读模式
简单的说,写了个函数 f1(u32 a,u32 b,float c),当c这个变量是表达式或是float变量,工作都不正常。
搞了几个小时都不成功,最后改了下,定义了两个全局变量。flaot x,y,然后
f1(u32 a,u32 b,float c)
{
y=c;
GUI_DispFloat(y,10);//在液晶屏上显示这个值
}
main()
{
....
while(1)
{
x=x+0.1;
f1(50,50,x);
}
}
最后结果就是,y果然不等于x,y只在3个值之间变化 :0.000,2.000,-2.000
不管直接显示在液晶屏上,还是断点调试,y都不等于x

于是请教:这到底是KEIL的BUG,还是违背了 ARM 的函数参数传递规则,还是传递float参数有规定?
比如调试GUI的函数
void GUI_RotatePolygon(GUI_POINT* pDest, const GUI_POINT* pSrc, int NumPoints, float Angle);
就没有问题,这个函数的函数也够多,
但我只要用f1()传入float参数,然后在f1中把这个形参传给GUI_RotatePolygon函数,就出错了。
airwill 发表于 2014-3-28 00:07 | 显示全部楼层
是KEIL的BUG?  不敢肯定
违背了 ARM 的函数参数传递规则,还是传递float参数有规定?    这肯定不是

不妨借助调试器, 看看变量怎么个变化的
yswtxiao 发表于 2014-3-28 09:15 | 显示全部楼层
帮顶楼主!
善水盈渊 发表于 2014-3-28 11:48 | 显示全部楼层
不明帮顶
baihw2003 发表于 2014-3-28 16:26 | 显示全部楼层
变量定义位置对齐,目前arm中变量定义为1字节,2字节 ,4字节。一般都是4字节对齐,所以在变量调用的时候会出现错误。不知道你整个程序中变量定义情况,你可以参考一下,网上游相应介绍,你定义一下1字节对齐模式,在调试一下。
lkl0305 发表于 2014-3-28 21:58 | 显示全部楼层
没有遇到这个问题,回头也调试一下看看
写轮眼天照 发表于 2016-11-24 19:52 | 显示全部楼层
非常完美,我之前也碰到过这样的问题,只能用全局变量来传递值,,float 类型的参数传递是会出问题的,感觉和STM32里的硬件IIC很少有人用一个道理,有不完美的地方。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部