请教keil MDK中定义变量时遇到的问题????

[复制链接]
4534|19
 楼主| wll_2012 发表于 2013-6-21 15:43 | 显示全部楼层 |阅读模式
定义变量时如果把图中圈出来的u32 addr;这个变量的定义放在最前面,仿真的时候addr的数值就跟实际的数值不相等,如果放到最后面就没有问题,请问出现这种情况的原因是什么??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
coody 发表于 2013-6-21 15:46 | 显示全部楼层
只要使用前定义就不会有问题的啊,放前面点不会影响的,估计你程序有别的问题
 楼主| wll_2012 发表于 2013-6-21 15:59 | 显示全部楼层
coody 发表于 2013-6-21 15:46
只要使用前定义就不会有问题的啊,放前面点不会影响的,估计你程序有别的问题 ...

这种情况我以前也遇到过类似的,而且仿真的结果也确实是放在前面addr的数值不对,放在后面addr的数值就正确,但是两者程序全速执行之后的结果跟预期的一样都对,所以我也很纳闷这到底是怎么回事?
 楼主| wll_2012 发表于 2013-6-21 16:09 | 显示全部楼层
coody 发表于 2013-6-21 15:46
只要使用前定义就不会有问题的啊,放前面点不会影响的,估计你程序有别的问题 ...

有没有可能是keil本身给优化了呢?
coody 发表于 2013-6-24 11:47 | 显示全部楼层
如果定义了,还没给初值前, 其值没有意义.
你给一个值, 看看是否你要的值.
 楼主| wll_2012 发表于 2013-6-24 14:20 | 显示全部楼层
coody 发表于 2013-6-24 11:47
如果定义了,还没给初值前, 其值没有意义.
你给一个值, 看看是否你要的值.

在程序中即使给定addr一个固定的数值,仿真时显示的也不是那个给定的值,但是如果在变量addr前面加上static就可以了
sunhq02 发表于 2013-6-24 14:36 | 显示全部楼层
哦,如果是这样的话
大概是keil的overlay把其它变量和这个变量分配在了重叠的内存地址
如果是这种情况的话
只有在这个变量的生命周期内,它的值才是正确的
ayb_ice 发表于 2013-6-24 15:02 | 显示全部楼层
看MAP文件
 楼主| wll_2012 发表于 2013-6-24 15:20 | 显示全部楼层
sunhq02 发表于 2013-6-24 14:36
哦,如果是这样的话
大概是keil的overlay把其它变量和这个变量分配在了重叠的内存地址
如果是这种情况的话

不知道什么原因
 楼主| wll_2012 发表于 2013-6-24 15:20 | 显示全部楼层
ayb_ice 发表于 2013-6-24 15:02
看MAP文件

看什么呢?怎么看?
ayb_ice 发表于 2013-6-24 16:28 | 显示全部楼层
调试的时候最好选择优化0,调试变量加volatile声明
ayb_ice 发表于 2013-6-24 16:31 | 显示全部楼层
RT:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
板砖横飞 发表于 2013-6-24 16:35 | 显示全部楼层
看下你的仿真器的仿真速度,如果速度很低的话,可能算错的,想不出错,又想仿真的话,建议仿真的时候,弄成全局的,仿真没问题后,再改成局部的。
 楼主| wll_2012 发表于 2013-6-24 16:49 | 显示全部楼层
ayb_ice 发表于 2013-6-24 16:28
调试的时候最好选择优化0,调试变量加volatile声明

我选择的是优化0,调试变量加volatile声明是为什么呢?
 楼主| wll_2012 发表于 2013-6-24 16:52 | 显示全部楼层
板砖横飞 发表于 2013-6-24 16:35
看下你的仿真器的仿真速度,如果速度很低的话,可能算错的,想不出错,又想仿真的话,建议仿真的时候,弄成 ...

仿真速度2mhz,应该不低了,先设置全局,成功后在改为局部,为什么呢?有什么说法吗
 楼主| wll_2012 发表于 2013-6-24 16:52 | 显示全部楼层
ayb_ice 发表于 2013-6-24 16:31
RT:

谢谢你
 楼主| wll_2012 发表于 2013-6-24 16:59 | 显示全部楼层
ayb_ice 发表于 2013-6-24 16:31
RT:

咦,我的怎么没有你那个选项呢?
coody 发表于 2013-6-24 17:37 | 显示全部楼层
wll_2012 发表于 2013-6-24 14:20
在程序中即使给定addr一个固定的数值,仿真时显示的也不是那个给定的值,但是如果在变量addr前面加上stat ...

那就是很可能被优化掉了。
板砖横飞 发表于 2013-6-25 10:09 | 显示全部楼层
wll_2012 发表于 2013-6-24 16:52
仿真速度2mhz,应该不低了,先设置全局,成功后在改为局部,为什么呢?有什么说法吗 ...

感觉仿真速度比较慢的时候,可能处理不过来,我以前是1M的仿真速度时,局部的有时是不对的,可能局部变量要从堆栈中申请释放吧,后来10M的速度是,局部变量就没有出过问题。
 楼主| wll_2012 发表于 2013-6-25 10:29 | 显示全部楼层
板砖横飞 发表于 2013-6-25 10:09
感觉仿真速度比较慢的时候,可能处理不过来,我以前是1M的仿真速度时,局部的有时是不对的,可能局部变量 ...

哦,有这种可能啊,还不知道呢,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

96

帖子

0

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