这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 【求助】请教内存变量无故发生变化

共2条 1/1 1 跳转至

【求助】请教内存变量无故发生变化

院士
2006-09-17 18:14:16     打赏
【求助】请教内存变量无故发生变化



关键词: 求助     请教     内存     变量     无故     发生     变化    

院士
2006-12-22 22:43:00     打赏
2楼
问 我的系统中有若干全局静态变量。在线调试时已经可以确认在RAM中地址没有重叠,而且没有溢出。系统在工作负荷不大的情况下一切正常。但是如果长时间处于高负荷工作状态下(连续开启多个中断进行数据采集和运算),发现有一些变量出现莫名其妙的改变,而且出现了按照程序运行不可能出现的数值。
系统具有外部看门狗,可以确认主程序没有跑飞,此时停止运行,查看memoy窗口,发现RAM还有很多空间没有使用(没有使用的都是显示0),查看watch窗口,可以发现有一些变量出现莫名其妙的改变。
我使用的EW430_V220破解版,C语言。各位有没有看过这种现象?难道是破解版的问题吗? 1: 有哪位大侠知道呢?
恳请指教! 2: 是不是有中断嵌套? 3: 我在中断服务程序里面没有再次开中断,而且没有使用过乘法(应该没有调用到硬件乘法器)。 4: 变化是有规律性还是无规律性?每次都是相同的变量发生变化吗?跟踪一下,看在何处产生了变化!
奇怪ING? 5: 有没有例子程序? 6: 这种情况百分之九十九是程序修改了RAM,还是先从程序中查找问题。
至于其他原因我还没遇到过 7: 我觉得430真差,全局变量都会莫名其秒的变! 8: 哈,有可能是你的编译器设置的堆栈不够大,负荷大的时候堆栈溢出了,试试看。 9: 我有一次是因内存超出去了,变量产生变化,估计你这是在中断里内存超范围了 10: 如果方便的话,请发一段有问题的程序,看看我们能不能帮你解决一下 11: 我估计可能是D版编译器的原因。
我做了下面的试验。
unsigned int i;
i |= BIT9; //预先设置BIT9位为1
if ( i & BIT9 ) //这里if判断的结果经常会是Fault。但是在我起初的程序中,这样的判断写法是可以的。当程序大的时候,就出现问题了。必须写成下面形式才会得出结果为真。
if ( ( i & BIT9 ) == BIT9 )

你说是不是很奇怪?? 12: 自己帮自己顶一下! 13: 各位版主和高手,有人有时间回答我的疑问吗??
我觉得这个问题很难理解啊??

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]