原创 转 C51 局部变量、全局变量和外部变量

2008-12-18 00:45 6431 10 10 分类: MCU/ 嵌入式

局部变量:是在函数内部定义的变量,只在定义它的函数内部有效,仅在使用它时,才为它分配内存单元。


 


全局变量:又称外部变量,是在函数外部定义的变量,可以为多个函数共同使用,其有效作用范围是从它定义的位置开始直到整个程序文件结束。若一个全局变量不是在程序文件开始处定义的,但又希望在它的定义点之前的函数中引用该变量,这时应在引用该变量的函数中用关键字EXTERN将其说明为外部变量。此外如果一个程序模块文件中应用另一个程序模块中定义的变量时,也必须用EXTERN进行说明。全局变量在整个程序的执行过程中都要占用内存单元。


 


外部变量(EXTERN):使用存储种类说明符EXTERN定义的变量称为外部变量。按照缺省规则,凡在所有函数之前,在函数外部定义的变量都是外部变量,定义时可以不写EXTERN说明符。但是,在一个函数体内说明一个在该函数体外或别的程序模块文件中定义过的外部变量时,则必须使用EXTERN说明符。一个外部变量被定义之后,它就被分配了固定的内存空间。外部变量的生存期为程序的整个执行时间。


 


C语言允许将大型的程序分解为若干个独立的程序模块,各个模块可分别进行编译,然后将它们连接在一起。如果某个变量需要在所有程序模块文件中使用,只要在一个程序模块中将该变量定义成全局变量,而在其它程序模块中用EXTERN说明该变量是已被定义过的外部变量就可以了。


 


在C51中定义函数时如果冠以关键字EXTERN即将其明确定义为一个外部函数。


 


具体方法是:在C51用unsigned char定义的变量,则在A51中必须对应声明该变量在DATA区;在C51用bit定义位变量,则在A51中必须对应声明该变量在可位选区。A51中用关键字EXTRN表示外部变量,对应关系如下:


 


C51 定义 A51声明


unsigned char varible_name<->EXTRN DATA(varible_name)


bit bit_name <->EXTRN BIT (bit_name)


 


此外,C51编译器支持在C语言源程序中直接编写8051单片机的中断服务程序,从而减轻采用汇编语言编写中断服务程序的繁锁程度。C51编译器对函数的定义进行了扩展,增加了一个扩展关键字interrupt。定义中断服务函数的一般格式为:


 


函数类型 函数名(形式参数表) [interrupt n][using n]


interrupt后面的n是中断号,取值为0~31,编译器从8n+3处产生中断向量。


Using后的n取值为0~3,表示选择那一组寄存器。

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /2 下一条