DATA区域寻址最快,应该把经常使用的变量放在DATA区,但是其存储空间有限,
DATA区除了包含程序变量外,还包括了堆栈和寄存器组。
unsigned int data xx[8];
BDATA区是DATA中的位寻址区,在这个区中声明变量就可以进行位寻址。
unsigned int bdata status_byte;
IDATA区使用寄存器作为指针来进行间接寻址,常用来存放使用比较频繁的变量。
与外部寄存器相比,它的指令执行周期和代码长度相对较短。
unsigned int idata xx[8];
访问片外数据存储区比访问片内存储区慢,因为片外数据存储区是通过数据指针加载地址来间接
寻址访问的。C51提供两种不同的数据类型xdata和pdata来访问片外数据存储区。
pdata区只有256字节,仅指定256字节的外部数据存储区。但xdata区最多可达64KB,
对应的xdata存储类型标识符可以指定外部数据区64KB内的任务地址。
unsigned int pdata xx[8];
char xdata string[16];
程序存储区只能读不能写,51单片机的内部或者外部,或者内外部都有,
由单片机的硬件决定,C51提供了code存储类型来访问程序存储区。
unsigner char code a[]={0x00,0x01,0x02,0x03,0x04,0x05,...};
data :可直接寻址的内部数据存储区(128B) 可寻址片内ram
idata:不可直接寻址的内部数据存储区(256B) 可寻址片内ram,允许访问全部内部ram
bdata:可位寻址内部数据存储区(16B) 可位寻址的片内ram
xdata:外部数据存储区(64KB) 可寻址片外ram(64k地址范围)
pdata:分页的外部数据存储区 分页寻址片外ram(MOVX@R0)(256 BYTE/页),最好不用,据说有BUG
code :程序存储区(64KB) 程序存储区(64k地址范围),对应MOVC@DPTR
data 定义的是芯片的内核RAM,如51系列的前0X00-0X7F,和4个分组的R1-R7,所占用的区域.
xdata 定义的芯片内核外部的扩展RAM,包括芯片外扩展的RAM,和芯片内扩展的RAM.