目前,開(kāi)發(fā)人員發(fā)現(xiàn)動(dòng)態(tài)加載應(yīng)用模塊是在運(yùn)行期間再配置系統(tǒng)以改變或擴(kuò)展其功能的最有效方式,。開(kāi)發(fā)人員不能 在運(yùn)行前靜態(tài)配置許多 DSP" title="DSP">DSP 系統(tǒng),,其原因在于執(zhí)行操作的實(shí)時(shí)要求,。但是,,動(dòng)態(tài)加載" title="動(dòng)態(tài)加載">動(dòng)態(tài)加載允許系統(tǒng)根據(jù)需要進(jìn)行自身的再配置。舉例而言,,支持多個(gè)調(diào)制解調(diào)器協(xié)議的基站系統(tǒng)可使用動(dòng)態(tài)加載,,從而為目前的服務(wù)請(qǐng)求進(jìn)行適當(dāng)?shù)淖陨碓倥渲谩N覀儾环猎倥e另一個(gè)例子,,即把基于Web的內(nèi)容下載到無(wú)線手持終端中,。我們不能鏈接一個(gè)靜態(tài)的程序圖像,讓它支持用戶可能選擇的所有潛在Web瀏覽路徑,。但是,我們可以通過(guò)動(dòng)態(tài)加載在用戶需要時(shí)下載某功能所需的支持,。這種運(yùn)行時(shí)的靈活性使動(dòng)態(tài)加載成為可再配置 DSP 系統(tǒng)的關(guān)鍵技術(shù),。
動(dòng)態(tài)加載在臺(tái)式機(jī)領(lǐng)域很常見(jiàn),用戶常用它從各自獨(dú)立的可升級(jí)模塊來(lái)進(jìn)行應(yīng)用匯編,。但是,,開(kāi)發(fā)人員過(guò)去在DSP系統(tǒng)中不怎么使用動(dòng)態(tài)加載技術(shù),因?yàn)檫^(guò)去它們通常都是帶有實(shí)時(shí)確定要求的單一應(yīng)用,。
其他技術(shù)的沉沒(méi)
開(kāi)發(fā)人員也已嘗試過(guò)采用靜態(tài)技術(shù)進(jìn)行再配置,,但上述技術(shù)與動(dòng)態(tài)加載相比較少成功,其中之一就是構(gòu)建了多個(gè)程序圖像,,每個(gè)圖像都帶有不同的算法集合,。當(dāng)開(kāi)發(fā)人員在運(yùn)行時(shí)可以確定實(shí)際的配置時(shí),就可以下載適當(dāng)?shù)膱D像,。在帶寬有限的無(wú)線鏈接情況下,,可能需要很長(zhǎng)的時(shí)間才能下載完整的應(yīng)用,而且如果開(kāi)發(fā)人員必須通過(guò)重復(fù)下載完整的圖像才能在運(yùn)行過(guò)程中對(duì)系統(tǒng)進(jìn)行再配置的話,,那么就會(huì)中斷系統(tǒng)的使用,。對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),這種方法要求在構(gòu)建應(yīng)用可能需要的所有圖像之前須提前進(jìn)行全面了解,。
在具有多種獨(dú)立功能差異的系統(tǒng)中,,開(kāi)發(fā)人員必須構(gòu)建的圖像數(shù)量也呈組合式增長(zhǎng)。隨著系統(tǒng)和軟件應(yīng)用變得越發(fā)復(fù)雜,,最終也不可能預(yù)先確定所有潛在要求,,因此這種方法也就不再可行了。
開(kāi)發(fā)人員還推出了疊加技術(shù),,可部分地解決上述問(wèn)題,。根據(jù)這種方法,備用代碼或數(shù)據(jù)處于相同的存儲(chǔ)器空間中。當(dāng)模塊在運(yùn)行時(shí)被寫(xiě)入該空間并疊加原先的模塊時(shí),,就會(huì)進(jìn)行再配置,。這種方法減少了加載時(shí)間,并且進(jìn)行再配置也不必中斷應(yīng)用,。如果開(kāi)發(fā)人員可限制系統(tǒng)僅從一個(gè)系列選擇中做出一種選擇,,那么系統(tǒng)就可相當(dāng)有效地采用疊加的方法了。但如果系統(tǒng)要求多種選擇,,那么為每個(gè)疊加都預(yù)先確定存儲(chǔ)器分配就不大可能現(xiàn)實(shí)了,。這種情況可能會(huì)要求構(gòu)建多個(gè)疊加圖像,每個(gè)圖像針對(duì)一個(gè)可能的存儲(chǔ)器進(jìn)行綁定,。這種方法也再次帶來(lái)了圖像數(shù)量組合增長(zhǎng)的問(wèn)題,。
動(dòng)態(tài)加載的優(yōu)勢(shì)
動(dòng)態(tài)加載將模塊與系統(tǒng)物理存儲(chǔ)器的綁定延遲到運(yùn)行時(shí)再進(jìn)行,這就避免了上述問(wèn)題,。因此,,代碼可運(yùn)行于不同的系統(tǒng)設(shè)置上,從而帶來(lái)了更高的靈活性與可重復(fù)使用性,。在大多數(shù)嵌入式系統(tǒng)中,,片上存儲(chǔ)器非常珍貴,系統(tǒng)必須對(duì)其進(jìn)行高效利用,,但確定系統(tǒng)的哪部分應(yīng)駐留于片上存儲(chǔ)器中可能在開(kāi)發(fā)過(guò)程中具有很強(qiáng)的局限性,。動(dòng)態(tài)加載允許開(kāi)發(fā)人員推遲到運(yùn)行時(shí)再做出決定,這時(shí)他們可采用實(shí)時(shí)條件來(lái)確定在給定時(shí)間中哪種算法應(yīng)駐留于存儲(chǔ)器,。開(kāi)發(fā)人員可根據(jù)需要重復(fù)地替代或交換算法,,這對(duì)應(yīng)用持續(xù)使用的影響也較小。在新型的無(wú)線系統(tǒng)中,,多通道應(yīng)用可根據(jù)需要交換編解碼器算法,,而無(wú)線個(gè)人通信裝置可從遠(yuǎn)程服務(wù)器下載 DSP 內(nèi)容。
動(dòng)態(tài)加載也使系統(tǒng)的升級(jí)變得更為方便,。升級(jí)時(shí)開(kāi)發(fā)人員通常必須得寫(xiě)整個(gè)系統(tǒng),,其中包括寶貴的用戶與配置數(shù)據(jù)。但利用動(dòng)態(tài)加載,,他們可將升級(jí)限制在系統(tǒng)的一個(gè)或更多部分,,如某種算法或某個(gè)數(shù)據(jù)表格。此外,,動(dòng)態(tài)模塊升級(jí)還僅取決于基礎(chǔ)系統(tǒng)提供的功能API(應(yīng)用編程接口);而非取決于基礎(chǔ)系統(tǒng)的靜態(tài)地址,。這意味著,一個(gè)動(dòng)態(tài)模塊可支持多個(gè)產(chǎn)品版本,,只要所有版本提供的API相同即可,。
表1總結(jié)了DSP系統(tǒng)再配置的關(guān)鍵問(wèn)題。顯示了動(dòng)態(tài)加載與疊加及靜態(tài)加載屬性之間的比較。正如該表所示,,與靜態(tài)圖像及疊加相比,,動(dòng)態(tài)加載在基于DSP系統(tǒng)的再配置方面具有強(qiáng)大的優(yōu)勢(shì)。
我們接下來(lái)將根據(jù) TI 的 TMS320 DSP 討論動(dòng)態(tài)加載的組件及其工作的方式,,不過(guò)根據(jù)實(shí)施不同,,具體細(xì)節(jié)也有所不同。
自加載 DSP 應(yīng)用
在典型的自加載 DSP 應(yīng)用中,,單獨(dú)的 DSP 運(yùn)行于主控制程序中,,該程序包括動(dòng)態(tài)加載器庫(kù)(圖 1)。這種方法保存了一些動(dòng)態(tài)圖像所用的 DSP 存儲(chǔ)器,。當(dāng)應(yīng)用要求動(dòng)態(tài)模塊或動(dòng)態(tài)模塊組時(shí),,該控制程序?qū)⒄{(diào)用動(dòng)態(tài)加載器,指定待加載的模塊圖像,。模塊圖像可位于閃存或二級(jí)存儲(chǔ)設(shè)備中,,系統(tǒng)也可從某些設(shè)備中讀取圖像。加載器為每個(gè)模塊分配存儲(chǔ)器,,為所選的存儲(chǔ)器調(diào)整圖像位置,建立到主程序的任何引用,,并將調(diào)整后的圖像復(fù)制到動(dòng)態(tài)存儲(chǔ)器中,。當(dāng)加載完成后,動(dòng)態(tài)模塊則與應(yīng)用無(wú)縫集成,,就象它從初始化之后即存在于系統(tǒng)中一樣,。
自加載的典型使用為具備 DSP 功能的支持多種媒體格式的媒體播放器設(shè)備。它將每種可能的輸入來(lái)源,、媒體格式,、音頻效果及輸出進(jìn)程表示為動(dòng)態(tài)模塊。當(dāng)用戶選擇媒體時(shí),,系統(tǒng)將加載適當(dāng)?shù)哪K并開(kāi)始播放,。
圖1 DSP 的動(dòng)態(tài)自加載
MCU 控制的加載
在典型的 MCU 控制的 DSP 應(yīng)用中,微控制器管理 一個(gè)或更多 DSP 處理器(圖 2),。微控制器選擇在每個(gè) DSP 上的哪個(gè) DSP 模塊或模塊集運(yùn)行,,并使用動(dòng)態(tài)加載器加載適當(dāng)?shù)哪K。這種使用在幾個(gè)重要方面不同于自加載應(yīng)用,。其一,,動(dòng)態(tài)加載器運(yùn)行于微處理器上,而不是運(yùn)行于正在加載的處理器上,。此外,,微處理器通常代表 DSP 管理動(dòng)態(tài)存儲(chǔ)器,因?yàn)?DSP 要求非直接存儲(chǔ)器分配算法。再者,,在微計(jì)算機(jī)控制的加載中,,動(dòng)態(tài)圖像的加載可能要求通過(guò)接口外設(shè)進(jìn)行輸出,因?yàn)槲⒖刂破骺赡懿荒苤苯釉L問(wèn) DSP 存儲(chǔ)器的地址,。
主從應(yīng)用發(fā)生于基站,、中心局及無(wú)線終端中。在基站和中心局中,,單一的微控制器管理多個(gè) DSP,,每個(gè) DSP 處理多個(gè)通道。TI 的 OMAP1610平臺(tái)是一個(gè)典型的無(wú)線終端,。該設(shè)備主要面向手持多媒體應(yīng)用,,其中,系統(tǒng)主機(jī)為ARM MCU,,其包括 DSP 橋接功能,,可控制 TMS320C55x的加載、初始化及代碼執(zhí)行,。
圖2 MCU 控制的動(dòng)態(tài)加載
現(xiàn)場(chǎng)測(cè)試應(yīng)用
在典型的現(xiàn)場(chǎng)實(shí)驗(yàn)應(yīng)用中,,服務(wù)技術(shù)人員給出一系列顯示為動(dòng)態(tài)加載模塊的測(cè)試應(yīng)用。通常說(shuō)來(lái),,廠商隨著時(shí)間的發(fā)展會(huì)增加并改善本測(cè)試,。用于測(cè)試模塊的備用存儲(chǔ)器加入接受維修服務(wù)的產(chǎn)品,并啟用實(shí)現(xiàn)動(dòng)態(tài)加載,。測(cè)試設(shè)備包括測(cè)試模塊以及動(dòng)態(tài)加載器和測(cè)試控制應(yīng)用(這里的加載器可能位于測(cè)試控制應(yīng)用中,,也可能內(nèi)置于加入的產(chǎn)品中)。測(cè)試設(shè)備還包括內(nèi)置于產(chǎn)品中的加入點(diǎn)定義(這些符號(hào)定義可內(nèi)置于產(chǎn)品中,,抑或測(cè)試集可將其作為符號(hào)模塊承載),。診斷測(cè)試通過(guò)加載各獨(dú)立測(cè)試進(jìn)行。每個(gè)測(cè)試都動(dòng)態(tài)連接到其要求的產(chǎn)品軟件服務(wù)中,,如設(shè)備驅(qū)動(dòng)程序和狀態(tài)變量,。在使用實(shí)際測(cè)試時(shí),動(dòng)態(tài)加載相對(duì)于疊加方法的主要優(yōu)勢(shì)在于開(kāi)發(fā)人員不用自己構(gòu)建測(cè)試,,以匹配于被測(cè)試系統(tǒng)的版本,。疊加方法要求與同產(chǎn)品版本號(hào)數(shù)量以及測(cè)試次數(shù)相同的測(cè)試圖像庫(kù),而動(dòng)態(tài)加載的方法只要求測(cè)試數(shù)量加上每個(gè)產(chǎn)品版本的符號(hào)即可,。
測(cè)試集實(shí)現(xiàn)線性復(fù)雜性而不是平方復(fù)雜性,,其優(yōu)勢(shì)是巨大的。如產(chǎn)品帶有內(nèi)置符號(hào)信息,,則其可消除最后一項(xiàng),。降低配置復(fù)雜性是動(dòng)態(tài)加載在使用實(shí)際測(cè)試時(shí)的最大優(yōu)勢(shì),。
動(dòng)態(tài)加載器的功能與要求
動(dòng)態(tài)加載器是一個(gè)可配置的庫(kù)或 API,用戶可用 C 語(yǔ)言調(diào)用,,實(shí)現(xiàn)方便的接口,。除了將程序圖像寫(xiě)入 DSP 存儲(chǔ)器之外,動(dòng)態(tài)加載器還可以進(jìn)行必需的鏈接,,使得模塊,、主應(yīng)用及其他加載的模塊可實(shí)現(xiàn)相操作。為了達(dá)到此目的,,動(dòng)態(tài)加載器不但引用模塊外的符號(hào),,而且也可記錄模塊中的任何全局定義,便于外部使用,。當(dāng)加載器卸載模塊時(shí),,動(dòng)態(tài)加載器進(jìn)行存儲(chǔ)器恢復(fù),這樣系統(tǒng)就象從未有過(guò)動(dòng)態(tài)模塊一樣,。
動(dòng)態(tài)加載器要求一組四個(gè)支持類(Class),。應(yīng)用傳輸實(shí)施上述類并配置動(dòng)態(tài)加載器為加載請(qǐng)求中首先四個(gè)參數(shù)的對(duì)象。第一個(gè)類為圖像源,,允許系統(tǒng)集成器定義以流的形式接受輸入的機(jī)制,。源可為外部存儲(chǔ)器、外部設(shè)備或外設(shè),,甚至也可是應(yīng)用中的嵌入結(jié)構(gòu),。第二個(gè)類為符號(hào)處理程序,包括映射符號(hào)到地址,、進(jìn)行存儲(chǔ)器管理以及有關(guān)符號(hào)的錯(cuò)誤報(bào)告等功能。動(dòng)態(tài)加載器使用第三個(gè)類(DSP 存儲(chǔ)器分配程序)來(lái)為動(dòng)態(tài)模塊請(qǐng)求存儲(chǔ)器,。一旦動(dòng)態(tài)加載器確定了存儲(chǔ)器的內(nèi)容,,動(dòng)態(tài)存儲(chǔ)器就會(huì)使用第四個(gè)類(DSP 存儲(chǔ)器初始化程序)來(lái)請(qǐng)求系統(tǒng)更新 DSP 存儲(chǔ)器分配器返回的存儲(chǔ)器地址。
由于動(dòng)態(tài)加載器鏈接至用戶的應(yīng)用,,因此實(shí)施它的代碼必須迅速,、小巧并具備較強(qiáng)的健碩性。程序員以專為速度進(jìn)行過(guò)優(yōu)化的算法編寫(xiě) C 庫(kù)的代碼,。主機(jī)圖像再格式化器是動(dòng)態(tài)重載的另一組件,,它可進(jìn)行離線狀態(tài)下完成的任何計(jì)算。為了高效使用 DSP 的存儲(chǔ)器,,動(dòng)態(tài)加載器需要最小的存儲(chǔ)空間,。最后,銷(xiāo)售商對(duì)動(dòng)態(tài)加載器進(jìn)行了徹底的測(cè)試,,因?yàn)樵摯a在運(yùn)行時(shí)出現(xiàn)錯(cuò)誤是不可接受的,。
圖3 動(dòng)態(tài)加載的應(yīng)用開(kāi)發(fā)流程
開(kāi)發(fā)動(dòng)態(tài)模塊
動(dòng)態(tài)模塊的代碼開(kāi)發(fā)幾乎與標(biāo)準(zhǔn)開(kāi)發(fā)一樣,。圖 3 顯示了創(chuàng)建動(dòng)態(tài)模塊并進(jìn)行故障調(diào)試的有代表性的開(kāi)發(fā)流程。三個(gè)動(dòng)態(tài)加載組件(動(dòng)態(tài)加載器,、圖像再格式化器以及故障調(diào)試器插件)以陰影顯示,。最初,主應(yīng)用程序鏈接至動(dòng)態(tài)加載器庫(kù)并為動(dòng)態(tài)模塊分配存儲(chǔ)器,。隨后,,它以正常方式構(gòu)建模塊的可執(zhí)行程序,不過(guò)圖像尋址是可通過(guò)使用動(dòng)態(tài)加載器執(zhí)行過(guò)程中管理的符號(hào)進(jìn)行再分配的,,而不是靜態(tài)的,。
系統(tǒng)將可再分配的圖像作為輸入提供給圖像再格式化器,圖像再格式化器對(duì)其進(jìn)行優(yōu)化,,以備下載,。再格式化器去除加載過(guò)程中非必需的對(duì)象代碼部分以減小圖像大小。此外,,再格式化器針對(duì) I/O 流式加載重新安排圖像順序,,格式化圖像,使其包括在應(yīng)用中,,為確定輸入有效性添加校驗(yàn)和,,并為控制模塊導(dǎo)出的符號(hào)提供接口。
當(dāng)系統(tǒng)需要模塊時(shí),,系統(tǒng)將其流式提供給動(dòng)態(tài)加載器,,動(dòng)態(tài)加載器則對(duì)其進(jìn)行處理,并將其寫(xiě)入保留的動(dòng)態(tài)模塊存儲(chǔ)器中,。由于調(diào)試器也必須能夠鏈接至模塊,,因此調(diào)試器插件會(huì)檢測(cè)動(dòng)態(tài)模塊是否存在,并確定對(duì)應(yīng)于動(dòng)態(tài)模塊的原始對(duì)象文件的位置,。插件隨后會(huì)用所有必需的信息更新開(kāi)發(fā)環(huán)境,,從而啟動(dòng)全面故障調(diào)試。
限制符號(hào)導(dǎo)出的重要性
圖像再格式化工具為控制模塊導(dǎo)出的符號(hào)提供了一個(gè)接口,。該特性為開(kāi)發(fā)人員隱藏某些符號(hào)而讓另一些符號(hào)可視以便于其他模塊引用提供了一種途徑,。系統(tǒng)使用該功能來(lái)控制訪問(wèn),并使加載時(shí)間及存儲(chǔ)器面積達(dá)到最小,。每個(gè)可視的符號(hào)都要求正在運(yùn)行動(dòng)態(tài)加載器的處理器給出幾字節(jié)的存儲(chǔ)空間,。如果所有鏈接時(shí)符號(hào)都可視,那么存儲(chǔ)器使用將成為小型嵌入式系統(tǒng)的一個(gè)問(wèn)題,。如果再格式化器限制符號(hào)導(dǎo)出,,那么符號(hào)存儲(chǔ)器使用通常就不構(gòu)成問(wèn)題。
限制符號(hào)導(dǎo)出的另一好處就是實(shí)現(xiàn)更快的加載,。根據(jù) OMAP1610 平臺(tái)測(cè)試進(jìn)行的性能分析給出了以下加載時(shí)間的統(tǒng)計(jì)模型:4250+373×符號(hào) +273×再定位 +6.5×圖像_字節(jié),。
上述分析顯示,,模塊中導(dǎo)出符號(hào)的數(shù)量是開(kāi)發(fā)人員在改善下載速度時(shí)能夠控制的最主要因素。比較而言,,總模塊大小的重要性則較小,,減小符號(hào)數(shù)量所起的作用不到 2%。盡管根據(jù) DSP 及系統(tǒng)配置的不同,,上述因素與其他非開(kāi)發(fā)人員可控制因素的確切作用比重會(huì)有所差異,,但最小化外部符號(hào)這條首要規(guī)則保持不變。
開(kāi)放的可能性
動(dòng)態(tài)加載能為 DSP 系統(tǒng)帶來(lái)新的應(yīng)用功能——這正是即將到來(lái)的下一代無(wú)線技術(shù)所需要的發(fā)展趨勢(shì),。動(dòng)態(tài)加載作為 DSP 系統(tǒng)的無(wú)縫模塊再配置的一種技術(shù),,其應(yīng)用要比多靜態(tài)程序圖像或疊加更為靈活和高效。盡管動(dòng)態(tài)加載還是 DSP 領(lǐng)域中的新生兒,,但其將很快成為驅(qū)動(dòng)多種新型多功能 DSP 應(yīng)用發(fā)展的因素 ,。