单片机编程全局变量会自己改变内容
最近用LPC1768做项目时发生了一件匪夷所思的事情,我定义了一个结构体(全局变量),但是在运行时候其中的内容会随着程序的运行而变化(运行期间没有对这个结构体做任何动作{:smile:} ),百思不得其解,还望高人指点一二,感激不尽!{:smile:} 其它数组或指针变量写穿了...就是说有其它的越界操作 内存泄漏或者是栈溢。 哪个大师说过的一句话,程序中莫名其秒的变量问题[无论局部还是全局],大都是数组越界造成的! 数组越界或指针越界。 xf331785508 发表于 2012-12-26 15:07 static/image/common/back.gif哪个大师说过的一句话,程序中莫名其秒的变量问题[无论局部还是全局],大都是数组越界造成的! ...
+1{:smile:} 你这种问题好找 直接使用高级端点设置修改这个变量时 暂停。 kebaojun305 发表于 2012-12-26 17:14 static/image/common/back.gif
你这种问题好找 直接使用高级端点设置修改这个变量时 暂停。
我在仿真时,单步运行,运行到好多个地方都可以使那个结构体(全局变量)中的成员变化,甚至运行的函数和那个结构没有一点的联系,那个结构体也在变化。很头疼的问题。不知道你所说的高级端点是不是这样做的,因为我对keil不很熟悉,我在网上找了找,也没有找到关于设置高级端点的文章,所以还请详加指点,谢谢!{:smile:} 肯定是你程序哪里修改了,或者捞过界了, xf331785508 发表于 2012-12-26 15:07 static/image/common/back.gif
哪个大师说过的一句话,程序中莫名其秒的变量问题[无论局部还是全局],大都是数组越界造成的! ...
我把那个结构体(全局变量)放在一边,重新定义了几个全局变量代替那个结构体,位置一样,赋值一样,仿真的时候新定义的那几个变量就不会改变,这种情况是不是属于数组越界造成的呢?{:call:} jackiezeng 发表于 2012-12-27 17:12 static/image/common/back.gif
肯定是你程序哪里修改了,或者捞过界了,
我把那个结构体(全局变量)放在一边,重新定义了几个全局变量代替那个结构体,位置一样,赋值一样,仿真的时候新定义的那几个变量就不会改变,这种情况是不是属于越界造成的呢?{:smile:} sbgavin 发表于 2012-12-27 17:14 static/image/common/back.gif
我把那个结构体(全局变量)放在一边,重新定义了几个全局变量代替那个结构体,位置一样,赋值一样,仿真 ...
你具体怎么弄的不清楚,反正我从来没有出现过非人为的原因导致的变量值改变的,,,,,
据说,强干扰会导致,,,但绝大多数的情况都是自己程序上的问题,,,
你自己好好找找吧, sbgavin 发表于 2012-12-27 17:12 static/image/common/back.gif
我把那个结构体(全局变量)放在一边,重新定义了几个全局变量代替那个结构体,位置一样,赋值一样,仿真 ...
位置一样,是代码位置一样吧,你重新定义一个结构体就不会变化的,基本上是数组越界或是堆栈溢出造成的。你运行其它与此结构体无关的函数也能引起变化,堆栈溢出的可能较大。把堆栈增大一倍试试。 仔细看看代码,估计是代码的问题{:smile:} 13楼正解, 发个程序一看就明白了。
一般就是越界了,数组或者栈,或者指针指错位置。 wswh2o 发表于 2012-12-29 16:12 static/image/common/back.gif
发个程序一看就明白了。
一般就是越界了,数组或者栈,或者指针指错位置。 ...
程序很大,关键是我也不知道哪个地方有溢出,有什么办法可以检测到时哪个地方溢出了吗?{:smile:} sbgavin 发表于 2013-1-9 16:11
程序很大,关键是我也不知道哪个地方有溢出,有什么办法可以检测到时哪个地方溢出了吗?...
大哥,你的这个问题解决了吗
我也遇到同样的问题了
页:
[1]