利用全局及外部變量實(shí)現(xiàn)C51無能數(shù)化調(diào)用A51函數(shù)
發(fā)布時(shí)間:2008/6/3 0:00:00 訪問次數(shù):631
     福州北京郵電大學(xué)福建分校(350003) 林 穎
     來源:《電子技術(shù)應(yīng)用》
     摘要:利用c51全局及外部變量,可實(shí)現(xiàn)無參數(shù)化調(diào)用a51函數(shù),不但避免開了傳統(tǒng)c51調(diào)用c51時(shí)繁瑣的接口約定,而且把在a51中所用到的變量全部放至c51程序中而不必考慮變量在內(nèi)存中的位置,使編程更加簡(jiǎn)潔。用實(shí)例驗(yàn)證了該方法的優(yōu)越性和有效性。
    
    
     關(guān)鍵詞:c51
     a51 匯編語言 無參數(shù)化調(diào)用
     <<電子技術(shù)應(yīng)用>>2001年第7期發(fā)表茍帥的文章“asm51無參數(shù)化調(diào)用c51函數(shù)的實(shí)現(xiàn)”,闡述了asm51無參數(shù)化調(diào)用c51函數(shù)的實(shí)現(xiàn)原理并給出實(shí)例來驗(yàn)證該方法的優(yōu)越性和可行性。作者在文章中表明這樣一種觀點(diǎn):“利用匯編語言對(duì)i/o接口、中斷向量及程序空間分配的巨大優(yōu)勢(shì),讓程序員對(duì)mcs51內(nèi)的每一字節(jié)甚至是每一比特(可位尋址空間)全部進(jìn)行統(tǒng)籌安排,設(shè)計(jì)好各個(gè)程序模塊,包括i/o口地址和中斷向量地址的處理;同時(shí)在具體數(shù)據(jù)處理、通信等不需要過多與硬件打交道的程序模塊中,充分利用c51語言強(qiáng)大高效的編程能力”。上述觀點(diǎn)并沒有錯(cuò),但是對(duì)i/o接口、中斷向量及程序空間分配及mcs-51內(nèi)的每一個(gè)字節(jié)甚至是每一比特(可位尋址空間)全部進(jìn)行統(tǒng)籌安排,對(duì)于大多數(shù)程序員來講恰恰是件不容易的事。地址空間、棧的起始地址和中斷向量地址的分配等,經(jīng)常顧此失彼,這邊可行,那邊又出問題。其實(shí)完全可以把上述繁重的工作交給c51去完成,由c51定義各個(gè)變量并自動(dòng)分配各個(gè)變量的空間,而集中精力完成所需功能的a51程序設(shè)計(jì)。筆者在研制基于c51、插拔式dflash存儲(chǔ)器的無紙記錄儀中,就是利用全局及外部變量實(shí)現(xiàn)c51無參數(shù)化調(diào)用a51函數(shù)的,取得了很好的效果。
     1 c51無參數(shù)化調(diào)用a51函數(shù)的實(shí)現(xiàn)原理
     為了說明其原理,必須理解局部變量、全局變量和外部變量的意義。
     局部變量:是在函數(shù)內(nèi)部定義的變量,只在定義它的函數(shù)內(nèi)部有效,僅在使用它時(shí),才為它分配內(nèi)存單元。
     全局變量:又稱外部變量,是在函數(shù)外部定義的變量,可以為多個(gè)函數(shù)共同使用,其有效作用范圍是從它定義的位置開始直到整個(gè)程序文件結(jié)束。若一個(gè)全局變量不是在程序文件開始處定義的,但又希望在它的定義點(diǎn)之前的函數(shù)中引用該變量,這時(shí)應(yīng)在引用該變量的函數(shù)中用關(guān)鍵字extern將其說明為外部變量。此外如果一個(gè)程序模塊文件中應(yīng)用另一個(gè)程序模塊中定義的變量時(shí),也必須用extern進(jìn)行說明。全局變量在整個(gè)程序的執(zhí)行過程中都要占用內(nèi)存單元。
     外部變量(extern):使用存儲(chǔ)種類說明符extern定義的變量稱為外部變量。按照缺省規(guī)則,凡在所有函數(shù)之前,在函數(shù)外部定義的變量都是外部變量,定義時(shí)可以不寫extern說明符。但是,在一個(gè)函數(shù)體內(nèi)說明一個(gè)在該函數(shù)體外或別的程序模塊文件中定義過的外部變量時(shí),則必須使用extern說明符。一個(gè)外部變量被定義之后,它就被分配了固定的內(nèi)存空間。外部變量的生存期為程序的整個(gè)執(zhí)行時(shí)間。
     c語言允許將大型的程序分解為若干個(gè)獨(dú)立的程序模塊,各個(gè)模塊可分別進(jìn)行編譯,然后將它們連接在一起。如果某個(gè)變量需要在所有程序模塊文件中使用,只要在一個(gè)程序模塊中將該變量定義成全局變量,而在其它程序模塊中用extern說明該變量是已被定義過的外部變量就可以了。
     在c51中定義函數(shù)時(shí)如果冠以關(guān)鍵字extern即將其明確定義為一個(gè)外部函數(shù)。
     具體方法是:在c51用unsigned char定義的變量,則在a51中必須對(duì)應(yīng)聲明該變量在data區(qū);在c51用bit定義位變量,則在a51中必須對(duì)應(yīng)聲明該變量在可位選區(qū)。a51中用關(guān)鍵字extrn表示外部變量,對(duì)應(yīng)關(guān)系如下:
     c51 定義 a51聲明
     unsigned char varible_name<->extrn
     data(varible_name)
     bit bit_name <->extrn bit (bit_name)
     此外,c51編譯器支持在c語言
     福州北京郵電大學(xué)福建分校(350003) 林 穎
     來源:《電子技術(shù)應(yīng)用》
     摘要:利用c51全局及外部變量,可實(shí)現(xiàn)無參數(shù)化調(diào)用a51函數(shù),不但避免開了傳統(tǒng)c51調(diào)用c51時(shí)繁瑣的接口約定,而且把在a51中所用到的變量全部放至c51程序中而不必考慮變量在內(nèi)存中的位置,使編程更加簡(jiǎn)潔。用實(shí)例驗(yàn)證了該方法的優(yōu)越性和有效性。
    
    
     關(guān)鍵詞:c51
     a51 匯編語言 無參數(shù)化調(diào)用
     <<電子技術(shù)應(yīng)用>>2001年第7期發(fā)表茍帥的文章“asm51無參數(shù)化調(diào)用c51函數(shù)的實(shí)現(xiàn)”,闡述了asm51無參數(shù)化調(diào)用c51函數(shù)的實(shí)現(xiàn)原理并給出實(shí)例來驗(yàn)證該方法的優(yōu)越性和可行性。作者在文章中表明這樣一種觀點(diǎn):“利用匯編語言對(duì)i/o接口、中斷向量及程序空間分配的巨大優(yōu)勢(shì),讓程序員對(duì)mcs51內(nèi)的每一字節(jié)甚至是每一比特(可位尋址空間)全部進(jìn)行統(tǒng)籌安排,設(shè)計(jì)好各個(gè)程序模塊,包括i/o口地址和中斷向量地址的處理;同時(shí)在具體數(shù)據(jù)處理、通信等不需要過多與硬件打交道的程序模塊中,充分利用c51語言強(qiáng)大高效的編程能力”。上述觀點(diǎn)并沒有錯(cuò),但是對(duì)i/o接口、中斷向量及程序空間分配及mcs-51內(nèi)的每一個(gè)字節(jié)甚至是每一比特(可位尋址空間)全部進(jìn)行統(tǒng)籌安排,對(duì)于大多數(shù)程序員來講恰恰是件不容易的事。地址空間、棧的起始地址和中斷向量地址的分配等,經(jīng)常顧此失彼,這邊可行,那邊又出問題。其實(shí)完全可以把上述繁重的工作交給c51去完成,由c51定義各個(gè)變量并自動(dòng)分配各個(gè)變量的空間,而集中精力完成所需功能的a51程序設(shè)計(jì)。筆者在研制基于c51、插拔式dflash存儲(chǔ)器的無紙記錄儀中,就是利用全局及外部變量實(shí)現(xiàn)c51無參數(shù)化調(diào)用a51函數(shù)的,取得了很好的效果。
     1 c51無參數(shù)化調(diào)用a51函數(shù)的實(shí)現(xiàn)原理
     為了說明其原理,必須理解局部變量、全局變量和外部變量的意義。
     局部變量:是在函數(shù)內(nèi)部定義的變量,只在定義它的函數(shù)內(nèi)部有效,僅在使用它時(shí),才為它分配內(nèi)存單元。
     全局變量:又稱外部變量,是在函數(shù)外部定義的變量,可以為多個(gè)函數(shù)共同使用,其有效作用范圍是從它定義的位置開始直到整個(gè)程序文件結(jié)束。若一個(gè)全局變量不是在程序文件開始處定義的,但又希望在它的定義點(diǎn)之前的函數(shù)中引用該變量,這時(shí)應(yīng)在引用該變量的函數(shù)中用關(guān)鍵字extern將其說明為外部變量。此外如果一個(gè)程序模塊文件中應(yīng)用另一個(gè)程序模塊中定義的變量時(shí),也必須用extern進(jìn)行說明。全局變量在整個(gè)程序的執(zhí)行過程中都要占用內(nèi)存單元。
     外部變量(extern):使用存儲(chǔ)種類說明符extern定義的變量稱為外部變量。按照缺省規(guī)則,凡在所有函數(shù)之前,在函數(shù)外部定義的變量都是外部變量,定義時(shí)可以不寫extern說明符。但是,在一個(gè)函數(shù)體內(nèi)說明一個(gè)在該函數(shù)體外或別的程序模塊文件中定義過的外部變量時(shí),則必須使用extern說明符。一個(gè)外部變量被定義之后,它就被分配了固定的內(nèi)存空間。外部變量的生存期為程序的整個(gè)執(zhí)行時(shí)間。
     c語言允許將大型的程序分解為若干個(gè)獨(dú)立的程序模塊,各個(gè)模塊可分別進(jìn)行編譯,然后將它們連接在一起。如果某個(gè)變量需要在所有程序模塊文件中使用,只要在一個(gè)程序模塊中將該變量定義成全局變量,而在其它程序模塊中用extern說明該變量是已被定義過的外部變量就可以了。
     在c51中定義函數(shù)時(shí)如果冠以關(guān)鍵字extern即將其明確定義為一個(gè)外部函數(shù)。
     具體方法是:在c51用unsigned char定義的變量,則在a51中必須對(duì)應(yīng)聲明該變量在data區(qū);在c51用bit定義位變量,則在a51中必須對(duì)應(yīng)聲明該變量在可位選區(qū)。a51中用關(guān)鍵字extrn表示外部變量,對(duì)應(yīng)關(guān)系如下:
     c51 定義 a51聲明
     unsigned char varible_name<->extrn
     data(varible_name)
     bit bit_name <->extrn bit (bit_name)
     此外,c51編譯器支持在c語言
