(单片机实际制作时)内外RAM的问题 (Keil软件 build窗口program size中data的单位)
我用keil编译C程序时,Build窗口(没有错误与警告)显示:ProgramSize:data67.1,xdata758,code4538,有那位同志知道这三个数值的单...
我用keil编译C程序时, Build窗口(没有错误与警告)显示:Program Size:data 67.1 ,xdata 758,code 4538,有那位同志知道这三个数值的单位分别是什么吗?
补充:主要是涉及个人实际制作,担心片内RAM不够用。
我用的keil vu3 汉化版虽然不是正版的keil,但它并没有2K代码限制。
发现问题的经过:
起初认为data的单位是B。可是data 的数值不能再大了,“源文件浏览器”中发现一些简单的变量在xdata区。即使将这些变量用data来定义,“源文件浏览器”还是告诉我这些变量在xdata区,而且Build窗口(没有错误与警告)仍旧显示:Program Size:data 67.1 ,xdata 758,code 4538。难道真的是“单片机优先把变量存储在内部ram里,如果内部ram不够了,才会存到外部去.”了吗?真是这样的话,data的单位肯定不是B,因为最小的51单片机RAM也有128B呀。
思来想去,不得其解。望各位师叔师姑师兄师姐伸出援手。
后来都已经用上AT89C51RC2了,而且target选项卡也在“使用片内RAM”前打上勾了,RC2足足有1280B的RAM呀。仍是Program Size:data 67.1 ,xdata 758,code 4538。
我的提问没有个主题,现在补充一下吧。就是:上述data在Build窗口的单位是多少?67.1是data的最大值了吗?还是说可以通过一些设置提高data值的上限?
若我的提问本身就有问题,也希望朋友们不吝赐教。 展开
补充:主要是涉及个人实际制作,担心片内RAM不够用。
我用的keil vu3 汉化版虽然不是正版的keil,但它并没有2K代码限制。
发现问题的经过:
起初认为data的单位是B。可是data 的数值不能再大了,“源文件浏览器”中发现一些简单的变量在xdata区。即使将这些变量用data来定义,“源文件浏览器”还是告诉我这些变量在xdata区,而且Build窗口(没有错误与警告)仍旧显示:Program Size:data 67.1 ,xdata 758,code 4538。难道真的是“单片机优先把变量存储在内部ram里,如果内部ram不够了,才会存到外部去.”了吗?真是这样的话,data的单位肯定不是B,因为最小的51单片机RAM也有128B呀。
思来想去,不得其解。望各位师叔师姑师兄师姐伸出援手。
后来都已经用上AT89C51RC2了,而且target选项卡也在“使用片内RAM”前打上勾了,RC2足足有1280B的RAM呀。仍是Program Size:data 67.1 ,xdata 758,code 4538。
我的提问没有个主题,现在补充一下吧。就是:上述data在Build窗口的单位是多少?67.1是data的最大值了吗?还是说可以通过一些设置提高data值的上限?
若我的提问本身就有问题,也希望朋友们不吝赐教。 展开
展开全部
先说说这几个词是什么意思:
1,DATA,51的内部RAM,只有128B(字节)大小,不管是最新的什么增强型单片机;
2,XDATA,外部RAM,只能使用MOVX寻址
3,CODE,代码区,即是你的代码的大小,AT89C51为4K,C52为8K等,增强型的有更多的选择。
然后说明一下,几种RAM的区别:
1,DATA,也是上面1提到的DATA RAM,占51的128B;
2,IDATA,大小也为128B,与DATA构成256字节的内存(如AT89C52)
3,PDATA,外部RAM的前256B(就是一个页的大小),是XDATA的一部分;
4,XDATA,外部RAM
所以你的那个单片机的1280B,其实组成为:
DATA :128B
IDATA:128B
XDATA:1024B
所以你的问题,“使用片内RAM”打勾只是软件仿真用的;你的XDATA用了758B,说明你特意用XDATA关键字定了这么大的内存,比如大数组或者内存模式时,使用了lager模式,那么编译器会自动把超出的部分放到XDATA里,我猜你应该是这里选择了lager模式,不过你的内容这么大,也只能选择lager模式。
以上为原创,如果想看更详细的介绍,可以看以下链接:
http://hi.baidu.com/efei789/blog/item/cf9afc0a12a4801994ca6bfb.html
1,DATA,51的内部RAM,只有128B(字节)大小,不管是最新的什么增强型单片机;
2,XDATA,外部RAM,只能使用MOVX寻址
3,CODE,代码区,即是你的代码的大小,AT89C51为4K,C52为8K等,增强型的有更多的选择。
然后说明一下,几种RAM的区别:
1,DATA,也是上面1提到的DATA RAM,占51的128B;
2,IDATA,大小也为128B,与DATA构成256字节的内存(如AT89C52)
3,PDATA,外部RAM的前256B(就是一个页的大小),是XDATA的一部分;
4,XDATA,外部RAM
所以你的那个单片机的1280B,其实组成为:
DATA :128B
IDATA:128B
XDATA:1024B
所以你的问题,“使用片内RAM”打勾只是软件仿真用的;你的XDATA用了758B,说明你特意用XDATA关键字定了这么大的内存,比如大数组或者内存模式时,使用了lager模式,那么编译器会自动把超出的部分放到XDATA里,我猜你应该是这里选择了lager模式,不过你的内容这么大,也只能选择lager模式。
以上为原创,如果想看更详细的介绍,可以看以下链接:
http://hi.baidu.com/efei789/blog/item/cf9afc0a12a4801994ca6bfb.html
意法半导体(中国)投资有限公司
2023-08-25 广告
2023-08-25 广告
单片机是一种集成处理器,通常包含微控制器、存储器、通信接口和其他外设。它们通常用于嵌入式系统,如智能家居设备、汽车电子系统、工业自动化和消费电子产品等。单片机可以通过编程来实现各种功能,如数据处理、输入输出控制、通信等。由于单片机体积小、功...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
选择内存模式为small:variables in DATA
按理说不会去XDATA,看看是否定义了大的数组?uint mtab[100]之类的?
可否给出源程序?
按理说不会去XDATA,看看是否定义了大的数组?uint mtab[100]之类的?
可否给出源程序?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
都是字节,我写了个小程序试过了,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询