多處理器運行的嵌入式系統(tǒng)
2004年9月A版
在早期開發(fā)微處理器的嵌入式軟件時,條件比較簡單,只有一個CPU、數(shù)量有限的存儲器、若干I/O、還可能有簡單的網(wǎng)絡(luò)。
今天,情況已經(jīng)變化。嵌入式系統(tǒng)可能是多CPU,甚至是DSP和CPU的組合。存儲器和數(shù)據(jù)率都屬于海量,此外,開發(fā)隊伍遍布全球,而且客戶要求提供幾乎不可能達(dá)到的可靠性。
嵌入式軟件供應(yīng)商怎樣才能夠滿足開發(fā)商的需要,包括消息傳送、存儲器管理、CPU/DSP之間的通信、容錯和系統(tǒng)級開發(fā)工具呢?
當(dāng)DSP越來越復(fù)雜和更加強(qiáng)大時,開發(fā)商逐漸認(rèn)識到,必須在這些器件上運行實時操作系統(tǒng)。當(dāng)執(zhí)行多任務(wù)時,實時操作系統(tǒng)能夠有效地使用DSP的資源,并且對誤差處理和存儲器地址分配等作業(yè)有幫助。
對于TigerSHARC等DSP,實時操作系統(tǒng)通過“鏈接端口”處理通信,控制其它CPU和DSP,并且產(chǎn)生同步。為CPU和DSP同時提供通用的API(應(yīng)用程序接口)可改善開發(fā)時間、編寫文件和代碼維護(hù)。
實時操作系統(tǒng)結(jié)構(gòu)的一項重要進(jìn)步是內(nèi)部處理通信能力—嵌入式系統(tǒng)的作業(yè)如何與其它作業(yè)交換數(shù)據(jù)。傳統(tǒng)辦法是分享存儲器的“信箱”,采用信號量進(jìn)行存取和控制。
隨著嵌入式系統(tǒng)變得更為復(fù)雜。許多開發(fā)團(tuán)隊轉(zhuǎn)而使用異步的信息通行結(jié)構(gòu)(參閱圖1)。從程序員的觀點來看,例如在OSE實時操作系統(tǒng)中,作業(yè)只要簡單地發(fā)送消息和另一個作業(yè)接收消息。這樣做的優(yōu)點很多,由于實時操作系統(tǒng)處理了存儲器的地址分配,系統(tǒng)的調(diào)用數(shù)就減少。作業(yè)可在系統(tǒng)內(nèi)任何地方接收。甚至可通過背板接收到在另一塊電路板的作業(yè);不管作業(yè)在哪里,實時系統(tǒng)都可對它進(jìn)行處理,事實上,消息通行的異步方式是指一個作業(yè)不能鎖住另一個正在等候信號的作業(yè);有時候在復(fù)雜的分布系統(tǒng)中,這樣做是很重要的。
異步的消息通行結(jié)構(gòu)還有另外的優(yōu)點,它可將項目劃分成幾部分,再分配到幾個小組作并行開發(fā)。
存儲器管理是另一個結(jié)構(gòu)問題。當(dāng)系統(tǒng)要得更加動態(tài)和更加著重存儲器時,嵌入式系統(tǒng)的存儲器管理就變得十分重要。在動態(tài)系統(tǒng)中,一個不可避免的問題是數(shù)據(jù)分段。雖然無用信息收集法可作為一種解決方案,但是它的風(fēng)險會影響到系統(tǒng)的實時性能。
OSE實時操作系統(tǒng)正用于全球的基站中,經(jīng)常放置在遠(yuǎn)端臺站。對網(wǎng)絡(luò)供應(yīng)商來說,損失客房的空中時間或票據(jù)信息都是不可取的。OSE用兩種地址分配方式來消除分段,“堆置(heap)”,根據(jù)黃金分割法的順序分配存儲器地址,從而限制分段;輪詢緩沖器(a pool of buffers),此時任務(wù)分配為輪詢存儲器,而且只分配到預(yù)定容量的緩沖器中。一旦某個緩沖器被使用,它就回到系統(tǒng)內(nèi)。結(jié)果是輪詢的全部存儲器隨時保持“可用”狀態(tài)。這種辦法還有一些重要特點,如不會受到存儲器搜索延時的影響。
現(xiàn)代實時操作系統(tǒng)結(jié)構(gòu)的進(jìn)展是誤差處理(參閱圖2)。在傳統(tǒng)系統(tǒng)中,軟件開發(fā)者為了處理可能發(fā)生的任何錯誤,在系統(tǒng)訪問后必須編寫“差錯代碼”,例如,出現(xiàn)失效的存儲器地址分配錯誤。不難想到,當(dāng)項目越大和開發(fā)隊伍擴(kuò)大時,將有許多人寫出大量的差錯碼。在OSE結(jié)構(gòu)中,錯誤處理是內(nèi)建在系統(tǒng)訪問的運作。
從程序員的觀點來看,應(yīng)用提出對系統(tǒng)訪問,而實時操作系統(tǒng)完成其它工作。如果系統(tǒng)訪問失敗,則內(nèi)核將調(diào)用中央錯誤處理器去解決問題。
這樣做有很多好處。第一,應(yīng)用碼更加緊湊和可靠,而且開發(fā)和排錯也更快。第二,更多錯誤處理可在系統(tǒng)級進(jìn)行,構(gòu)成更牢靠的容錯系統(tǒng)。
各種處理器之間的通信
嵌入式開發(fā)的最重要發(fā)展趨勢也許就是混合設(shè)計和多CPU/DSP設(shè)計了。這種設(shè)計有系統(tǒng)級、電路板級、甚至芯片級,例如,集成器件諸如TI公司的OMAP,它的特點是ARM核和一個DSP結(jié)合。
實時操作系統(tǒng)開發(fā)商加緊CPU和DSP兩者的開發(fā),但是怎樣解決DSP與CPU的通信呢?Enea嵌入式科技公司構(gòu)建了一種鏈接處理器。它是實時操作系統(tǒng)的一部分,用來處理整個系統(tǒng)內(nèi)各任務(wù)的分散消息,不管消息來自鄰近的DSP或是在另一插卡上的CPU。它的工作能夠跨越大部分通信機(jī)制,包括以太網(wǎng)、串行口、CAN和Compact PCI等。這種鏈接處理器是智能的,能夠檢測出傳輸機(jī)制的故障和尋找出新的路由。它還能夠根據(jù)名稱來分配任務(wù),甚至發(fā)送不知道接收方的位置/路徑的任務(wù)。
構(gòu)建在鏈接處理器上,OSE的開發(fā)人員開發(fā)出兩種系統(tǒng)訪問方式,稱為“搜索”和“連接”?!八阉鳌痹L問讓某一任務(wù)決定需要與另一任務(wù)通信的路徑。一旦知道路徑后,該任務(wù)即可“連接”上接收的任務(wù)。同時表明,如果該任務(wù)遇到有任何事件發(fā)生,則內(nèi)核將會告知發(fā)送任務(wù)方。接收任務(wù)所駐留的電路板是否已移走或失效,都會告訴發(fā)送方。因而,該任務(wù)可將(失效)的復(fù)印件重新“搜索”一次,或者將一份新的接收方任務(wù)復(fù)印件送到(熱插拔)的替換電路板上。
縮短開發(fā)時間
面市時間是大事迫使軟件和工具供應(yīng)商提出解決方案。例如Ericsson等公司的許多前階段開發(fā),在實際硬件未完成前是在OSE的“軟內(nèi)核”上進(jìn)行的,軟內(nèi)核是一種已移植到Windows上的一種實時操作系統(tǒng),使工程師能夠在臺式PC上開發(fā)代碼。這種開發(fā)環(huán)境可支持多內(nèi)核,甚至支持鏈接處理器技術(shù)。
在查錯階段,許多工作可使用“系統(tǒng)級”查錯工具。工具對運行在系統(tǒng)內(nèi)的任務(wù),狀態(tài)以及性能提供可見度,工具可動態(tài)地分析存儲器的使用情況;用一個任務(wù)或一組任務(wù)分析對CPU的要求;對通過系統(tǒng)的消息進(jìn)行跟蹤;甚至可讓工程師在系統(tǒng)級上設(shè)置斷點,以及對運行中的系統(tǒng)注入測試和分析用的信號。因而,工程師即可在工作臺上而無需在現(xiàn)場快速查錯。
評論