最近调试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,发现问题依旧
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
用mdk5.0以上编辑,程序ADC出来数据全是乱数,几万的值都出来了,换成4系列版编译器就没问题。
而且,还遇到一个bug,某些全局变量无法赋值,怎么赋予执行结果都是0,尤其是结构体,最后在这个结构体前定义一个超大数组比如char pp[1000], 然后问题就解决了。
一周热门 更多>