rockyyangyang 发表于 2014-8-8 09:31:22

我写的51程序是不是跑飞了。

我洗的程序硬件仿真是没问题的,下载到RAM为256的单片机,没反应,我在找了一个1KRAM的单片机,跟仿真一样,没问题。这是什么情况呢。。。

tam2907 发表于 2014-8-8 10:34:16

你没找个RAM128的试试?

rockyyangyang 发表于 2014-8-8 11:50:54

tam2907 发表于 2014-8-8 10:34
你没找个RAM128的试试?

256的都不行了。128应该更加不行吧!   而且,程序超过8K所以就用了一款RAM256,ROM16K的单片机了。

rockyyangyang 发表于 2014-8-8 11:59:47

自己顶上来一下!!!!!跪求大神出来解答啊

shandian 发表于 2014-8-8 12:09:50

你IDE建立工程的时候选择的芯片,需要和你实际使用的芯片相对应才行。或者你可以手工修改icf文件,使链接器在链接的时候把变量都分配到实际存在的空间上去。

rockyyangyang 发表于 2014-8-8 15:30:14

shandian 发表于 2014-8-8 12:09
你IDE建立工程的时候选择的芯片,需要和你实际使用的芯片相对应才行。或者你可以手工修改icf文件,使链接器 ...

我选的芯片型号是相对应的。因为他们之前都是这么选的,我是刚来公司,做的第一个项目。还有什么可能吗?我觉得你说的这个问题,的确是有概率!

rain73 发表于 2014-8-8 15:49:30

写个hello看飞不飞?这要写飞了改行搬砖,高收入行业。
检查存储模式,idata, xdata, code不超范围。

rockyyangyang 发表于 2014-8-8 15:53:54

rain73 发表于 2014-8-8 15:49
写个hello看飞不飞?这要写飞了改行搬砖,高收入行业。
检查存储模式,idata, xdata, code不超范围。 ...

写个hello肯定是没问题的。
我定义的时候,基本上用了idata,全部的变量加在一起也才5,60个,不可能超的。我用的RAM是256的。生成的HEX大小9K多,我选用的ROM是16K的,也不会超的啊!

iquer 发表于 2014-8-8 22:08:52

Program Size: data=后面的数字是不是快接近256了?

csaaa 发表于 2014-8-8 22:42:32

rockyyangyang 发表于 2014-8-8 22:45:07

csaaa 发表于 2014-8-8 22:42
是不是内存泄露了?某个地方在循环中不停申请新内存,而不是在使用已有的空间? ...

这是为什么呢?我在用256RAM的时候程序没跑起来的感觉。但是用1K的RAM的单片机的时候,跑起来完全没问题!还有,真的是内存泄露,怎么处理呢?大神请指教啊

rockyyangyang 发表于 2014-8-8 22:47:48

iquer 发表于 2014-8-8 22:08
Program Size: data=后面的数字是不是快接近256了?

我用的是medwin,这是万利的产品。编译结束的时候没有这个提示。
不过我自己个人感觉不可能接近256,我定义的时候都用u年signed char idata,而且我数了一下变量,65个左右。

dadongleilei 发表于 2014-8-9 12:51:11

堆栈嵌套多不多?这个也很耗内存的

rockyyangyang 发表于 2014-8-9 19:38:35

dadongleilei 发表于 2014-8-9 12:51
堆栈嵌套多不多?这个也很耗内存的

不多啊!加中断,最多的顶多六层吧!

ARM菜鸟 发表于 2014-8-9 21:53:03

51内部idata ram最多也就256字节把那些1K的是扩展的xdata ram,有没有什么变量倍放置在xdata区了啊

javabean 发表于 2014-8-9 22:02:34

如果有可能,第一天就要上机实验,搞到最后一天才发现原来一直不能在真机运行,会哭的

rockyyangyang 发表于 2014-8-9 22:53:03

ARM菜鸟 发表于 2014-8-9 21:53
51内部idata ram最多也就256字节把那些1K的是扩展的xdata ram,有没有什么变量倍放置在xdata区了啊 ...

被放置到xdata?不可能啊,我定义的时候没用到xdata,都是用idata来定义的。
现在看了,程序会进外部中断,但是其他的反应一个都没有,写的显示程序,也什么都不会显示!

rockyyangyang 发表于 2014-8-9 22:54:09

