标题:
【求助】变量自己变化,推测是栈溢出,但不是很懂,求解
[打印本页]
作者:
yanbin560
时间:
2013-10-12 13:09
标题:
【求助】变量自己变化,推测是栈溢出,但不是很懂,求解
小弟在编写程序中会莫名出现设置的变量值会自己变化的情况,最近就专门想弄清楚。查阅相关资料,感觉是栈溢出了,但又找不出问题在哪,特来向各位前辈求教。
小弟有个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];
恳请各位前辈指点,谢谢!
作者:
yanbin560
时间:
2013-10-12 13:11
本帖最后由 yanbin560 于 2013-10-12 13:16 编辑
1#
yanbin560
进一步调试,在程序正常时,单步执行AD采样程序时,11路通道是逐步执行,出现异常时,每采样一个通道,都要跳到函数结束处的“}”处,同时AD值的高位就赋值给了变量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]) << 2); /* Save measured values to the output buffer */
Values[1] = (word)((ADSamp_OutV[1]) << 2); /* Save measured values to the output buffer */
Values[2] = (word)((ADSamp_OutV[2]) << 2); /* Save measured values to the output buffer */
Values[3] = (word)((ADSamp_OutV[3]) << 2); /* Save measured values to the output buffer */
。 。
。 。
。 。
Values[10] = (word)((ADSamp_OutV[10]) << 2); /* Save measured values to the output buffer */
return ERR_OK; /* OK */
}
在正确执行时,Values的值是ADVal[11]的地址,此时单步执行,就会一条一条语句顺序执行,一旦出错,程序会停在该程序的“}”处,运行下一步,会跳到“Values[3] = (word)((ADSamp_OutV[3]) << 2); ”,此时,指针Values的值是数组的地址,再执行下一步,程序不会到Values[4],而是直接跳到“}”,这个时候,Values的地址就变成了变量SlfLrnVal的地址了,同时,Values的内容和SlfLrnVal都变成了ADSamp_OutV[3]) 的高位字节了,再执行下一步,会跳到Values[4]的赋值,在执行下一步,又跳到“}”,同时SlfLrnVal的值发生变化,如此循环
同时,我发现,在出错时是无法再函数里设置断点的,而我在函数内设个静态指针来观察Values的值时,即在赋值前,p=Values,就不会发生异常了
图片附件:
正常.png
(2013-10-12 13:16, 71.04 KB) / 下载次数 485
http://bbs.eccn.com/attachment.php?aid=41506&k=c529990b86a5cc32c92301f7a1c209b0&t=1732234502&sid=5FPlw5
图片附件:
异常1.png
(2013-10-12 13:16, 74.13 KB) / 下载次数 476
http://bbs.eccn.com/attachment.php?aid=41507&k=6ab56eff86165e3fe72f5685a9b53cae&t=1732234502&sid=5FPlw5
图片附件:
异常2.png
(2013-10-12 13:16, 74.13 KB) / 下载次数 476
http://bbs.eccn.com/attachment.php?aid=41508&k=2207669bf8b1a5f2d9f0c8a851183c1a&t=1732234502&sid=5FPlw5
图片附件:
异常3.png
(2013-10-12 13:16, 73.89 KB) / 下载次数 455
http://bbs.eccn.com/attachment.php?aid=41509&k=e2cc5923821c8877d0159a4474060918&t=1732234502&sid=5FPlw5
作者:
yanbin560
时间:
2013-10-21 08:14
2#
yanbin560
求各位前辈指教
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0