C51编译器支持三种存储模式:SMALL模式、COMPACT模式和LARGE模式。不同的存储模式对变量默认的存储器类型不一样。
(1)SMALL模式。SMALL模式称为小编译模式,在SMALL模式下,编译时,函数参数和变量被默认在片内RAM中,存储器类型为data。
(2)COMPACT模式。COMPACT模式称为紧凑编译模式,在COMPACT模式下,编译时,函数参数和变量被默认在片外RAM的低256字节空间,存储器类型为pdata。
(3)LARGE模式。LARGE模式称为大编译模式,在LARGE模式下,编译时函数参数和变量被默认在片外RAM的64K字节空间,存储器类型为xdata。
在程序中变量的存储模式的指定通过#pragma预处理命令来实现。函数的存储模式可通过在函数定义时后面带存储模式说明。如果没有指定,则系统都隐含为SMALL模式。
【例】变量的存储模式。
#pragma small /*变量的存储模式为SMALL*/
char k1;
int xdata m1;
#pragma compact /*变量的存储模式为SMALL*/
char k2;
int xdata m2;
int func1(int x1,int y1) large /*函数的存储模式为LARGE*/
{ return(x1+y1);}
int func2(int x2,int y2) /*函数的存储模式隐含为SMALL*/
{ return(x2-y2);}
程序编译时,k1变量存储器类型为data,k2变量存储器类型为pdata,而m1和m2由于定义时带了存储器类型xdata,因而它们为xdata型;函数func1的形参x1和y1的存储器类型为xdata型,而函数func2由于没有指明存储模式,隐含为SMALL模式,形参x2和y2的存储器类型为data。