打印
[STM32F1]

JLINK V8很多人没有见过的问题,求解。

[复制链接]
3153|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
feihong519|  楼主 | 2013-11-28 09:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用JLINK 仿真时,发现有的变量读出的结果为0,但实际不为0,有的变量就是正确的。很是奇怪。求解?
沙发
sxhhhjicbb| | 2013-11-28 09:28 | 只看该作者
有时候重启下软件就OK。可能每个人的现象一样,但原因不一样。

使用特权

评论回复
板凳
handlike| | 2013-11-28 09:46 | 只看该作者
设置成局部变量可能被优化掉了。
个别的我好像也遇到过楼主所说的现象。

使用特权

评论回复
地板
feihong519|  楼主 | 2013-11-28 10:29 | 只看该作者
我也是怀疑被优化掉了

使用特权

评论回复
5
戈卫东| | 2013-11-28 10:38 | 只看该作者
局部变量?

使用特权

评论回复
6
kkzz| | 2013-11-28 11:02 | 只看该作者
是没有初始化完成吧?

使用特权

评论回复
7
kkzz| | 2013-11-28 11:03 | 只看该作者
重新启动仿真的。

使用特权

评论回复
8
feihong519|  楼主 | 2013-11-28 12:00 | 只看该作者
全局变量没有问题,各别的局部变量不行,重启也不能解决。程序肯定没有问题。

使用特权

评论回复
9
feihong519|  楼主 | 2013-11-28 12:05 | 只看该作者
变量初始化了。进入函数后,局部变量被赋值了,并且断点在局部变量的作用域。即:局部变量赋值->断点(在这里仿真查看局部变量值与实际值不符)->程序该使用局部变量(变量的值和我实际的值相同,但是仿真的就是0)

使用特权

评论回复
10
戈卫东| | 2013-11-28 13:28 | 只看该作者
赋值之前能看到不过值没有传给它,赋值之后生存期已经结束值无效...

使用特权

评论回复
11
feihong519|  楼主 | 2013-11-28 14:39 | 只看该作者
写个示例吧:
void Abcd(void)
{
    unsigned char i;
    unsigned char aTempBuf[10] = {0};
   
    for(i = 0; i < 10; i ++)
    {
        aTempBuf = i;//对数组赋值
    }
    NOP();//在此设置断点(仿真发现数组中的值不对)
    //在此有一些函数使用aTempBuf数组的值(这里就不写了)
}

使用特权

评论回复
12
lycanthia| | 2013-11-28 15:56 | 只看该作者
改下优化等级,或者改为volatile的试试吧。

使用特权

评论回复
13
LDTEST| | 2013-11-28 17:06 | 只看该作者
feihong519 发表于 2013-11-28 14:39
写个示例吧:
void Abcd(void)
{

到这里 局部变量的寿命都结束了,看到的不真实

使用特权

评论回复
14
苏联小苹果| | 2013-11-29 08:43 | 只看该作者
局部变量若赋值后下边的代码不用到它,是看不到其真正值的

使用特权

评论回复
15
Ryanhsiung| | 2013-11-30 15:13 | 只看该作者
是不是在release版本?  release 就有这个问题

使用特权

评论回复
16
east森林| | 2013-11-30 21:05 | 只看该作者
没遇见过

使用特权

评论回复
17
51xlf| | 2013-11-30 21:15 | 只看该作者
断电试一下的。

使用特权

评论回复
18
lzmm| | 2013-11-30 22:21 | 只看该作者
应该不会出现时序问题的。

使用特权

评论回复
19
lzmm| | 2013-11-30 22:21 | 只看该作者
查找一下相关变量的。

使用特权

评论回复
20
122541325| | 2013-11-30 22:25 | 只看该作者
先重启试试,不行看看变量有没有错,这问题还真没遇到过,不好意思

使用特权

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

本版积分规则

17

主题

73

帖子

3

粉丝