javabean 发表于 2014-8-9 22:02
如果有可能,第一天就要上机实验,搞到最后一天才发现原来一直不能在真机运行,会哭的 ...

硬件仿真的一点问题都没有,写到单片机进去发现不工作,真是欲哭无泪。。。。。。。。求指导!

javabean 发表于 2014-8-9 23:06:26

rockyyangyang 发表于 2014-8-9 22:54
硬件仿真的一点问题都没有,写到单片机进去发现不工作,真是欲哭无泪。。。。。。。。求指导! ...

仿真是让所有工作最后崩溃的罪魁祸首,相信真机,别信仿真,仿真没事真机出事的情况多了去了,软件硬件都是bug,最后以量产为准,没办法,仿真没问题你给客户装电脑去仿真去吧

maimaige 发表于 2014-8-9 23:23:45

重新建一个工程,功能一点一点的加,在在真机上实验,看看问题出在哪,可以用svn,加一个i功能真机测试好了,提交,再增加其他功能。svn可以在本机上建立服务的

rockyyangyang 发表于 2014-8-9 23:59:32

javabean 发表于 2014-8-9 23:06
仿真是让所有工作最后崩溃的罪魁祸首,相信真机,别信仿真,仿真没事真机出事的情况多了去了,软件硬件都 ...

我也知道啊,前期你总得在电脑上调试吧!
我现在看了编译结果,提示data=119,xdata=7我想说,我定义变量的时候没用到xdata,都用idata跟data直接定义的,这个xdata哪里出现的呢?

Ai_evan 发表于 2014-8-10 00:33:06

rockyyangyang 发表于 2014-8-9 23:59
我也知道啊,前期你总得在电脑上调试吧!
我现在看了编译结果,提示data=119,xdata=7我想说,我定义变 ...

程序在电脑上写,仿真还 是别太相信,你防盗实际的平台上看效果

rain73 发表于 2014-8-10 07:03:31

rockyyangyang 发表于 2014-8-9 23:59
我也知道啊,前期你总得在电脑上调试吧!
我现在看了编译结果,提示data=119,xdata=7我想说,我定义变 ...

汗,现在才发现到这个?之前看你说变量个数用人工算,除了你自己的,还有库也要用到,怎么算得出,除非不用库。

cn_badboy 发表于 2014-8-10 09:16:53

内部RAM不要占用过多,给堆栈留一点

javabean 发表于 2014-8-10 09:26:39

内存用超了吧,看看编译的结果,每个内存用了多少,实际IC有没有那么多,这个非常关键,因为大部分情况确实是内存不够用,子程序相互调用需要堆栈的

rockyyangyang 发表于 2014-8-10 09:30:23

Ai_evan 发表于 2014-8-10 00:33
程序在电脑上写,仿真还 是别太相信,你防盗实际的平台上看效果

就是实际中,下载到RAM256的单片机就不能运行了,但是1K的就可以!

rockyyangyang 发表于 2014-8-10 09:31:42

rain73 发表于 2014-8-10 07:03
汗,现在才发现到这个?之前看你说变量个数用人工算,除了你自己的,还有库也要用到,怎么算得出,除非不 ...

请问我该这么解决呢?还有啊,虽然data是119了,但是我用的RAM大小是256的啊,怎么样也不会超吧!
求解答!

rockyyangyang 发表于 2014-8-10 09:33:51

cn_badboy 发表于 2014-8-10 09:16
内部RAM不要占用过多,给堆栈留一点

RAM用256的,现在data达到119,堆栈的内存应该没问题吧!
没定义xdata类型的,但是编译结果xdata=7,不知道哪里来的。

rockyyangyang 发表于 2014-8-10 09:35:01

javabean 发表于 2014-8-10 09:26
内存用超了吧,看看编译的结果,每个内存用了多少,实际IC有没有那么多,这个非常关键,因为大部分情况确实 ...

没超吧! data到119,但是我用的是256的。现在在奇怪哪里冒出一个xdata,我没定义这类型的

rain73 发表于 2014-8-10 09:38:46

rockyyangyang 发表于 2014-8-10 09:31
请问我该这么解决呢?还有啊,虽然data是119了,但是我用的RAM大小是256的啊,怎么样也不会超吧!
求解 ...

应该很明显了,1k可运行,因为他超256都是xdata,而256的没有,把xdata清除应就可以了

rockyyangyang 发表于 2014-8-10 09:41:28

