data:RAM低128字节,响应速度最快,采用直接寻址方式
idata:RAM高128字节,采用间接寻址,速度相对较慢
bdata:片内RAM,位寻址方式
xdata:外部扩展RAM,使用DPTR访问
pdata:外部扩展RAM的低256字节,分页寻址(一页256字节)
代码:程序存储区
解释
我们先看一下某型号51单片机的手册介绍:
微控制器内部共有三种存储器:内部RAM(IRAM)、外部RAM(XRAM)和程序存储器(IROM)。 内部RAM由256字节组成,具有较高的访问性能(支持直接寻址和间接寻址)。 相比之下,外部 RAM 的大小为 1KB,但需要更长的访问周期。 程序存储器为16KB FLASH存储器,最快访问速度可达8MHz。
内部内存
内部 RAM 共有 256 字节。
低128字节可以直接寻址,并且空间被分配给RAM区域的低128字节中的变量。
int a = 0;
char b[100] = {0};
如果直接用这种方式创建的变量超过128字节,编译就会报错。
需要给一些变量添加idata关键字,并在RAM区域的高128字节中为这些变量分配空间。
idata int c = 0;
idata d[100] = {0};
外部内存
要为外部 RAM 中的变量分配空间,请使用 xdata 关键字
xdata int flag = 1;
xdata myArr[1000] = {0};
需要频繁访问的变量最好放在内部RAM中,例如定时器计数变量。
不经常访问的变量可以放在外部RAM中,例如标志位
程序存储器
程序存储器(ROM),顾名思义,存储用户程序,属于FLASH存储器。 您还可以使用 code 关键字将变量存储在 ROM 中。 一般情况下,ROM中的值都是常量,不能修改。
例如:使用Modbus CRC校验表查找方法时,有两个数组非常大且固定。 这时,可以在数组前面添加code关键字,并在ROM中为其分配空间。
因为它也是FLASH,所以可以用来做一些内存处理,比如在硬件关闭时保存一些状态或者数据。