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