Keil C51编译器允许采用三种存储器模式:small、compact和large。一个函数的存储器模式确定了函数的参数和局部变量在内存中的地址空间。处于small模式下函数的参数和局部变量位于8051单片机的内部RAM中,处于compact和large模式下函数的参数和局部变量则使用8051单片机的外部RAM。在定义一个函数时可以明确指定该函数的存储器模式,一般形式为:
函数类型 函数名(形式参数表)[存储器模式]
其中,“存储器模式”是Keil C51编译器扩展的一个选项。不用该选项时即没有明确指定函数的存储器模式,这时该函数按编译时的默认存储器模式处理。
例2-33 函数的存储器模式。
这个例子程序的第一行用了一个预编译命令“#pragma”,它的意思是告诉Keil C51编译器在对程序进行编译时,按该预编译命令后面给出的编译控制指令“large”进行编译,即本例程序编译时的默认存储器模式为large。程序中一共有五个函数:calc()、func()、*tcp()、mtest()和large_func(),其中前面四个函数都在定义时明确指定了其存储器模式,只有最后一个函数未指定。在用C51进行编译时,只有最后一个函数按large存储器模式处理,其余四个函数则分别按它们各自指定的存储器模式处理。
这个例子说明,Keil C51编译器允许采用所谓存储器的混合模式,即允许在一个程序中某个(或几个)函数使用一种存储器模式,另一个(或几个)函数使用另一种存储器模式。采用存储器混合模式编程,可以充分利用8051系列单片机中有限的存储器空间,同时还可加快程序的执行速度。