搜索
bottom↓
回复: 17

单片机编程全局变量会自己改变内容

[复制链接]

出0入0汤圆

发表于 2012-12-26 14:17:50 | 显示全部楼层 |阅读模式
最近用LPC1768做项目时发生了一件匪夷所思的事情,我定义了一个结构体(全局变量),但是在运行时候其中的内容会随着程序的运行而变化(运行期间没有对这个结构体做任何动作 ),百思不得其解,还望高人指点一二,感激不尽!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-12-26 14:29:06 | 显示全部楼层
其它数组或指针变量写穿了...就是说有其它的越界操作

出10入120汤圆

发表于 2012-12-26 14:43:41 | 显示全部楼层
内存泄漏或者是栈溢。

出0入0汤圆

发表于 2012-12-26 15:07:15 | 显示全部楼层
哪个大师说过的一句话,程序中莫名其秒的变量问题[无论局部还是全局],大都是数组越界造成的!

出0入21汤圆

发表于 2012-12-26 15:36:01 | 显示全部楼层
数组越界或指针越界。

出0入0汤圆

发表于 2012-12-26 15:37:16 | 显示全部楼层
xf331785508 发表于 2012-12-26 15:07
哪个大师说过的一句话,程序中莫名其秒的变量问题[无论局部还是全局],大都是数组越界造成的! ...

+1

出0入8汤圆

发表于 2012-12-26 17:14:28 | 显示全部楼层
你这种问题好找 直接使用高级端点  设置修改这个变量时 暂停。

出0入0汤圆

 楼主| 发表于 2012-12-27 17:09:13 | 显示全部楼层
kebaojun305 发表于 2012-12-26 17:14
你这种问题好找 直接使用高级端点  设置修改这个变量时 暂停。

我在仿真时,单步运行,运行到好多个地方都可以使那个结构体(全局变量)中的成员变化,甚至运行的函数和那个结构没有一点的联系,那个结构体也在变化。很头疼的问题。不知道你所说的高级端点是不是这样做的,因为我对keil不很熟悉,我在网上找了找,也没有找到关于设置高级端点的文章,所以还请详加指点,谢谢!

出0入0汤圆

发表于 2012-12-27 17:12:38 | 显示全部楼层
肯定是你程序哪里修改了,或者捞过界了,

出0入0汤圆

 楼主| 发表于 2012-12-27 17:12:43 | 显示全部楼层
xf331785508 发表于 2012-12-26 15:07
哪个大师说过的一句话,程序中莫名其秒的变量问题[无论局部还是全局],大都是数组越界造成的! ...

我把那个结构体(全局变量)放在一边,重新定义了几个全局变量代替那个结构体,位置一样,赋值一样,仿真的时候新定义的那几个变量就不会改变,这种情况是不是属于数组越界造成的呢?

出0入0汤圆

 楼主| 发表于 2012-12-27 17:14:24 | 显示全部楼层
jackiezeng 发表于 2012-12-27 17:12
肯定是你程序哪里修改了,或者捞过界了,

我把那个结构体(全局变量)放在一边,重新定义了几个全局变量代替那个结构体,位置一样,赋值一样,仿真的时候新定义的那几个变量就不会改变,这种情况是不是属于越界造成的呢?

出0入0汤圆

发表于 2012-12-27 17:25:34 | 显示全部楼层
sbgavin 发表于 2012-12-27 17:14
我把那个结构体(全局变量)放在一边,重新定义了几个全局变量代替那个结构体,位置一样,赋值一样,仿真 ...

你具体怎么弄的不清楚,反正我从来没有出现过非人为的原因导致的变量值改变的,,,,,

据说,强干扰会导致,,,但绝大多数的情况都是自己程序上的问题,,,

你自己好好找找吧,

出0入0汤圆

发表于 2012-12-28 09:24:04 | 显示全部楼层
sbgavin 发表于 2012-12-27 17:12
我把那个结构体(全局变量)放在一边,重新定义了几个全局变量代替那个结构体,位置一样,赋值一样,仿真 ...

位置一样,是代码位置一样吧,你重新定义一个结构体就不会变化的,基本上是数组越界或是堆栈溢出造成的。你运行其它与此结构体无关的函数也能引起变化,堆栈溢出的可能较大。把堆栈增大一倍试试。

出0入0汤圆

发表于 2012-12-28 19:56:35 | 显示全部楼层
仔细看看代码,估计是代码的问题

出0入0汤圆

发表于 2012-12-29 11:41:49 来自手机 | 显示全部楼层
13楼正解,

出0入0汤圆

发表于 2012-12-29 16:12:51 | 显示全部楼层
发个程序一看就明白了。
一般就是越界了,数组或者栈,或者指针指错位置。

出0入0汤圆

 楼主| 发表于 2013-1-9 16:11:42 | 显示全部楼层
wswh2o 发表于 2012-12-29 16:12
发个程序一看就明白了。
一般就是越界了,数组或者栈,或者指针指错位置。 ...

程序很大,关键是我也不知道哪个地方有溢出,有什么办法可以检测到时哪个地方溢出了吗?

出0入0汤圆

发表于 2014-4-8 18:31:24 | 显示全部楼层
sbgavin 发表于 2013-1-9 16:11
程序很大,关键是我也不知道哪个地方有溢出,有什么办法可以检测到时哪个地方溢出了吗?  ...

大哥,你的这个问题解决了吗
我也遇到同样的问题了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 01:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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