一、Keil 51中的const与code & Keil MDK中的const与code
在Keil 51中,code修饰的变量放在ROM(Flash)中,而const修饰的变量为只读(不可修改),放在RAM中!
在Keil MDK中,如进行STM32的开发,code修饰符无法使用,使用的话会报错。那么要怎么来修饰存放在ROM中的变量?此时是用到const,用const修饰的变量是存放在ROM中的。
二、修饰变量
1.date 与idate
我们正常定义的变量默认是是data 区的
data:访问直接寻址的片内存储器,即内部RAM,它采用直接寻址方式,对变量最高速的访问最快
idata:访问间接寻址的片内存储器,即内部RAM .
eg:BF6952A 采用 DW8051 核作为 MCU 核,
●16K FLASH
● 256(内部)+512(外部)字节 SRAM
这是他的内存
data
区:共有
256
字节,地址为
00H~FFH
,其中包括工作寄存器组、位寻址区、缓
冲以及
SFR
,其中缓冲区包含了堆栈区。通过立即寻址方式来读取与写数据。
idata
区:共有
128
字节,地址为
80H~FFH
,该区域用户可以完全使用。通过工作寄
存器间接寻址方式来读取与写数据。
这是手册的解释,date区有256字节,idate128个字节,所以可见后面的
地址
80H~FFH
data 区与idata 区是共用空间;所以当我们定义不同区时,访问的速度不一样和存储的空间不一样,所以在定义程序变量时要注意堆栈空间,避免程序跑飞。
2.xdate 与pdate
xdata:访问外部数据存储器,即外部RAM
pdata:访问当前页面内的外部RAM中的XDATA,每一页256字节,按页访问;
(对PDATA 段寻址比对XDATA 段寻址要快,因为对PDATA 段寻址只需要装入8 位地址,而对XDATA 段寻址需装入16 位地址,所以尽量把外部数据存储在PDATA 段中。)
3.外部RAM与内部RAM
所以这两个区别简单说读取速度的区别,对于应用是要区别,内部空间相对小,对于程序中的全局变量或单个局部变量需占较大存储空间时,可以定义为xdata型,保存到XRAM区;对于要经常用到的变量可以定义到外部RAM。