共2条
1/1 1 跳转至页
【求助】请教内存变量无故发生变化
问
我的系统中有若干全局静态变量。在线调试时已经可以确认在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: 各位版主和高手,有人有时间回答我的疑问吗??
我觉得这个问题很难理解啊??
系统具有外部看门狗,可以确认主程序没有跑飞,此时停止运行,查看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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |