<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于μC/OS-II的嵌入式構(gòu)件系統(tǒng)設(shè)計(jì)

          基于μC/OS-II的嵌入式構(gòu)件系統(tǒng)設(shè)計(jì)

          作者: 時間:2010-08-17 來源:網(wǎng)絡(luò) 收藏

          近些年來,隨著嵌入式產(chǎn)品需求的不斷增加,嵌入式軟件正變得越來越復(fù)雜,而產(chǎn)品的開發(fā)周期也越來越短。嵌入式軟件開發(fā)迫切需要更高效的軟件重用手段。

          隨著軟件復(fù)用研究成為熱點(diǎn),其核心技術(shù)——構(gòu)件化軟件開發(fā)方法(CBD)引起了軟件工程領(lǐng)域的高度關(guān)注,并且在工程應(yīng)用領(lǐng)域獲得了極大的成功。這種開發(fā)方法已在辦公應(yīng)用、電子商務(wù)、因特網(wǎng)及分布式網(wǎng)絡(luò)應(yīng)用中廣泛使用;但在嵌入式領(lǐng)域,仍處于起步階段,目前沒有一個統(tǒng)一通用的構(gòu)件規(guī)范。盡管如此,由于基于構(gòu)件的軟件設(shè)計(jì)方法能夠極好地滿足嵌入式軟件幾乎所有的特性(如定制、裁剪、動態(tài)演變等),有效縮短產(chǎn)品開發(fā)周期,這種設(shè)計(jì)方法無疑將給嵌入式系統(tǒng)的開發(fā)帶來巨大的好處。

          本文嘗試將構(gòu)件化軟件設(shè)計(jì)思想引入嵌入式軟件設(shè)計(jì)中,提出了一種適用于嵌入式軟件的基于構(gòu)件的軟件體系結(jié)構(gòu),并且在常用輸入設(shè)備鍵盤的應(yīng)用實(shí)踐中,驗(yàn)證了此體系結(jié)構(gòu)的可行性。

          1 嵌入式

          1.1 構(gòu) 件

          構(gòu)件可以視為一個通過接口對外界提供服務(wù)或向外界請求服務(wù)的黑盒,多個構(gòu)件可以組成一個更高層次的構(gòu)件,構(gòu)件比對象提供了更高的設(shè)計(jì)抽象。構(gòu)件是二進(jìn)制可替換的,這個特點(diǎn)使它們與“類”有著顯著的不同。當(dāng)創(chuàng)建了一個構(gòu)件的修訂版本時,它可以替代同一構(gòu)件的原先版本,而不必重新編譯其他構(gòu)件。通常,只要一個構(gòu)件滿足相同的接口,就可替換另一個構(gòu)件,而不必對其他構(gòu)件做任何修改。因此,構(gòu)件能夠很好地解決更新、維護(hù)、分布和復(fù)用等諸多問題。

          構(gòu)件具備以下幾個基本特征:可復(fù)用性、可封裝性、組裝性、可定制性、自治性、粗粒度、集成特征、接口連接機(jī)制。目前,構(gòu)建模型大致可分為2類:在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,構(gòu)件即對象,例如JavaBean;在軟件體系結(jié)構(gòu)中,構(gòu)件即結(jié)構(gòu)單元,例如結(jié)構(gòu)描述語言ADL。這些構(gòu)件模型適合更高層的應(yīng)用軟件,但不適合在嵌入式軟件開發(fā)中占主導(dǎo)地位的底層系統(tǒng)軟件的開發(fā)。

          1.2

          1.2.1 模型

          為實(shí)現(xiàn)一定嵌入式系統(tǒng)功能的一組封裝的、規(guī)范的、可重用的、具有嵌入特性的軟件單元,是組成嵌入式系統(tǒng)的功能單位。它是被標(biāo)準(zhǔn)化的、具有重用性、支持QoS的、能夠提供實(shí)時應(yīng)用的軟件資源。

          這里,從嵌入式構(gòu)件的定義出發(fā),將參考文獻(xiàn)中通用軟件構(gòu)件模型作適當(dāng)?shù)臄U(kuò)展,使其成為適用于嵌入式系統(tǒng)的基本構(gòu)件模型。

          每個嵌入式構(gòu)件由4部分構(gòu)成:構(gòu)件體、屬性、接口、依賴關(guān)系。圖1為基本構(gòu)件的示意圖。構(gòu)件體實(shí)現(xiàn)構(gòu)件的基本功能,即對外提供的服務(wù);屬性描述了構(gòu)件的基本信息;接口將構(gòu)件與外界連接,在得到自己需要的服務(wù)后,為外界提供服務(wù),每一種接口對應(yīng)一個不同的服務(wù);依賴關(guān)系標(biāo)識構(gòu)件間的所有關(guān)系,用于實(shí)現(xiàn)構(gòu)件間的拼接。

          1.2.2 嵌入式構(gòu)件屬性

          屬性是描述構(gòu)件某個方面特征的元數(shù)據(jù)。屬性定義了構(gòu)件查找的方法,可以根據(jù)任意一條屬性記錄快速找到符合條件的構(gòu)件。由于嵌入式構(gòu)件的特殊性,可以將嵌入式軟件構(gòu)件的屬性分為3種:描述屬性、約束屬性和服務(wù)質(zhì)量(QoS)屬性。

          (1)描述屬性

          描述屬性指的是一般構(gòu)件都具有的公共屬性。常見的描述屬性有以下幾種。

          名稱:構(gòu)件以名稱作為標(biāo)識。

          標(biāo)識:每個構(gòu)件都對應(yīng)唯一的ID號,區(qū)別于其他構(gòu)件。

          類型:將構(gòu)件歸類,便于檢索與管理。

          版本號:用于構(gòu)件的更新。

          編程語言:表示構(gòu)件的實(shí)現(xiàn)語言。

          構(gòu)件描述信息:簡述構(gòu)件功能。

          表示形式:一個構(gòu)件可以是源代碼、動態(tài)鏈接庫、靜態(tài)鏈接庫,以及文檔、圖表等形式。

          (2)約束屬性

          約束屬性描述構(gòu)件所依賴的環(huán)境。約束屬性可分為2類:描述絕大多數(shù)構(gòu)件都具有的公有約束屬性和描述單獨(dú)構(gòu)件特殊需求的專有約束屬性。公有約束屬性包括CPU類型、操作系統(tǒng)、依賴的類庫等。專有約束屬性包括特殊硬件需求、時間約束和內(nèi)存需求等。

          (3)QoS屬性

          QoS屬性是嵌入式軟件構(gòu)件最重要的要素。為了選取合適的構(gòu)件來開發(fā)嵌入式系統(tǒng),必須考慮構(gòu)件的QoS屬性,以*估它所提供的性能指標(biāo)。常見的QoS屬性包括平均執(zhí)行時間、最差執(zhí)行時間、最優(yōu)執(zhí)行時間、內(nèi)存消耗、功耗、健壯性、可靠性和安全性等。

          2 嵌入式軟件構(gòu)件設(shè)計(jì)

          2.1 μC/OS—II嵌入式實(shí)時操作系統(tǒng)

          μC/0S—II是一個可移植、占先式、實(shí)時的多任務(wù)內(nèi)核,以任務(wù)為基本處理單位,能同時管理高達(dá)63個任務(wù)。它實(shí)時性強(qiáng),可靠性高,對處理器以及ROM、RAM資源的要求不高;另外,它的代碼大部分用ANSI C語言編寫,只有少部分微處理器專用的代碼用匯編語言編寫,有利于程序的移植。

          2.2 基于構(gòu)件的嵌入式軟件體系結(jié)構(gòu)

          一個構(gòu)件系統(tǒng)的體系結(jié)構(gòu)由一系列定義的構(gòu)件框架和針對該框架設(shè)計(jì)的構(gòu)件間的相互作用關(guān)系組成。體系結(jié)構(gòu)是所要實(shí)現(xiàn)系統(tǒng)的整體規(guī)劃,它為構(gòu)件的組裝提供基礎(chǔ)框架和接口規(guī)范。

          目前,嵌入式研究的核心之一是構(gòu)件模型和軟件體系結(jié)構(gòu)(軟件構(gòu)架)這兩個相互關(guān)聯(lián)的問題。不同的構(gòu)件只能在相應(yīng)的軟件構(gòu)架中使用,因此基于構(gòu)件的應(yīng)用軟件設(shè)計(jì)也可認(rèn)為是基于體系結(jié)構(gòu)(構(gòu)架)的軟件設(shè)計(jì),也稱之為基于“構(gòu)件一構(gòu)架”的應(yīng)用軟件設(shè)計(jì)。

          根據(jù)上述的嵌入式基本構(gòu)件模型,本文提出了一適用于嵌入式系統(tǒng)的軟件體系結(jié)構(gòu)。其中,定義“構(gòu)件系統(tǒng)”為一特定應(yīng)用,實(shí)現(xiàn)某一具體功能。例如,鍵盤為一構(gòu)件系統(tǒng),顯示器也為一構(gòu)件系統(tǒng)。另外,定義“構(gòu)件子系統(tǒng)”。它類似于UML中的包概念,代表元素的邏輯分組,將具體的應(yīng)用從實(shí)際問題中抽象出來,同時對各個關(guān)注區(qū)域進(jìn)行相對分離,這樣做可以獨(dú)立地分析各個關(guān)注點(diǎn),從而可以更好地分析系統(tǒng)的結(jié)構(gòu)。一個構(gòu)件子系統(tǒng)可以包含一個構(gòu)件或者是多個構(gòu)件的集合。

          我們把構(gòu)件系統(tǒng)構(gòu)造成抽象層次中的不同部分,最抽象(最接近應(yīng)用領(lǐng)域)的位于“頂部”,最具體(最接近硬件)的位于“底部”。這樣,可以將構(gòu)件系統(tǒng)從結(jié)構(gòu)上構(gòu)造為6個獨(dú)立的層次:應(yīng)用層、用戶接口層、通信層、OS層、硬件抽象層和配置描述層。

          每個層次為一個構(gòu)件子系統(tǒng),每個構(gòu)件子系統(tǒng)內(nèi)包含有一個或多個構(gòu)件。通過構(gòu)件間的依賴關(guān)系來定位和拼接構(gòu)件,組裝構(gòu)件子系統(tǒng),最終生成所需要的構(gòu)件系統(tǒng)。其中,配置描述層記錄構(gòu)件系統(tǒng)屬性、結(jié)構(gòu)說明、相關(guān)參數(shù)設(shè)置與系統(tǒng)類型定義,以及構(gòu)件系統(tǒng)中各構(gòu)件的依賴關(guān)系。配置描述層作用于其他各個層次,記錄了構(gòu)件系統(tǒng)所需的一切信息,使得構(gòu)件系統(tǒng)的移植更為方便,同時也易于構(gòu)件的查詢、檢索、維護(hù)及出入庫管理。

          硬件抽象層實(shí)現(xiàn)硬件的驅(qū)動、I/O控制,可以用于同一種硬件平臺的很多應(yīng)用中。OS層主要用于與操作系統(tǒng)相關(guān)的操作,包括系統(tǒng)任務(wù)的創(chuàng)建、消息的創(chuàng)建等。通信層實(shí)現(xiàn)數(shù)據(jù)的傳遞、數(shù)據(jù)格式的轉(zhuǎn)換。

          用戶接口層提供與底層應(yīng)用相關(guān)的基本操作函數(shù)、對外接口函數(shù),實(shí)現(xiàn)上下層之間的互操作。應(yīng)用層位于頂層,用于實(shí)現(xiàn)用戶的應(yīng)用程序。用戶無需關(guān)心底層的硬件結(jié)構(gòu),直接使用用戶接口層提供的基本操作函數(shù),即可編程實(shí)現(xiàn)自己需要的功能。

          層(即構(gòu)件子系統(tǒng))的接口是所包含的構(gòu)件接口的組合。分層接口從上層看是透明的,對下層則是不透明的。在層接口處定義的構(gòu)件僅對整個層次結(jié)構(gòu)中該層或者該層之上的構(gòu)件可見。只要符合一定的條件,每一層都可實(shí)現(xiàn)相當(dāng)程度的復(fù)用,只需要替換相關(guān)的構(gòu)件即可。

          這里,特別要提到“原型”的概念。在各個層中,每個垂直切片僅實(shí)現(xiàn)與切片的目的相關(guān)的部分。這種實(shí)現(xiàn)方案稱為“迭代式原型(iterative prototyping)”,每個切片稱為一個“原型(prototype)”。實(shí)現(xiàn)原型時,每個原型都在其前驅(qū)所實(shí)現(xiàn)的特性的基礎(chǔ)上進(jìn)行構(gòu)造。原型的序列根據(jù)邏輯上特性的優(yōu)先順序來確定。本體系結(jié)構(gòu)引入原型的概念,每個原型包含來自各層的一個或者多個構(gòu)件,后面的原型構(gòu)造于先前原型所提供的服務(wù)的基礎(chǔ)上。每個原型將實(shí)現(xiàn)一種特定的功能,逐漸增加功能,最終實(shí)現(xiàn)用戶應(yīng)用程序。

          分層的結(jié)構(gòu)設(shè)計(jì)保持了頂層與低層很好的一致性,實(shí)現(xiàn)了橫向分離;同時,原型的引用使得各層間的連接更為緊密,縱向相連,從而得到集成度更高、更可靠的系統(tǒng)。

          3 嵌入式構(gòu)件系統(tǒng)的實(shí)現(xiàn)

          3.1 鍵盤構(gòu)件系統(tǒng)的實(shí)現(xiàn)

          嵌入式構(gòu)件從本質(zhì)上來說,大部分的工作就是對輸入/輸出部分進(jìn)行處理。其構(gòu)件主要有鍵盤、前向通道的處理(如A/D處理)、后向通道的處理(如D/A處理)、USB控制、網(wǎng)絡(luò)控制、液晶顯示等。輸入/輸出軟件的代碼占據(jù)了整個操作系統(tǒng)的相當(dāng)部分,對嵌入式操作系統(tǒng)來說,這部分的重要性是不言而喻的。其中,鍵盤更是嵌入式應(yīng)用程序最常用的器件,因此本文以鍵盤為例,依據(jù)上述體系結(jié)構(gòu)構(gòu)建了鍵盤應(yīng)用模型,配置實(shí)現(xiàn)了鍵盤功能。

          圖2為鍵盤構(gòu)件系統(tǒng)分層體系結(jié)構(gòu)。每層左邊顯示的“棒棒糖”形狀表示層的接口,接口是一組可以從外部訪問的類和對象。虛線箭頭表示的是依賴關(guān)系,每層都依賴于其下一層的包,且構(gòu)件與構(gòu)件之間也存在著依賴關(guān)系。上層調(diào)用位于下層具體一些的層次中的服務(wù),這種單向依賴使得可以在不同的上下文中使用相同的服務(wù),而無需考慮服務(wù)的實(shí)現(xiàn)方式。同時,由于低一些的層中提供了定義良好的接口集合,可以用不同的底層實(shí)現(xiàn)來替換它們,這樣,整個構(gòu)件系統(tǒng)就能更方便地移植到其他的物理環(huán)境中。

          另外,圖2中的寬箭頭表明了數(shù)據(jù)的傳遞方向,數(shù)據(jù)在硬件抽象層取得后,逐級向上層傳遞,經(jīng)過層層處理、轉(zhuǎn)換,最終到達(dá)應(yīng)用層,被用戶程序所用。而此處,數(shù)據(jù)的傳輸過程其實(shí)也是一個原型的形成過程,即最終實(shí)現(xiàn)了一鍵盤響應(yīng)處理任務(wù)。

          3.2 構(gòu)件生成集成環(huán)境的實(shí)現(xiàn)

          基于構(gòu)件系統(tǒng)體系結(jié)構(gòu),本文擬開發(fā)了一構(gòu)件生成集成環(huán)境,如圖3所示。該環(huán)境可以實(shí)現(xiàn)構(gòu)件系統(tǒng)的自配置、自拼接、源代碼自生成,結(jié)構(gòu)清晰,使用簡便。隨后在該集成環(huán)境上,配置鍵盤構(gòu)件系統(tǒng),自動生成源代碼,并在博創(chuàng)ARM300實(shí)驗(yàn)平臺上實(shí)現(xiàn)了鍵盤響應(yīng),很好地驗(yàn)證了此體系結(jié)構(gòu)的可行性及優(yōu)越性。

          結(jié) 語

          本文擴(kuò)展了通用軟件構(gòu)件的概念,提出了適用于嵌入式系統(tǒng)的構(gòu)件模型;并在此基礎(chǔ)上設(shè)計(jì)了嵌入式軟件6層體系結(jié)構(gòu),采用了分層的結(jié)構(gòu)設(shè)計(jì),實(shí)現(xiàn)了橫向分離,而“原型”的引用使得各層縱向相連。此體系結(jié)構(gòu)不僅實(shí)現(xiàn)了軟硬件分離,同時也實(shí)現(xiàn)了功能的分離,有利于實(shí)現(xiàn)穩(wěn)定性好的嵌入式系統(tǒng)。最后,本文在鍵盤應(yīng)用實(shí)例中驗(yàn)證了其可行性。隨著嵌入式系統(tǒng)的硬件發(fā)展,以及基于構(gòu)件的軟件設(shè)計(jì)方法自身的不斷完善,基于構(gòu)件的軟件設(shè)計(jì)方法必將是未來的發(fā)展方向。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();