打印

疑难杂症:编译通过,程序不执行

[复制链接]
4759|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
yan2626156|  楼主 | 2012-1-4 10:03 | 只看该作者
问题补充:芯片是32K的flash,256的ram+2K的xram

使用特权

评论回复
板凳
panxiang1011| | 2012-1-4 11:08 | 只看该作者
不知道哦~!~!~!~!

使用特权

评论回复
地板
hyhmh| | 2012-1-4 11:39 | 只看该作者
C编译器 将 堆栈 定义在 256字节的RAM中.
再定义 一个变量仍位于RAM,可能引起 变量与 堆栈 共用某一RAM地址。(冲突)

使用特权

评论回复
5
yan2626156|  楼主 | 2012-1-4 11:51 | 只看该作者
那解决办法呢,我不可能不再定义变量了吧,程序还要继续写呢 4# hyhmh

使用特权

评论回复
6
bhsdlmj| | 2012-1-4 12:13 | 只看该作者
2K的xram  定义到XRAM

使用特权

评论回复
7
NE5532| | 2012-1-4 12:18 | 只看该作者
搜 程序调试黑宝书 看,楼主的问题不在此处。

使用特权

评论回复
8
yan2626156|  楼主 | 2012-1-4 16:43 | 只看该作者
无论定义data,idata,xdata,或者改变堆栈的大小都解决不了问题,看了那个程序调试黑宝书,还不错,里面的一些办法和思维现在也在用。还有没有一些其他的建议呢?

使用特权

评论回复
9
NE5532| | 2012-1-4 19:59 | 只看该作者
8层是共用体、数组之类溢出,要么就是编译器优化上的问题了。
总之肯定不会低级到是定义变量这个层次。

使用特权

评论回复
10
xiaomuhong26| | 2012-1-4 20:25 | 只看该作者
你不如将那个存储类型修改一下嘛  改成unsigned int xdata temp; 将temp这个变量定义到片上的外部存储器上面  但是这个时候你需要修改KEIL中的编译模式“SMALL”改为“LARGE”,否则定义了也使用不了,你不防试试

使用特权

评论回复
11
yan2626156|  楼主 | 2012-1-5 09:25 | 只看该作者
没有定义共用体,只有一个长度为7的整形数组,数组使用没有溢出。编译模式改为large也不行,哎,都纠结了一天了,就是找不到原因,看来看去都是很正常的程序。俺可是没有前辈带的啊,只能依靠网络上的大虾了,多多给点意见啊

使用特权

评论回复
12
jsnjxu| | 2012-1-5 10:02 | 只看该作者
阅过,留个印.

使用特权

评论回复
13
pankui85841| | 2012-1-5 13:46 | 只看该作者
编译通过只有设置可能会出问题吧!

使用特权

评论回复
14
原野之狼| | 2012-1-5 17:10 | 只看该作者
1 把问题描述清楚。现象、来源、你的分析、你尝试过的方法。
2 上代码
3 多看看NE5532的书

使用特权

评论回复
15
ayb_ice| | 2012-1-5 17:15 | 只看该作者
是否绝对定位变量
可能程序本身就有问题,只是少定义一个变量时被掩盖了,其实都不正常,只是现象不一致罢了

使用特权

评论回复
16
yan2626156|  楼主 | 2012-1-5 20:38 | 只看该作者
本帖最后由 yan2626156 于 2012-1-5 21:22 编辑

症状:
1.在定义多一个变量之前,程序编译可以通过,但是如果定义多一个变量之后,编译同样可以通过,但是下载到板子后,程序不运行。当我把那个变量注释掉的时候,程序有时候可以运行,有时候又不能运行了。
2.程序有时候下载后,通过下载软件的go(运行),程序可以跑起来。但是如果拔掉下载接口,再次上电,就又不能运行了。
尝试的解决办法:
1.对变量进行分累放到data,idata,xdata等并且把内存模式设置为small or large。因为我怀疑是堆栈溢出,但是问题没有解决。
2.我怀疑是数组过大(其实我的程序里就只有一个长度为7的整形数组),我把它注释掉了,程序也无法运行。
3.我怀疑是位变量作为函数参数搞得鬼,我就把位变成字符型,程序不运行
4.我怀疑是中断嵌套了搞得鬼,因为程序就只有两个中断,所以我把另外一个中断注释了,程序不运行。
5.我怀疑函数嵌套搞得鬼,我把所有嵌套的函数注释掉,同样没有解决问题。
6.我怀疑是变量运行过程溢出,我排查了很久,没发现哪个变量存在这样的隐患啊。
7.我怀疑是指针搞得鬼,因为我使用指针来传递数组参数的。但是我注释掉煮部分代码,程序还是不运行。
8.我怀疑是局部变量搞得鬼,但是我排查了半天,在一个函数里,最多的也即只有两个局部变量
9.编译器的优化级别我没有改动,是默认等级8
。。。。。。。。。
(注:以上的情况都是keil能通过编译,并成功下载到板子上出现的问题)
脑袋都大了,请各位前辈多多指点啊

使用特权

评论回复
17
yan2626156|  楼主 | 2012-1-5 20:40 | 只看该作者
程序里没有绝对定位变量 15# ayb_ice

使用特权

评论回复
18
xhtxzxw| | 2012-1-5 23:00 | 只看该作者
程序不算很长吧,发过来大家看看呗

使用特权

评论回复
19
yan2626156|  楼主 | 2012-1-6 08:04 | 只看该作者
本帖最后由 yan2626156 于 2012-1-6 08:12 编辑

程序,两千行,大家都是大忙人,而且发了两千行的代码上去,可能会影响别人阅读帖子。大家就凭着自己的经验给小弟一点建议。假如哪位大侠真的那么热心,可以留个邮箱,俺把代码发过去。谢谢了
下面为函数图:

使用特权

评论回复
20
ayb_ice| | 2012-1-6 08:37 | 只看该作者
没有定义之间已经有问题了,只是没有定义后那么明显罢了
不可能堆栈溢出,因为你的空闲RAM空间还多着呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

72

帖子

1

粉丝