打印
[STM32F1]

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

[复制链接]
9525|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 | 只看该作者
不明帮顶

使用特权

评论回复
5
baihw2003| | 2014-3-28 16:26 | 只看该作者
变量定义位置对齐,目前arm中变量定义为1字节,2字节 ,4字节。一般都是4字节对齐,所以在变量调用的时候会出现错误。不知道你整个程序中变量定义情况,你可以参考一下,网上游相应介绍,你定义一下1字节对齐模式,在调试一下。

使用特权

评论回复
6
lkl0305| | 2014-3-28 21:58 | 只看该作者
没有遇到这个问题,回头也调试一下看看

使用特权

评论回复
7
写轮眼天照| | 2016-11-24 19:52 | 只看该作者
非常完美,我之前也碰到过这样的问题,只能用全局变量来传递值,,float 类型的参数传递是会出问题的,感觉和STM32里的硬件IIC很少有人用一个道理,有不完美的地方。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