MDK对浮点支持有bug吗?

2020-01-11 18:09发布

最近调试stm32f103平台上调试pid,发现函数参或者返回值若使用float型,则总会出问题,发现传进去的参数或者返回来的的值并非本来赋的那个值,百思不得其解.但若使用指针传递则完全正常。难道使用浮点有什么特殊操作吗?
举个例子.
float pid_cal(float in)
{
float ret=0.012;
……
printf("in=%f ",in);
return ret;
}

调用函数pid_cal(2.5); 函数打印出in=xxxx.xxxx。是一个很大的值,并非2.5
同理printf("pid_val=%f ",pid_cal(3.0));打印出来也不是期望的0.012

如改成指针形式则正常如
void pid_cal(float *in,float *out)
{
float ret=0.012;
……
printf("in=%f ",*in);
*out=ret;
}

float t=2.5;
float out_val;
pid_cal(&t,&out_val);
这样使用就不会有问题.

我觉得MDK不至于这么弱智吧?有人碰到过吗?
还是我的MDK破解有问题?
之前用的MDK4.6就有这个问题,后来还特地升级到4.73,发现问题依旧
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
21条回答
wye11083
1楼-- · 2020-01-13 17:25
 精彩回答 2  元偷偷看……
出其而亮
2楼-- · 2020-01-13 22:50
我觉得不是bug 可能是你的MDK版本比较低 printf不支持 我也遇到这种情况 http://www.amobbs.com/thread-5611913-1-1.html?_dsign=e880178b
PZLPDY
3楼-- · 2020-01-14 02:33
出其而亮 发表于 2015-2-12 17:17
我觉得不是bug 可能是你的MDK版本比较低 printf不支持 我也遇到这种情况 http://www.amobbs.com/thread-561 ...

我的都4.73了还低呀,网上查了一下资料应该就是对齐引起的.具体还没验证,先用指针弄吧,懒得折腾了
cumtgao
4楼-- · 2020-01-14 06:30
印象中STM32用过浮点,好像没发现有问题
cnshibo
5楼-- · 2020-01-14 10:48
这个问题的解决方案是 函数用到的地方 需要声明 函数原型。Must include the function prototype where it is used.
hefq
6楼-- · 2020-01-14 12:40
 精彩回答 2  元偷偷看……

一周热门 更多>