首页 理论教育函数参数和局部变量存储方式

函数参数和局部变量存储方式

【摘要】:处于SMALL模式下函数的参数和局部变量位于8051单片机的内部RAM中,处于COMPACT和LARGE模式下函数的参数和局部变量则使用8051单片机的外部RAM。定义一个函数时可以明确指定函数的内存模式,一般形式如下:函数类型 函数名[存储器模式]其中,“存储器模式”是Keil Cx51编译器扩展的一个选项。不用该选项时即没有明确指定函数的存储器模式,这时该函数按编译时的默认存储区模式处理。

Keil Cx51编译器允许采用3种内存模式:SMALL、COMPACT和LARGE。一个函数的内存模式确定了函数的参数和局部变量在内存中的地址空间。处于SMALL模式下函数的参数和局部变量位于8051单片机的内部RAM中,处于COMPACT和LARGE模式下函数的参数和局部变量则使用8051单片机的外部RAM。定义一个函数时可以明确指定函数的内存模式,一般形式如下:

函数类型 函数名(形式参数表)[存储器模式]

其中,“存储器模式”是Keil Cx51编译器扩展的一个选项。不用该选项时即没有明确指定函数的存储器模式,这时该函数按编译时的默认存储区模式处理。(www.chuimin.cn)

存储器模式说明,举例如下:

该程序的第1行用了一个预编译命令“#pragma”,它的意思是告诉Keil Cx51编译器在对程序进行编译时,按该预编译命令后面给出的编译控制指令“LARGE”进行编译,即本例程序编译时的默认内存模式为LARGE。程序中共有5个函数:calc()、func()、*tcp()、mtest()和large_func(),其中前面4个函数都在定义时明确指定了其内存模式,只有最后一个函数未予指定。在用Cx51进行编译时,只有最后一个函数按LARGE内存模式处理,其余4个函数则分别按它们各自指定的内存模式处理。这个例子说明,Keil Cx51编译器允许采用所谓内存的混合模式,即允许一个程序中某个(或几个)函数使用一种内存模式,另一个(或几个)函数使用另一种内存模式。采用内存混合模式编程,可以充分利用8051单片机中有限的内存空间,同时还可以加快程序的执行速度。