打印

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

[复制链接]
3697|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
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本身给优化了呢?

使用特权

评论回复
5
coody| | 2013-6-24 11:47 | 只看该作者
如果定义了,还没给初值前, 其值没有意义.
你给一个值, 看看是否你要的值.

使用特权

评论回复
6
wll_2012|  楼主 | 2013-6-24 14:20 | 只看该作者
coody 发表于 2013-6-24 11:47
如果定义了,还没给初值前, 其值没有意义.
你给一个值, 看看是否你要的值.

在程序中即使给定addr一个固定的数值,仿真时显示的也不是那个给定的值,但是如果在变量addr前面加上static就可以了

使用特权

评论回复
7
sunhq02| | 2013-6-24 14:36 | 只看该作者
哦,如果是这样的话
大概是keil的overlay把其它变量和这个变量分配在了重叠的内存地址
如果是这种情况的话
只有在这个变量的生命周期内,它的值才是正确的

使用特权

评论回复
8
ayb_ice| | 2013-6-24 15:02 | 只看该作者
看MAP文件

使用特权

评论回复
9
wll_2012|  楼主 | 2013-6-24 15:20 | 只看该作者
sunhq02 发表于 2013-6-24 14:36
哦,如果是这样的话
大概是keil的overlay把其它变量和这个变量分配在了重叠的内存地址
如果是这种情况的话

不知道什么原因

使用特权

评论回复
10
wll_2012|  楼主 | 2013-6-24 15:20 | 只看该作者
ayb_ice 发表于 2013-6-24 15:02
看MAP文件

看什么呢?怎么看?

使用特权

评论回复
11
ayb_ice| | 2013-6-24 16:28 | 只看该作者
调试的时候最好选择优化0,调试变量加volatile声明

使用特权

评论回复
12
ayb_ice| | 2013-6-24 16:31 | 只看该作者
RT:

未命名.JPG (49.84 KB )

未命名.JPG

使用特权

评论回复
13
板砖横飞| | 2013-6-24 16:35 | 只看该作者
看下你的仿真器的仿真速度,如果速度很低的话,可能算错的,想不出错,又想仿真的话,建议仿真的时候,弄成全局的,仿真没问题后,再改成局部的。

使用特权

评论回复
14
wll_2012|  楼主 | 2013-6-24 16:49 | 只看该作者
ayb_ice 发表于 2013-6-24 16:28
调试的时候最好选择优化0,调试变量加volatile声明

我选择的是优化0,调试变量加volatile声明是为什么呢?

使用特权

评论回复
15
wll_2012|  楼主 | 2013-6-24 16:52 | 只看该作者
板砖横飞 发表于 2013-6-24 16:35
看下你的仿真器的仿真速度,如果速度很低的话,可能算错的,想不出错,又想仿真的话,建议仿真的时候,弄成 ...

仿真速度2mhz,应该不低了,先设置全局,成功后在改为局部,为什么呢?有什么说法吗

使用特权

评论回复
16
wll_2012|  楼主 | 2013-6-24 16:52 | 只看该作者
ayb_ice 发表于 2013-6-24 16:31
RT:

谢谢你

使用特权

评论回复
17
wll_2012|  楼主 | 2013-6-24 16:59 | 只看该作者
ayb_ice 发表于 2013-6-24 16:31
RT:

咦,我的怎么没有你那个选项呢?

使用特权

评论回复
18
coody| | 2013-6-24 17:37 | 只看该作者
wll_2012 发表于 2013-6-24 14:20
在程序中即使给定addr一个固定的数值,仿真时显示的也不是那个给定的值,但是如果在变量addr前面加上stat ...

那就是很可能被优化掉了。

使用特权

评论回复
19
板砖横飞| | 2013-6-25 10:09 | 只看该作者
wll_2012 发表于 2013-6-24 16:52
仿真速度2mhz,应该不低了,先设置全局,成功后在改为局部,为什么呢?有什么说法吗 ...

感觉仿真速度比较慢的时候,可能处理不过来,我以前是1M的仿真速度时,局部的有时是不对的,可能局部变量要从堆栈中申请释放吧,后来10M的速度是,局部变量就没有出过问题。

使用特权

评论回复
20
wll_2012|  楼主 | 2013-6-25 10:29 | 只看该作者
板砖横飞 发表于 2013-6-25 10:09
感觉仿真速度比较慢的时候,可能处理不过来,我以前是1M的仿真速度时,局部的有时是不对的,可能局部变量 ...

哦,有这种可能啊,还不知道呢,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

96

帖子

0

粉丝