查看: 5302|回复: 22

[其他] [求助]变量自己变化,推测是栈溢出,但不是很懂,求解

[复制链接]

该用户从未签到

8

主题

60

帖子

0

注册会员

Rank: 2

积分
165
最后登录
1970-1-1
发表于 2013-10-10 10:21:33 | 显示全部楼层 |阅读模式
小弟在编写程序中会莫名出现设置的变量值会自己变化的情况,最近就专门想弄清楚。查阅相关资料,感觉是栈溢出了,但又找不出问题在哪,特来向各位前辈求教。
小弟有个word型的全局变量SlfLrnValue,只在初始化是设为0,但程序运行一会儿后值就会变化,使用watchpoint观察何时变量会被写入,每次程序都是停在保存AD数值函数的结尾处,发现SlfLrnValue的值,与保存AD值函数的变量(word *)Values的值相同,与寄存器A的值相同,是寄存器HX的前两位。
但函数byte ADSamp_GetValue16(word *Values)是有PE自动生成的,而调用程序为
void ADSamp_OnEnd(void)
{
  /* Write your code here ... */
  if(ADSamp_GetValue16(ADVal)==ERR_OK)
    ProgFlag.Bits.bADEnd = 1;
}
个人感觉也没有问题,其中ADVal定义为word ADVal[11];
恳请各位前辈指点,谢谢!
我知道答案 目前已有21人回答
回复

使用道具 举报

该用户从未签到

8

主题

60

帖子

0

注册会员

Rank: 2

积分
165
最后登录
1970-1-1
 楼主| 发表于 2013-10-10 10:26:43 | 显示全部楼层

回复:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

 这个是设置断点,观察到的正常状态,其中ADVal数组的地址是0x2149
正常状态.png
回复 支持 反对

使用道具 举报

该用户从未签到

8

主题

60

帖子

0

注册会员

Rank: 2

积分
165
最后登录
1970-1-1
 楼主| 发表于 2013-10-10 10:28:35 | 显示全部楼层

回复:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

程序第一次停止,出现变量自己变化的情况 
异常状态1.png
回复 支持 反对

使用道具 举报

该用户从未签到

8

主题

60

帖子

0

注册会员

Rank: 2

积分
165
最后登录
1970-1-1
 楼主| 发表于 2013-10-10 10:29:27 | 显示全部楼层

回复:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

 程序第二次停止,变量自己变化的情况
异常状态2.png
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-10-10 14:07:14 | 显示全部楼层

    RE:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    这里word *Values是一个指针,他指向了你的入口地址。当程序运行到别处的时候,这个指针可能会变换。对于指针的使用你可以看一下C语言中的介绍。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    60

    帖子

    0

    注册会员

    Rank: 2

    积分
    165
    最后登录
    1970-1-1
     楼主| 发表于 2013-10-10 14:28:56 | 显示全部楼层

    回复:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    进一步调试,在程序正常时,单步执行AD采样程序时,11路通道是逐步执行,出现异常时,每采样一个通道,都要跳到函数结束处的“}”处,同时AD值的高位就赋值给了变量SlfLrnValue
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    60

    帖子

    0

    注册会员

    Rank: 2

    积分
    165
    最后登录
    1970-1-1
     楼主| 发表于 2013-10-10 14:31:46 | 显示全部楼层

    回复:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    回复第 5 楼 于2013-10-10 14:07:14发表:
    这里word *Values是一个指针,他指向了你的入口地址。当程序运行到别处的时候,这个指针可能会变换。对于指针的使用你可以看一下C语言中的介绍。
     
    安版,您好!
           关键是程序里除了在初始化时将变量SlfLrnValue设为0,其他地方根本没有使用,但在AD采样程序中,会发生变化,但也不是每次都会这样
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-10-10 16:20:58 | 显示全部楼层

    RE:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    按你的测试过程应该是出错以后SlfLrnValue值就变了是吗?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    60

    帖子

    0

    注册会员

    Rank: 2

    积分
    165
    最后登录
    1970-1-1
     楼主| 发表于 2013-10-11 08:05:40 | 显示全部楼层

    回复:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    <div style="padding:5px;border:1px dashed #ccc;">回复第 8 楼 于2013-10-10 16:20:58发表:
    按你的测试过程应该是出错以后SlfLrnValue值就变了是吗?
    安版,您好!
           是的,PE自动生成的AD值保存程序如下:
         byte ADSamp_GetValue16(word *Values)
    {
      if (!OutFlg) {                       /* Is output flag set? */
        return ERR_NOTAVAIL;               /* If no then error */
      }

      Values[0] = (word)((ADSamp_OutV[0])
    异常3.png
    异常2.png
    异常1.png
    正常.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-10-11 09:29:06 | 显示全部楼层

    RE:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    很可能是因为定义格式的问题。你看一下word定义是unsigned int吗?最好能把工程发上来。我好帮你测试一下。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-2 19:56 , Processed in 0.108066 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表