如图,这些数据长度是是不是只是表示了一个范围,而不是他们固定就是这样的长度,比如code类型,我也可以这样定义:uchar code table[]={},表中的数据长度就是1个字节 , 我也可以这样定义:uint code talbe[]={}, 表中的数据长度就是2个字节,所以我就问下,就像上图中的长度是不 是只表示了长度范围,求指点
您好,其实我也是看不懂这个表才问的,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的限定。
如果从 寻址范围这个角度上看,这个表格是对的。