<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 一種基于TI TMS320 DSP的軟件動(dòng)態(tài)鏈接技術(shù)

一種基于TI TMS320 DSP的軟件動(dòng)態(tài)鏈接技術(shù)

作者: 時(shí)間:2012-08-19 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:介紹了軟件技術(shù)的概念和特點(diǎn),提出了基于 系列的軟件技術(shù)。該技術(shù)解決了可重配置的系統中關(guān)于軟件二進(jìn)制目標代碼的動(dòng)態(tài)加載和卸載的問(wèn)題。采用該技術(shù)的軟件重配置方案已成功運用于某多功能通信系統,為基于其他系列的可重構數字處理系統提供了一定的參考,在無(wú)人值守設備、多功能信號處理設備方面具有一定的應用價(jià)值。
關(guān)鍵詞:; DSP;;

基于數字信號處理器(DSP)的多功能自適應通信系統在軟件無(wú)線(xiàn)電領(lǐng)域正變得日益普遍,如何使DSP系統在運行期間自適應的改變通信協(xié)議是實(shí)現這種系統的關(guān)鍵。當前,DSP開(kāi)發(fā)人員采用了重配置、層疊(overlay)等技術(shù)來(lái)實(shí)現通信協(xié)議自適應功能,但作為運行時(shí)改變或擴展功能的最有效方式,基于DSP的動(dòng)態(tài)鏈接技術(shù)尚未有文獻提及。
動(dòng)態(tài)鏈接技術(shù)是相對于靜態(tài)鏈接而言,它是指編譯器在編譯程序時(shí)并不將程序所需的庫文件代碼復制到程序的可執行文件,而只是在程序中保留庫文件的調用標記。在程序運行時(shí),由鏈接器將庫文件代碼加載到系統內存,并與程序鏈接為一個(gè)整體。在大多數DSP系統中,采用動(dòng)態(tài)鏈接技術(shù)可以節省系統對片上存儲器大小的要求,此外,由于動(dòng)態(tài)鏈接庫函數對外提供的是函數的接口,而不是函數的入口地址,因此動(dòng)態(tài)鏈接函數可同時(shí)提供多個(gè)版本,使系統的升級變得更為方便。
通過(guò)研究和分析 DSP目標代碼的生成過(guò)程和目標代碼的結構,提出了針對該系列DSP代碼動(dòng)態(tài)鏈接的方法。將本文提出的方法應用到某通信系統中表明,該方法具有占用片上內存小、系統配置時(shí)間短、系統有較強的可擴展性等優(yōu)點(diǎn),在此后的DSP開(kāi)發(fā)過(guò)程中會(huì )得到廣泛的應用。

1 DSP目標代碼生成流程
TI DSP系列開(kāi)發(fā)工具包為開(kāi)發(fā)人員提供了一套完整的軟件開(kāi)發(fā)工具鏈,包括C/C++編譯器,匯編器,鏈接器等。利用這套開(kāi)發(fā)工具包,DSP開(kāi)發(fā)人員可以完成程序的編寫(xiě)、編譯、鏈接,直到目標代碼的生成。其中,C/C++編譯器將C語(yǔ)言轉換為匯編語(yǔ)言,匯編器匯編語(yǔ)言翻譯為機器語(yǔ)言,以COFF目標文件的形式輸出給鏈接器。鏈接器將匯編器生成的與庫文件鏈接成一個(gè)完整的程序,以可執行的輸出到磁盤(pán),生成DSP可執行程序。

2 DSP動(dòng)態(tài)鏈接器的設計
文中設計的DSP系統軟件架構如圖1所示。DSP應用程序被劃分為一個(gè)或多個(gè)可加載模塊,動(dòng)態(tài)鏈接器作為DSP軟件系統架構中的一個(gè)重要的軟件模塊,其作用主要是在DSP系統改變功能時(shí),按需將匯編器生成的目標文件按需加載到系統中,與系統已有程序結合成為一個(gè)整體,并將卸載系統中不需要的模塊。

a.JPG


2.1 模塊的定義
圖1中所示的可加載模塊文件主要包括DSP應用程序的機器代碼,此外包括模塊的名稱(chēng)、大小、版本,模塊所包含的函數聲明,模塊所依賴(lài)的函數接口,模塊的入口函數信息,模塊被引用信息等。這些信息是在匯編器生成DSP應用程序的機器代碼后,由模塊生成程序將附加的信息添加到COFF文件中,生成最終的可加載模塊文件。本文設計的可加載模塊的文件格式如圖2所示。

b.JPG


2.2 模塊的加載和卸載
2.2.1 COFF文件格式
DSP動(dòng)態(tài)鏈接器設計的關(guān)鍵是解析匯編器生成的目標文件,將目標文件中包含的代碼根據模塊的加載地址進(jìn)行后,完成與系統已有程序的鏈接。匯編器生成的目標文件是以COFF文件格式保存在磁盤(pán)上,其通常包括代碼段、數據段、用戶(hù)自定義段、符號表和信息等數據,格式如圖3所示。

c1.jpg