熱門點(diǎn)擊
- 光伏發(fā)電系統(tǒng)最大功率點(diǎn)跟蹤控制
- BA8206 BA4遙控風(fēng)扇控制器的新應(yīng)用
- CAN總線在混和動(dòng)力汽車電機(jī)控制系統(tǒng)中的應(yīng)用
- 基于TMS320F240的多種PWM實(shí)現(xiàn)
- 真有效值直流轉(zhuǎn)換芯片AD536A在直流點(diǎn)焊微
- 由單片機(jī)和多片DS1820組成的多點(diǎn)溫度測(cè)控
- KEELOQ技術(shù)的軟件實(shí)現(xiàn)
- 帶故障檢測(cè)的PWM風(fēng)扇轉(zhuǎn)速控制器MC642
- ZMD31050在數(shù)字式氣壓傳感器系統(tǒng)中的應(yīng)
- 用89C51和8254-2實(shí)際步進(jìn)式PWM輸
推薦技術(shù)資料
- DFRobot—玩的就是
- 如果說新車間的特點(diǎn)是“靈動(dòng)”,F(xiàn)QPF12N60C那么... [詳細(xì)]
- AMOLED顯示驅(qū)動(dòng)芯片關(guān)鍵技
- CMOS圖像傳感器技術(shù)參數(shù)設(shè)計(jì)
- GB300 超級(jí)芯片應(yīng)用需求分
- 4NP 工藝NVIDIA Bl
- GB300 芯片、NVL72
- 首個(gè)最新高端芯片人工智能服務(wù)器
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究