国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Keil的51單片機(jī)匯編程序多文件編譯

2014-04-29 00:44陳彩歡甘露
中國(guó)電子商情 2014年7期
關(guān)鍵詞:定位器可讀性指令

陳彩歡 甘露

引言:本文結(jié)合Keil μVision2程序開發(fā)流程,描述了51單片機(jī)匯編程序多文件編譯的實(shí)現(xiàn)方法。通過多文件編譯的使用,大大提高了匯編程序代碼的可讀性、可擴(kuò)展性,同時(shí)也很大程度地提高程序代碼的執(zhí)行效率以及內(nèi)存空間的使用率,避免內(nèi)存空間的浪費(fèi)。

一、序言

近年來,隨著C語言的進(jìn)一步推廣使用,絕大多數(shù)的工程師都傾向于使用C語言進(jìn)行單片機(jī)系統(tǒng)開發(fā),匯編語言由于可讀性、通用性、可移植性差的原因,很難滿足產(chǎn)品開發(fā)的需求。但是匯編語言具有執(zhí)行效率高、占用內(nèi)存空間小等特點(diǎn),在某些應(yīng)用領(lǐng)域還是具有無可替代的作用。

本文結(jié)合Keil μVision2程序開發(fā)流程,描述了51單片機(jī)匯編程序多文件編譯的實(shí)現(xiàn)方法。通過多文件編譯的使用,大大提高了匯編程序代碼的可讀性、可擴(kuò)展性,同時(shí)也很大程度地提高程序代碼的執(zhí)行效率以及內(nèi)存空間的使用率,避免內(nèi)存空間的浪費(fèi)。

二、Keil μVision2程序開發(fā)流程簡(jiǎn)介

Keil μVision2是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)軟件集成開發(fā)環(huán)境,該軟件提供宏匯編器、鏈接/定位器、庫(kù)管理器、調(diào)試器以及目標(biāo)文件轉(zhuǎn)換器等工具,是51單片機(jī)系統(tǒng)開發(fā)的首選工具。

Keil μVision2集成開發(fā)環(huán)境的編譯流程如下:首先宏匯編器對(duì)匯編源程序文件進(jìn)行編譯,生成擴(kuò)展名為.OBJ的目標(biāo)文件和擴(kuò)展名為.LST的列表文件,緊接著鏈接/定位器將所有的.OBJ文件進(jìn)行絕對(duì)地址分配,鏈接生成包含絕對(duì)地址的目標(biāo)文件和擴(kuò)展名為.M51的地址文件,最后由目標(biāo)文件轉(zhuǎn)換器生成可用于編程器燒寫、擴(kuò)展名為.HEX的可執(zhí)行文件。

三、匯編程序多文件編譯實(shí)現(xiàn)

在Keil μVision2集成開發(fā)環(huán)境下,我們可以根據(jù)不同的硬件模塊、功能模塊分開編寫應(yīng)用子程序,進(jìn)行模塊化管理,實(shí)現(xiàn)多文件編譯,這樣就可以大大提高匯編程序代碼的可讀性、可擴(kuò)展性。以下首先對(duì)段和模塊的概念進(jìn)行描述。

一個(gè)段可以是一塊程序代碼或者是一個(gè)數(shù)據(jù)塊。根據(jù)其地址空間是否可以被鏈接/定位器更改,段可以分為可定位段和絕對(duì)地址段。在定義可重定位段的時(shí)候需要對(duì)其段名、類型及其屬性進(jìn)行定義。一個(gè)段可以分在不同的程序模塊中,只要具有相同的段名,在編譯過程中鏈接/定位器會(huì)把它們合并到一起。在定義絕對(duì)地址段的時(shí)候直接人為分配絕對(duì)地址,鏈接/定位器不能對(duì)改地址進(jìn)行更改。絕對(duì)地址段沒有段名,也不能給其他段結(jié)合。

