我写的51程序是不是跑飞了。
我洗的程序硬件仿真是没问题的,下载到RAM为256的单片机,没反应,我在找了一个1KRAM的单片机,跟仿真一样,没问题。这是什么情况呢。。。 你没找个RAM128的试试? tam2907 发表于 2014-8-8 10:34你没找个RAM128的试试?
256的都不行了。128应该更加不行吧! 而且,程序超过8K所以就用了一款RAM256,ROM16K的单片机了。 自己顶上来一下!!!!!跪求大神出来解答啊 你IDE建立工程的时候选择的芯片,需要和你实际使用的芯片相对应才行。或者你可以手工修改icf文件,使链接器在链接的时候把变量都分配到实际存在的空间上去。 shandian 发表于 2014-8-8 12:09
你IDE建立工程的时候选择的芯片,需要和你实际使用的芯片相对应才行。或者你可以手工修改icf文件,使链接器 ...
我选的芯片型号是相对应的。因为他们之前都是这么选的,我是刚来公司,做的第一个项目。还有什么可能吗?我觉得你说的这个问题,的确是有概率! 写个hello看飞不飞?这要写飞了改行搬砖,高收入行业。
检查存储模式,idata, xdata, code不超范围。 rain73 发表于 2014-8-8 15:49
写个hello看飞不飞?这要写飞了改行搬砖,高收入行业。
检查存储模式,idata, xdata, code不超范围。 ...
写个hello肯定是没问题的。
我定义的时候,基本上用了idata,全部的变量加在一起也才5,60个,不可能超的。我用的RAM是256的。生成的HEX大小9K多,我选用的ROM是16K的,也不会超的啊! Program Size: data=后面的数字是不是快接近256了? csaaa 发表于 2014-8-8 22:42
是不是内存泄露了?某个地方在循环中不停申请新内存,而不是在使用已有的空间? ...
这是为什么呢?我在用256RAM的时候程序没跑起来的感觉。但是用1K的RAM的单片机的时候,跑起来完全没问题!还有,真的是内存泄露,怎么处理呢?大神请指教啊 iquer 发表于 2014-8-8 22:08
Program Size: data=后面的数字是不是快接近256了?
我用的是medwin,这是万利的产品。编译结束的时候没有这个提示。
不过我自己个人感觉不可能接近256,我定义的时候都用u年signed char idata,而且我数了一下变量,65个左右。 堆栈嵌套多不多?这个也很耗内存的 dadongleilei 发表于 2014-8-9 12:51
堆栈嵌套多不多?这个也很耗内存的
不多啊!加中断,最多的顶多六层吧! 51内部idata ram最多也就256字节把那些1K的是扩展的xdata ram,有没有什么变量倍放置在xdata区了啊 如果有可能,第一天就要上机实验,搞到最后一天才发现原来一直不能在真机运行,会哭的 ARM菜鸟 发表于 2014-8-9 21:53
51内部idata ram最多也就256字节把那些1K的是扩展的xdata ram,有没有什么变量倍放置在xdata区了啊 ...
被放置到xdata?不可能啊,我定义的时候没用到xdata,都是用idata来定义的。
现在看了,程序会进外部中断,但是其他的反应一个都没有,写的显示程序,也什么都不会显示! javabean 发表于 2014-8-9 22:02
如果有可能,第一天就要上机实验,搞到最后一天才发现原来一直不能在真机运行,会哭的 ...
硬件仿真的一点问题都没有,写到单片机进去发现不工作,真是欲哭无泪。。。。。。。。求指导! rockyyangyang 发表于 2014-8-9 22:54
硬件仿真的一点问题都没有,写到单片机进去发现不工作,真是欲哭无泪。。。。。。。。求指导! ...
仿真是让所有工作最后崩溃的罪魁祸首,相信真机,别信仿真,仿真没事真机出事的情况多了去了,软件硬件都是bug,最后以量产为准,没办法,仿真没问题你给客户装电脑去仿真去吧 重新建一个工程,功能一点一点的加,在在真机上实验,看看问题出在哪,可以用svn,加一个i功能真机测试好了,提交,再增加其他功能。svn可以在本机上建立服务的 javabean 发表于 2014-8-9 23:06
仿真是让所有工作最后崩溃的罪魁祸首,相信真机,别信仿真,仿真没事真机出事的情况多了去了,软件硬件都 ...
我也知道啊,前期你总得在电脑上调试吧!
我现在看了编译结果,提示data=119,xdata=7我想说,我定义变量的时候没用到xdata,都用idata跟data直接定义的,这个xdata哪里出现的呢? rockyyangyang 发表于 2014-8-9 23:59
我也知道啊,前期你总得在电脑上调试吧!
我现在看了编译结果,提示data=119,xdata=7我想说,我定义变 ...
程序在电脑上写,仿真还 是别太相信,你防盗实际的平台上看效果 rockyyangyang 发表于 2014-8-9 23:59
我也知道啊,前期你总得在电脑上调试吧!
我现在看了编译结果,提示data=119,xdata=7我想说,我定义变 ...
汗,现在才发现到这个?之前看你说变量个数用人工算,除了你自己的,还有库也要用到,怎么算得出,除非不用库。 内部RAM不要占用过多,给堆栈留一点 内存用超了吧,看看编译的结果,每个内存用了多少,实际IC有没有那么多,这个非常关键,因为大部分情况确实是内存不够用,子程序相互调用需要堆栈的 Ai_evan 发表于 2014-8-10 00:33
程序在电脑上写,仿真还 是别太相信,你防盗实际的平台上看效果
就是实际中,下载到RAM256的单片机就不能运行了,但是1K的就可以! rain73 发表于 2014-8-10 07:03
汗,现在才发现到这个?之前看你说变量个数用人工算,除了你自己的,还有库也要用到,怎么算得出,除非不 ...
请问我该这么解决呢?还有啊,虽然data是119了,但是我用的RAM大小是256的啊,怎么样也不会超吧!
求解答! cn_badboy 发表于 2014-8-10 09:16
内部RAM不要占用过多,给堆栈留一点
RAM用256的,现在data达到119,堆栈的内存应该没问题吧!
没定义xdata类型的,但是编译结果xdata=7,不知道哪里来的。
javabean 发表于 2014-8-10 09:26
内存用超了吧,看看编译的结果,每个内存用了多少,实际IC有没有那么多,这个非常关键,因为大部分情况确实 ...
没超吧! data到119,但是我用的是256的。现在在奇怪哪里冒出一个xdata,我没定义这类型的 rockyyangyang 发表于 2014-8-10 09:31
请问我该这么解决呢?还有啊,虽然data是119了,但是我用的RAM大小是256的啊,怎么样也不会超吧!
求解 ...
应该很明显了,1k可运行,因为他超256都是xdata,而256的没有,把xdata清除应就可以了 rain73 发表于 2014-8-10 09:38
应该很明显了,1k可运行,因为他超256都是xdata,而256的没有,把xdata清除应就可以了 ...
我不知道该这么解决,变量到119,不是还没到256吗?你说的库,我就只调用了一个#include<reg52.h>,xdata真的都不知道哪里出来的!很想解决。 rain73 发表于 2014-8-10 09:38
应该很明显了,1k可运行,因为他超256都是xdata,而256的没有,把xdata清除应就可以了 ...
你说的把xdata清楚,我该怎么清楚?因为我没定义这样类型的变量!不知道从哪里清除。 XDATA是编译器自己产生的,没有定义存储类型的用LARGE模式编译会默认XDATA 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);
看到hex文件9K多,我就笑了。hex文件不是二进制文件的大小,实际的代码还没达到8K lcofjp 发表于 2014-8-10 09:58
看到hex文件9K多,我就笑了。hex文件不是二进制文件的大小,实际的代码还没达到8K ...
hex大小是27K 。。。我之前想表达的是code已经9K多了! cn_badboy 发表于 2014-8-10 09:45
XDATA是编译器自己产生的,没有定义存储类型的用LARGE模式编译会默认XDATA
我现在吧编译器设置成small模式,xdata不见了!
Program Size: data=126.0 xdata=0 code=8234
这样应该没影响了吧!!!!明天下载到单片机试一试。 如果已经全部指定为IDATA,编译器还自行产生了几个XDATA变量,就是RAM不够用了,想办法减少变量吧 cn_badboy 发表于 2014-8-10 10:05
如果已经全部指定为IDATA,编译器还自行产生了几个XDATA变量,就是RAM不够用了,想办法减少变量吧 ...
这个跟我设置keil的memory model是什么模式有关系吗?之前一直全部设置为large,听了你的改成small的,马上就不见了!
你说ram不够很奇怪啊,data才119,我用的ram是256的。变量也真的才那么几个!
会不会是编译器设置的问题? 程序运行中还需要RAM,程序嵌套越多,需要的越大,RAM接近用光,就算跑起来,某种情况下,也有堆栈溢出的可能。 cn_badboy 发表于 2014-8-10 10:20
程序运行中还需要RAM,程序嵌套越多,需要的越大,RAM接近用光,就算跑起来,某种情况下,也有堆栈溢出的可 ...
是需要RAM,我用了一半,不是还剩下一半吗?
我现在最关心的是不是编译器设置的问题! 单步仿真吧,看跑到哪里飞了 cn_badboy 发表于 2014-8-10 11:42
单步仿真吧,看跑到哪里飞了
硬件单步仿真,或者全速运行都是没问题的。
关键就是下载到单片机就没反应了, 就是XDATA的问题了,很明显1K的RAM中是有XDATA的,256的没有。
学习了。我来帮你看看呢 程序大小超了ram是烧写不进去的,程序问题吧
页:
[1]