位置:51电子网 » 技术资料 » 嵌入式系统

利用全局及外部变量实现C51无能数化调用A51函数

发布时间:2008/6/3 0:00:00 访问次数:623

        作者:福州福建省电子技术研究所(350001)庄文斌

     福州北京邮电大学福建分校(350003) 林 颖

     来源:《电子技术应用》

     摘要:利用c51全局及外部变量,可实现无参数化调用a51函数,不但避免开了传统c51调用c51时繁琐的接口约定,而且把在a51中所用到的变量全部放至c51程序中而不必考虑变量在内存中的位置,使编程更加简洁。用实例验证了该方法的优越性和有效性。

    

    

     关键词:c51

     a51 汇编语言 无参数化调用

     <<电子技术应用>>2001年第7期发表苟帅的文章“asm51无参数化调用c51函数的实现”,阐述了asm51无参数化调用c51函数的实现原理并给出实例来验证该方法的优越性和可行性。作者在文章中表明这样一种观点:“利用汇编语言对i/o接口、中断向量及程序空间分配的巨大优势,让程序员对mcs51内的每一字节甚至是每一比特(可位寻址空间)全部进行统筹安排,设计好各个程序模块,包括i/o口地址和中断向量地址的处理;同时在具体数据处理、通信等不需要过多与硬件打交道的程序模块中,充分利用c51语言强大高效的编程能力”。上述观点并没有错,但是对i/o接口、中断向量及程序空间分配及mcs-51内的每一个字节甚至是每一比特(可位寻址空间)全部进行统筹安排,对于大多数程序员来讲恰恰是件不容易的事。地址空间、栈的起始地址和中断向量地址的分配等,经常顾此失彼,这边可行,那边又出问题。其实完全可以把上述繁重的工作交给c51去完成,由c51定义各个变量并自动分配各个变量的空间,而集中精力完成所需功能的a51程序设计。笔者在研制基于c51、插拔式dflash存储器的无纸记录仪中,就是利用全局及外部变量实现c51无参数化调用a51函数的,取得了很好的效果。

     1 c51无参数化调用a51函数的实现原理

     为了说明其原理,必须理解局部变量、全局变量和外部变量的意义。

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

     全局变量:又称外部变量,是在函数外部定义的变量,可以为多个函数共同使用,其有效作用范围是从它定义的位置开始直到整个程序文件结束。若一个全局变量不是在程序文件开始处定义的,但又希望在它的定义点之前的函数中引用该变量,这时应在引用该变量的函数中用关键字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语言

        作者:福州福建省电子技术研究所(350001)庄文斌

     福州北京邮电大学福建分校(350003) 林 颖

     来源:《电子技术应用》

     摘要:利用c51全局及外部变量,可实现无参数化调用a51函数,不但避免开了传统c51调用c51时繁琐的接口约定,而且把在a51中所用到的变量全部放至c51程序中而不必考虑变量在内存中的位置,使编程更加简洁。用实例验证了该方法的优越性和有效性。

    

    

     关键词:c51

     a51 汇编语言 无参数化调用

     <<电子技术应用>>2001年第7期发表苟帅的文章“asm51无参数化调用c51函数的实现”,阐述了asm51无参数化调用c51函数的实现原理并给出实例来验证该方法的优越性和可行性。作者在文章中表明这样一种观点:“利用汇编语言对i/o接口、中断向量及程序空间分配的巨大优势,让程序员对mcs51内的每一字节甚至是每一比特(可位寻址空间)全部进行统筹安排,设计好各个程序模块,包括i/o口地址和中断向量地址的处理;同时在具体数据处理、通信等不需要过多与硬件打交道的程序模块中,充分利用c51语言强大高效的编程能力”。上述观点并没有错,但是对i/o接口、中断向量及程序空间分配及mcs-51内的每一个字节甚至是每一比特(可位寻址空间)全部进行统筹安排,对于大多数程序员来讲恰恰是件不容易的事。地址空间、栈的起始地址和中断向量地址的分配等,经常顾此失彼,这边可行,那边又出问题。其实完全可以把上述繁重的工作交给c51去完成,由c51定义各个变量并自动分配各个变量的空间,而集中精力完成所需功能的a51程序设计。笔者在研制基于c51、插拔式dflash存储器的无纸记录仪中,就是利用全局及外部变量实现c51无参数化调用a51函数的,取得了很好的效果。

     1 c51无参数化调用a51函数的实现原理

     为了说明其原理,必须理解局部变量、全局变量和外部变量的意义。

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

     全局变量:又称外部变量,是在函数外部定义的变量,可以为多个函数共同使用,其有效作用范围是从它定义的位置开始直到整个程序文件结束。若一个全局变量不是在程序文件开始处定义的,但又希望在它的定义点之前的函数中引用该变量,这时应在引用该变量的函数中用关键字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语言

相关IC型号

热门点击

 

推荐技术资料

DFRobot—玩的就是
    如果说新车间的特点是“灵动”,FQPF12N60C那么... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!