模塊是一個(gè)可以被單獨(dú)編譯的代碼單元,可以包含一個(gè)或多個(gè)段或者部分段,一個(gè)模塊既可以是單個(gè)文本文件,也可以通過INCLUDE指令把幾個(gè)文本文件合并在一起。在程序編譯過程中,匯編器會(huì)把一個(gè)模塊編譯為一個(gè)目標(biāo)文件,也就是一個(gè)模塊對(duì)應(yīng)一個(gè).OBJ文件。

根據(jù)以上對(duì)段和模塊的描述,匯編程序的多文件編譯可以通過以下三個(gè)方法來實(shí)現(xiàn):

1、通過INCLUDE指令合并源文件

在代碼編寫時(shí),通過INCLUDE指令可以將一個(gè)源文件插入到當(dāng)前源文件中,這樣匯編器在編譯的時(shí)候就會(huì)將INCLUDE指令之后的文件合并到當(dāng)前文件進(jìn)行編譯,生成一個(gè)擴(kuò)展名為.OBJ的目標(biāo)文件。INCLUDE指令的格式如下:

$ INCLUDE (文件名)

通過該方式實(shí)現(xiàn)多文件編譯時(shí),插入的源文件既可以是擴(kuò)展名為.ASM的匯編源程序文件,也可以是擴(kuò)展名為.INC的包含文件。注意在被包含的源文件結(jié)尾不能有END指令,否則編譯會(huì)停止運(yùn)行。

2、通過絕對(duì)地址段實(shí)現(xiàn)多文件編譯

Keil μVision2中提供以下定義絕對(duì)地址段的指令,通過這些指令可以定義代碼段和各種數(shù)據(jù)段,并指定其絕對(duì)地址。

由于絕對(duì)地址段在定義的時(shí)候?qū)Φ刂愤M(jìn)行了分配,鏈接/定位器不能夠?qū)ζ涞刂愤M(jìn)行更改,因此很容易造成地址重疊或者內(nèi)存空間浪費(fèi),而且在后續(xù)對(duì)程序進(jìn)行維護(hù)、升級(jí)的時(shí)候很有可能需要重新對(duì)地址進(jìn)行分配,非常不利于程序的擴(kuò)展和維護(hù)。因此絕對(duì)地址段通常是用在某些特定的場(chǎng)合,例如確定中斷向量的入口地址、數(shù)據(jù)存儲(chǔ)空間等。

3、通過可重定位段實(shí)現(xiàn)多文件編譯

在Keil μVision2中,通過SEGMENT指令即可定義可重定位段。定義可重定位段時(shí)必須指定段的名稱和存儲(chǔ)類型,其格式如下:

四、總結(jié)

通過以上三種方式,均可以實(shí)現(xiàn)多文件編譯,但是在實(shí)際使用過程中,INCLUDE指令通常用于包含特殊功能寄存器的定義等;絕對(duì)地址段則通常用于確定中斷向量的入口地址、數(shù)據(jù)存儲(chǔ)空間;而可重定位段的方式則廣泛地用于各種代碼段或數(shù)據(jù)段的定義。

通過多文件編譯的方式,解決了單文件編譯會(huì)導(dǎo)致程序文件過于臃腫、可讀性差、不便于維護(hù)等缺點(diǎn),大大提高匯編程序代碼的可讀性以及可維護(hù)性。

參考文獻(xiàn)

[1] Keil Software. A51/AX51/A251 Macro Assembler and Utilities.2001.

[2]孫涵芳,徐愛卿.MCS-51/96系列單片機(jī)原理及應(yīng)用(修訂版).1996.

(作者單位:1、珠海格力電器股份有限公司;2、格力電器(合肥)有限公司)

猜你喜歡
定位器可讀性指令
聽我指令:大催眠術(shù)
可讀性
定位器故障分析及控制措施
壓接類定位器壓接工藝設(shè)備改進(jìn)方案
ARINC661顯控指令快速驗(yàn)證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
基于圖像處理的定位器坡度計(jì)算
對(duì)增強(qiáng)吸引力可讀性引導(dǎo)力的幾點(diǎn)思考
淺談對(duì)提高黨報(bào)可讀性的幾點(diǎn)看法
在增強(qiáng)地方時(shí)政新聞可讀性上用足心思