[STM32F3] STM32F302计算错误问题

[复制链接]
3659|21
 楼主| jplzl 发表于 2017-4-2 17:21 | 显示全部楼层 |阅读模式
ti.png tsi.png
如上两张图所示。
本来只是一个简单的除法求解问题。
原来一直以为是除法计算错误。
但通过这两张图,发现好像不是除法本身的问题,而是这个变量temp的问题。
这个temp是函数内变量,定义为        volatile float temp;为了排除编译问题还特意加了volatile。
但是在用keil里面的go to defined 查找temp的定义时,却弹出了三个不同的定义,其他两个都是别的函数内定义的局部变量。
不知道为何也会一起弹出,而不直接定位到该函数内的定义处。这也可能是别的原因吧。

这个temp在此函数中有多处使用,做为中间变量存放中间值。
但在此计算处,根据仿真结果,可知道,此处temp并没有进行该除法的计算赋值,而是直接读取了相应的变量值做为判断使用。

这个错误,不光是仿真时能发现,而是在实际完全在nucleo板上运行时,这个错误也是存在的。
具体原因就是这个temp的错误,导致该函数的返回值错误,从而整个程序运行出错。

从这两张图看,有点像是函数内存溢出?
但程序数据并不多RW data只有176字节

此是为何

mmuuss586 发表于 2017-4-2 20:03 | 显示全部楼层
换个变量名,或者新建个工程看看;

还有优化级别设置下;
51xlf 发表于 2017-4-2 22:52 | 显示全部楼层
显示的问题吗?
51xlf 发表于 2017-4-2 22:53 | 显示全部楼层
改变一下变量的类型试试。
zchong 发表于 2017-4-3 11:09 | 显示全部楼层
优化调到最低,看到的值不一定真实,最好看一下汇编,看看程序执行流程
 楼主| jplzl 发表于 2017-4-3 12:28 | 显示全部楼层
zchong 发表于 2017-4-3 11:09
优化调到最低,看到的值不一定真实,最好看一下汇编,看看程序执行流程

优化都是-O0的,看了汇编也是正常的,都是单次运算的C代码,都没敢写复合运算。
结合程序实际运行的情况看,这个看到的值到像是很真的。
原来以为是计算错误,但现在看,很可能是取值错误了
zyj9490 发表于 2017-4-3 13:38 | 显示全部楼层
不优化,试下。
 楼主| jplzl 发表于 2017-4-3 15:46 | 显示全部楼层
zyj9490 发表于 2017-4-3 13:38
不优化,试下。

没有使用优化呀
-O0级别
zchong 发表于 2017-4-3 17:40 | 显示全部楼层
jplzl 发表于 2017-4-3 12:28
优化都是-O0的,看了汇编也是正常的,都是单次运算的C代码,都没敢写复合运算。
结合程序实际运行的情况 ...

汇编都是正常的,为啥最后是错的?
htmlme 发表于 2017-4-3 22:47 | 显示全部楼层
改变变量类型试试
htmlme 发表于 2017-4-3 22:51 | 显示全部楼层
把鼠标放在上面查看寄存器数据?
jkl21 发表于 2017-4-4 21:44 | 显示全部楼层
使用串口输出试试
jkl21 发表于 2017-4-4 21:47 | 显示全部楼层
这个temp变量设置double类型呢。
 楼主| jplzl 发表于 2017-4-5 15:01 | 显示全部楼层
jkl21 发表于 2017-4-4 21:44
使用串口输出试试

不用串口输出,这个结果关系到pwm的周期,直接检测pwm周期发现是错误的,和这个看到的错误结果一致
 楼主| jplzl 发表于 2017-4-5 15:03 | 显示全部楼层
htmlme 发表于 2017-4-3 22:51
把鼠标放在上面查看寄存器数据?

不是,在watch窗口中看的
和pwm输出结果一致,这个观测到的结果与实际硬件输出结果一致
UHARC 发表于 2017-4-5 16:49 | 显示全部楼层
改一下变量类型呢?
 楼主| jplzl 发表于 2017-4-5 17:58 | 显示全部楼层
UHARC 发表于 2017-4-5 16:49
改一下变量类型呢?

一样的,改成double类型也是错误的
sheepdog79 发表于 2017-4-5 23:32 | 显示全部楼层
后来呢?   关闭优化后有变化吗

用 live watch可以观察吗?

sheepdog79 发表于 2017-4-5 23:35 | 显示全部楼层
后来呢?   关闭优化后有变化吗

用 live watch可以观察吗?

 楼主| jplzl 发表于 2017-4-7 13:52 | 显示全部楼层
sheepdog79 发表于 2017-4-5 23:35
后来呢?   关闭优化后有变化吗

用 live watch可以观察吗?

一直是没用优化的。
可能是编译的时候,把哪里整的溢出了吧
不是计算错误,应该是中途取值错误,类似地址重叠共用了,应该是
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

236

帖子

2

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