问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于c51存储类型和其数据长度,有点不懂,求指点

发布网友 发布时间:2022-05-08 14:10

我来回答

2个回答

热心网友 时间:2024-02-15 19:57

你上面的表格,可以说,是完全上的逻辑错误。
C语言,一个数据类型的长度只有以下几种:
unsigned char 或者 char 固定8位的长度,即一个字节
unsigned short 或者 short 固定16位长度,即两个字节
unsigned long 或者 long 固定 32位长度,即四个字节
float固定32位长度,即四个字节
double ,固定64位长度,即8个字节,但是在C51里,是32位,因为C51是把double转换成float来编译的。
另外还有union和struct,长度是不固定的。
在C51里扩展了bit类型,1个位的长度

长度,只取决与以上类型,与data,idata,bdata,xdata,pdata没有关系,所以,你上面的表格是错误的。

而那些data,idata,bdata,xdata,pdata等等,是变量或者常量的存储空间。

51单片机有以下几个内存模块组成:

ROM或者Flash就不说了。
RAM有------内部RAM的低128字节(00-7F)
-------内部RAM的高128字节(80-FF)---【89C51单片机没有这一段空间】
-------特殊功能寄存器(SFR)(80-FF)
------外部RAM 64K(0000-FFFF)

code表示是在Flash(ROM)中,是只读的。

data 表示的是内部RAM的低128字节,可以直接寻址,速度比较快

idata 表示内部RAM高128字节,只能是间接寻址,速度比data里的数据要慢。

pdata是外部RAM,也就是xdata中的前256个,也就是外部RAM中的00--FF,只能MOVX 间接寻址,但是,因为可以用R0做为指针,所以,速度与idata是一样的。

xdata是外部RAM的全部,也可以包括前256个,也就是说,外部RAM前256个,可以用pdata和xdata定义,都行,只能是MOVX 和 DPTR联合寻址,速度最慢。

详细内容,参考下面的链接:
http://zhidao.baidu.com/question/400032408?&oldq=1

举例:
data unsigned char a;//---放在内部RAM空间的低128字节,长度是8位
data unsigned short a;//---放在内部RAM空间的低128字节,长度是16位
data unsigned long a;//---放在内部RAM空间的低128字节,长度是32位

idata unsigned char a;//---放在内部RAM空间的高128字节,长度是8位
idata unsigned short a;//---放在内部RAM空间的高128字节,长度是16位
idata unsigned long a;//---放在内部RAM空间的高128字节,长度是32位

pdata unsigned char a;//---放在外部RAM空间的低256字节,长度是8位
pdata unsigned short a;//---放在外部RAM空间的低256字节,长度是16位
pdata unsigned long a;//---放在内部RAM空间的低256字节,长度是32位追问您好,其实我也是看不懂这个表才问的,data,code,pdata。。。这些只是表示存储在那个地方,而这个表确实是我们教科书上有的,我不敢说书上的就全对,但编书的人总有他的意图,那么我就在想,他这个表里的数据长度是不是一个范围,而不是 固定的长度

追答他这个表完全就是个错误啊,没有任何解释的意义。
data,code,pdata。。。这些只是表示存储在那个地方,至于数据的长度,不知道啊。

你不能说:data 的长度是 8bit,一字节,范围是 0-255,这根本就是不对的。
比如说,data unsigned long aaa,这个就是长度 32bit,4字节,范围是 0-4294967295.

因为完全不对,所以,你的问题我根本没法回答你。

就好像你问我,“一个石头的雌性还是雄性?” 一样,石头根本没有性别属性,我怎么回答你呢?

同样的data ,pdata,xdata这些根本就没有 “长度” 这一属性。
你问我,data 的长度是 8bit吗?你让我怎么回答你呢?

抱歉,我再补充一下:
如果换个角度,这个表也不是完全的错误,就是寻址的范围来看:
data 是片内RAM直接寻址,低128字节,在C语言里,编译器会自动扩展到内部RAM的高128字节的间接寻址,寻址用的寄存器是 8位寄存器R0,R1,所以,data 和 idata的寻址长度是 8bit,寻址的范围是 0-255