如圖3所示,COFF文件主要包括一個(gè)文件頭部和多個(gè)段信息,以及段重定位信息和符號表等。COFF文件缺省的包含3個(gè)段:. text段、.data段和.bss段。匯編器將匯編程序的代碼部分放到.text段中,將全局變量放在.data或.bss段中,同時(shí)在符號表中寫(xiě)入該文件包含的符號(函數或變量)名稱(chēng)和對外引用的符號名稱(chēng)等信息。此外,每段的重定位信息表中都包含重定位信息項,根據重定位信息項,可以確定可重定位指令在段中的偏移量,表1給出了重定位信息項的結構。
重定位信息項的0—3字節表示可重定位指令以0作為起始地址,在當前段中的偏移量。4—5字節是符號索引表,它代表了該重定位指令索引的符號在COFF文件中符號表中的索引號。8—9字節表示重定位類(lèi)型,它指出了如何將定位后的地址信息添加到該可重定位指令上。表2是重定位信息項的一個(gè)例子,這里假設該重定位信息項屬于.text段。

c.JPG


該重定位信息項說(shuō)明在.text代碼段偏移20個(gè)字節處存在一條重定位語(yǔ)句,該語(yǔ)句所指向的符號在符號表中的位置是第20項(從0開(kāi)始計),該語(yǔ)句的重定位類(lèi)型是PC跳轉指令重定位。
2.2.2 DSP機器代碼的識別
匯編器生成的是DSP機器代碼,因此動(dòng)態(tài)鏈接器需要分析重定位指令格式,以便將指令引用地址添加到該指令中。根據 DSP指令手冊,TMS320 DSP指令格式包括如圖4所示。

d.JPG


文中通過(guò)分析指令格式的低位比特位,可以判斷出指令屬于上述指令中的哪一類(lèi)。以指令0x0200007E為例,將指令表示為二進(jìn)制:(0000 0010 0000 0000 0000 0000 0111 1110)b,指令的2~3位為11,在圖4中查找2~3位為11的指令,可以發(fā)現該指令是一條STW存儲指令,指令的ucst15比特域表示了其需要重定位的地址。
2.2.3 模塊動(dòng)態(tài)鏈接的實(shí)現
動(dòng)態(tài)鏈接器的功能主要包括模塊的動(dòng)態(tài)鏈接和動(dòng)態(tài)卸載,模塊動(dòng)態(tài)鏈接的主要流程如圖5所示。動(dòng)態(tài)鏈接器在收到加載模塊請求時(shí),首先檢查模塊文件的完整性,并根據加載模塊的依賴(lài)信息在系統符號表中查找對應的函數和變量。當模塊通過(guò)完整性和依賴(lài)性檢查后,動(dòng)態(tài)鏈接器首先根據模塊大小聲明,在系統的存儲空間中分配空間,將模塊文件加載到系統存儲空間。接著(zhù)動(dòng)態(tài)鏈接器根據COFF文件信息,搜索COFF文件代碼段中的重定位語(yǔ)句,并根據指令格式確定指令中地址域信息,最后將綜合模塊被加載的地址和指令索引的符號的地址,計算地址信息,并將此信息填入可重定位指令的地址域,完成指令的重定位。在代碼段重定位完成后,動(dòng)態(tài)鏈接器將模塊名稱(chēng)、模塊對外提供的函數名稱(chēng)、模塊入口地址等信息注冊到系統符號表中,并調用模塊加載函數,完成模塊對系統資源的申請。最后,如果該模塊所提供的函數或者變量替換了系統已有的函數或者變量,動(dòng)態(tài)鏈接器還需要將所有引用該函數或變量的其他模塊進(jìn)行重定位,以反映系統狀態(tài)的更新。

e.JPG


2.2.4 模塊動(dòng)態(tài)卸載的實(shí)現
模塊動(dòng)態(tài)卸載是加載過(guò)程的逆過(guò)程,動(dòng)態(tài)鏈接器在收到卸載模塊請求時(shí),首先在系統中搜索是否有模塊引用了將要被卸載的模塊,若存在則警告用戶(hù),并等待用戶(hù)確實(shí)是否強制卸載。若是,動(dòng)態(tài)鏈接器將卸載模塊對外提供的函數和變量從系統符號表中刪除,并收回卸載模塊占用的系統空間。完整的模塊動(dòng)態(tài)卸載流程如圖6所示。

f.JPG



3 結論
文中設計的DSP動(dòng)態(tài)鏈接器為傳統的DSP系統帶來(lái)新的應用功能,已在某多功能通信系統中獲得了成功的應用。動(dòng)態(tài)鏈接技術(shù)作為DSP系統的重配置技術(shù)之一,其應用要比傳統的DSP全系統重構技術(shù)或疊加技術(shù)更為靈活和高效。同時(shí),本文提出的動(dòng)態(tài)鏈接技術(shù)相對于文獻,文獻提出的函數查找表的實(shí)現方式更加富有效率。盡管目前動(dòng)態(tài)鏈接技術(shù)在DSP領(lǐng)域的應用很少,但隨著(zhù)DSP應用向多功能發(fā)展,相信動(dòng)態(tài)鏈接技術(shù)在DSP領(lǐng)域的應用會(huì )越來(lái)越廣泛。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>