rain73 发表于 2014-8-10 09:38
应该很明显了,1k可运行,因为他超256都是xdata,而256的没有,把xdata清除应就可以了 ...

我不知道该这么解决,变量到119,不是还没到256吗?你说的库,我就只调用了一个#include<reg52.h>,xdata真的都不知道哪里出来的!很想解决。

rockyyangyang 发表于 2014-8-10 09:45:14

rain73 发表于 2014-8-10 09:38
应该很明显了,1k可运行,因为他超256都是xdata,而256的没有,把xdata清除应就可以了 ...

你说的把xdata清楚,我该怎么清楚?因为我没定义这样类型的变量!不知道从哪里清除。

cn_badboy 发表于 2014-8-10 09:45:40

XDATA是编译器自己产生的,没有定义存储类型的用LARGE模式编译会默认XDATA

rockyyangyang 发表于 2014-8-10 09:50:07

cn_badboy 发表于 2014-8-10 09:45
XDATA是编译器自己产生的,没有定义存储类型的用LARGE模式编译会默认XDATA

我的确是设置在large模式!
“没有定义存储类型的用LARGE模式编译会默认XDATA”--除了定时中断的几个变量定义为data,其他类型的全部定义为idata。
函数入口参数我没有定义类型,比如我就直接void rec_24c24_data(uchar sla,uchar saddr,uchar *rec_24c02_s,uchar no);

lcofjp 发表于 2014-8-10 09:58:01

看到hex文件9K多,我就笑了。hex文件不是二进制文件的大小,实际的代码还没达到8K

rockyyangyang 发表于 2014-8-10 10:02:38

lcofjp 发表于 2014-8-10 09:58
看到hex文件9K多,我就笑了。hex文件不是二进制文件的大小,实际的代码还没达到8K ...

hex大小是27K 。。。我之前想表达的是code已经9K多了!

rockyyangyang 发表于 2014-8-10 10:04:20

cn_badboy 发表于 2014-8-10 09:45
XDATA是编译器自己产生的,没有定义存储类型的用LARGE模式编译会默认XDATA

我现在吧编译器设置成small模式,xdata不见了!
Program Size: data=126.0 xdata=0 code=8234
这样应该没影响了吧!!!!明天下载到单片机试一试。

cn_badboy 发表于 2014-8-10 10:05:41

如果已经全部指定为IDATA,编译器还自行产生了几个XDATA变量,就是RAM不够用了,想办法减少变量吧

rockyyangyang 发表于 2014-8-10 10:14:34

cn_badboy 发表于 2014-8-10 10:05
如果已经全部指定为IDATA,编译器还自行产生了几个XDATA变量,就是RAM不够用了,想办法减少变量吧 ...

这个跟我设置keil的memory model是什么模式有关系吗?之前一直全部设置为large,听了你的改成small的,马上就不见了!
你说ram不够很奇怪啊,data才119,我用的ram是256的。变量也真的才那么几个!
会不会是编译器设置的问题?

cn_badboy 发表于 2014-8-10 10:20:36

程序运行中还需要RAM,程序嵌套越多,需要的越大,RAM接近用光,就算跑起来,某种情况下,也有堆栈溢出的可能。

rockyyangyang 发表于 2014-8-10 11:03:50

cn_badboy 发表于 2014-8-10 10:20
程序运行中还需要RAM,程序嵌套越多,需要的越大,RAM接近用光,就算跑起来,某种情况下,也有堆栈溢出的可 ...

是需要RAM,我用了一半,不是还剩下一半吗?
我现在最关心的是不是编译器设置的问题!

cn_badboy 发表于 2014-8-10 11:42:37

单步仿真吧,看跑到哪里飞了

rockyyangyang 发表于 2014-8-10 13:23:02

cn_badboy 发表于 2014-8-10 11:42
单步仿真吧,看跑到哪里飞了

硬件单步仿真,或者全速运行都是没问题的。
关键就是下载到单片机就没反应了,

xiaobendan 发表于 2014-8-10 13:51:13

就是XDATA的问题了,很明显1K的RAM中是有XDATA的,256的没有。

270597983 发表于 2015-1-24 13:10:58

学习了。我来帮你看看呢

y623704481 发表于 2015-1-26 11:25:45

程序大小超了ram是烧写不进去的,程序问题吧
页: [1]
查看完整版本: 我写的51程序是不是跑飞了。