51单片机一般有RAM和XRAM,RAM访问速度快,但是容量小,一般编译器会根据程序情况,自动分配,也可以手动分配
方式1:定义变量的时候 前面加 xdata关键字, 则分配到XRAM
例如 unsigned char xdata str[] = “Hello C51!”;
定义变量的时候 前面加 data关键字, 则分配到RAM
例如 unsigned char data str[] = “Hello C51!”;
方式2:在Keil或者编译环境中可以调整内存模式为Large,Small,Compact,如下图
选定一种模式后,再配合方式1,对指定变量做例外处理。
比如,在我们需要将我们写的核心算法程序做lib时,lib里面变量比较多,则可以选定Large模式,则没有特殊说明,变量被分配到XRAM,一些和用户程序接口的变量,则可以通过指定data分配到RAM区,供用户程序快速访问。
另外,编译代码时,也可以指定编译模式,会影响最终使用到的指令和地址空间范围,large模式支持64K地址寻址,当然代码量也是最大的。如下图