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条回答
蓝胖子
1楼-- · 2020-01-12 20:49
我也发现有bug,但浮点数的没遇到过,

用mdk5.0以上编辑,程序ADC出来数据全是乱数,几万的值都出来了,换成4系列版编译器就没问题。

而且,还遇到一个bug,某些全局变量无法赋值,怎么赋予执行结果都是0,尤其是结构体,最后在这个结构体前定义一个超大数组比如char pp[1000], 然后问题就解决了。
PZLPDY
2楼-- · 2020-01-13 00:18
 精彩回答 2  元偷偷看……
PZLPDY
3楼-- · 2020-01-13 06:16
不知道IAR有没有这个问题。实在不行转投IAR了
wye11083
4楼-- · 2020-01-13 08:47
蓝胖子 发表于 2015-2-11 15:29
我也发现有bug,但浮点数的没遇到过,

用mdk5.0以上编辑,程序ADC出来数据全是乱数,几万的值都出来了,换 ...

是不是优化掉的问题?你关了优化或开O2或者干脆直接加volatile试试,可能O3优化掉了一些变量。
abl
5楼-- · 2020-01-13 12:18
PZLPDY 发表于 2015-2-11 18:10
第二种情况你多多运行就会发现会有更多的问题,某些情况下传回的值不对,有时候又是对的 ...

今天把软件恢复到问题状态, 想做一下测试, 结果一切正常, 真是邪门了.
蓝胖子
6楼-- · 2020-01-13 14:00
wye11083 发表于 2015-2-11 23:03
是不是优化掉的问题?你关了优化或开O2或者干脆直接加volatile试试,可能O3优化掉了一些变量。 ...

定义全局变量无法赋值,这与优化没关系吧

一周热门 更多>