pdata的片外RAM的低256字节,寻址用的寄存器是 8位寄存器R0,R1,寻址长度是8bit,寻址的范围是 0-255

也就是说,data + idata 的空间最大只有 256个字节,pdata的空间最大也只有256字节。
如果你这样定义 :
data unsigned char aa[257] ;这就错了,因为超过了最大256的限定。
idata unsigned char aa[257] ;这就错了,因为超过了最大256的限定。
pdata unsigned char aa[257] ;这就错了,因为超过了最大256的限定。

而code 和 xdata 寻址用的寄存器是 16位寄存器DPTR,所以,寻址长度是8bit,寻址的范围是 0-65535
code 和 xdata 最大只有 65536个字节,注意,我说的是最大。
xdata unsigned char aa[65537] ;这就错了,因为超过了最大65536的限定。
code unsigned char aa[65537] ;这就错了,因为超过了最大65536的限定。

如果从 寻址范围这个角度上看,这个表格是对的。

热心网友 时间:2024-02-15 19:58

题主的问题可能是这样的,就是说:uchar code table【】={这里面可以放多少个uchar}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
瑞安皇都大厦几个电梯 办签证和护照的具体步骤和一共的费用!我需要详细一点的答案. 办护照流程 办护照的流程是什么 哪位推荐几部韩剧啊!!要像豪杰春香,魔女幼熙这样的,剧情要感人,最好是... 小阴唇内应该是光滑的吗,阴道口痒为什么 阴道口有像草莓样正常吗 任氏族谱字辈:世秉忠贞 永达明玉起 国正天元律迎祖大继昌 河南夏氏家谱辈分我是永城市酂城镇夏氏夏世界具家谱记载洪武二年始祖良... 夏侯姓字辈排行 夏氏辈行,我爷爷明字辈,我父亲应字辈,我是崇字辈,后面是什么辈? 单片机高手求教 在标准的C语言的数据类型基础上,C51加入了哪些特殊类型?取值范围? c51对于标准的c语言扩展了哪些数据类型 c51支持哪些数据类型?混合运算时候,类型转换顺序? 写出C51几种典型的数据类型 如何查找账单逾期 银行说我信用卡逾期了,那张卡我都没怎么用,能帮我查到信用卡逾期账单? 浪漫言情电影 纯真年代好看吗? 一部韩国古装爱情悲情电影,男女主角最后一起沉入湖底死了,求片名 我们的纯真年代友玲最后跟谁在一起了 伊迪丝华顿的《纯真年代》中的埃伦结局是什么?她最后到底算离婚了还是没离 我们的纯真年代大结局是什么,人物结局 我们的纯真年代大结局是什么,大结局,人物最终结局 大学四级作文范文 法国地址,帮我翻译下啊 请问巴黎的古董和旧货市场? ruest是什么意思 N97下载软件的时候常出现“Reruest timeout"是什么意思、怎么解决啊、要不下不了东西 这句话怎么读,有加分 C51中使用最广泛的三个数据类型是? 淘宝店招制作要怎么做? C51语言的数据类型 C51编译器支持的存储器类型有哪些? C51中的数字默认的数据类型是什么。 .c51语言在标准c语言基础上扩展了4种数据类型是什么?并进行说明 1.C51有几种基本数据类型,与C语言有什么不同? 电脑老是卡机不动死机! 中国2010年上海世博会思科馆的网真技术 第三次突破颈线选股公式 请老师给这个指标做个选股公式啊,突破红线时选股 将下列指标带有三角粉色突破文字做个选股公式,谢谢高手! Office2010的产品密钥是甚么? pdfFactory pro 3.35的注册机的用户名机注册码 求pdfFactory Pro Enterprise v2.51的注册码。万分感谢!! pdf410pro-chs 序列号 求pdfFactory Pro 2.1的用户名和序列号 华为畅享20E什么蓝牙都可以配吗 lol星之守护者ez好像是六周年限定皮肤,随票附送,但商城会有卖吗? 星之守护者是不是只有ez是限定