基于嵌入式實(shí)時(shí)系統(tǒng)設(shè)計(jì)模式的研究與應(yīng)用
摘要:為滿足嵌入式實(shí)時(shí)系統(tǒng)快速適應(yīng)硬件型號(hào)升級(jí)、快速變更要求以及可伸縮、可修改、可復(fù)用等方面的需求,本文提出了一種適用于嵌入式實(shí)時(shí)系統(tǒng)的設(shè)計(jì)模式--ERTSDP,解決了系統(tǒng)分析設(shè)計(jì)中實(shí)時(shí)性、可靠性等方面的問(wèn)題,提高了軟件的開(kāi)發(fā)速度。最后結(jié)合具體應(yīng)用對(duì)這一模式的實(shí)例化過(guò)程加以闡述。
本文引用地址:http://m.butianyuan.cn/article/149621.htm1 引言
從系統(tǒng)的觀點(diǎn)來(lái)看,嵌入式實(shí)時(shí)系統(tǒng)也是系統(tǒng),特別是硬件技術(shù)的快速發(fā)展,嵌入式實(shí)時(shí)軟件也有快速適應(yīng)硬件型號(hào)升級(jí)問(wèn)題,也有業(yè)務(wù)快速變更要求以及可伸縮、可修改、可復(fù)用等方面的問(wèn)題。但面向?qū)ο蠹夹g(shù)對(duì)于實(shí)時(shí)性、可靠性的描述并不適合,在嵌入式實(shí)時(shí)應(yīng)用中依然不是主流設(shè)計(jì)方法,從而引入了模式的概念。
最早也是最基礎(chǔ)的設(shè)計(jì)模式是Liskov提出的七種基本模式,并提出對(duì)象構(gòu)成模式的五條基本準(zhǔn)則[1-4],為面向?qū)ο?a class="contentlabel" href="http://m.butianyuan.cn/news/listbylabel/label/設(shè)計(jì)模式">設(shè)計(jì)模式奠定了理論基礎(chǔ)。Gamma等四人提出了常用的25種設(shè)計(jì)模式[5],為用模式設(shè)計(jì)軟件體系結(jié)構(gòu)提供了工程實(shí)踐的基礎(chǔ)。不過(guò)Gamma的模式作用域是局部的,只在單個(gè)的協(xié)作內(nèi)。Bruce Douglas將兩個(gè)重要的軟件工程進(jìn)展--模式和UML相結(jié)合,成功地應(yīng)用在主流實(shí)時(shí)軟件傳統(tǒng)使用的概念和技術(shù)中[6]。
本文討論的模式ERTSDP是基于Bruce Douglass的實(shí)時(shí)設(shè)計(jì)模式基礎(chǔ)之上,對(duì)典型嵌入式實(shí)時(shí)系統(tǒng)的設(shè)計(jì)解決方案加以總結(jié)抽象,提出的一套完整的設(shè)計(jì)思路。這一模式的提出可以促使本領(lǐng)域軟件開(kāi)發(fā)速度成倍的提高,更為重要的是軟件質(zhì)量也可以得到保證。
2嵌入式實(shí)時(shí)系統(tǒng)設(shè)計(jì)模式(ERTSDP)研究
2.1 設(shè)計(jì)模式的定義
設(shè)計(jì)模式[7-9]是對(duì)經(jīng)常出現(xiàn)問(wèn)題的泛解。模式由三個(gè)重要的方面組成:第一是問(wèn)題(problem),這是要以模式來(lái)處理的設(shè)計(jì)的某個(gè)方面的陳述,也就是要用模式解決的某些優(yōu)化和QoS的側(cè)面。第二是解決方案(solution),也就是模式本身,模式用指明了角色的結(jié)構(gòu)圖表示。最后是結(jié)果(consequences)。
2.2 ERTSDP (Embedded Real-Time Systems Design Pattern)
1.目的
針對(duì)嵌入式實(shí)時(shí)系統(tǒng)分析和設(shè)計(jì)過(guò)程中的問(wèn)題進(jìn)行抽象并建立模型,使得新系統(tǒng)可以通過(guò)模式匹配、實(shí)例化等手段快速建立,從而達(dá)到縮短嵌入式實(shí)時(shí)產(chǎn)品開(kāi)發(fā)周期的目的。
2.解
解即模式本身,2.3小節(jié)將詳細(xì)討論。
3.結(jié)果
結(jié)果是使用模式后的一組利弊,將在本文最后討論。
2.3 模式的解
2.3.1 系統(tǒng)分析
分析的目的是定義待開(kāi)發(fā)系統(tǒng)的基本性質(zhì)。一般來(lái)說(shuō),分析是一個(gè)黑箱視圖,而設(shè)計(jì)則按某個(gè)服務(wù)質(zhì)量QoS的要求提供充分的功能。對(duì)系統(tǒng)的分析又可分為兩個(gè)階段:需求分析階段和系統(tǒng)工程階段。
(1)需求分析階段
在需求階段盡可能詳細(xì)地標(biāo)識(shí)和捕獲當(dāng)前原型的需求,可用順序圖、狀態(tài)圖、活動(dòng)圖、正文描述以及約束等的組合對(duì)需求加以描述。
(2)系統(tǒng)工程階段
系統(tǒng)工程階段實(shí)際是做高層的體系結(jié)構(gòu)設(shè)計(jì)。系統(tǒng)工程階段主要定義子系統(tǒng)的體系結(jié)構(gòu)、子系統(tǒng)的接口及交互協(xié)議、將系統(tǒng)的用例和需求分解為子系統(tǒng)的用例和需求以及對(duì)系統(tǒng)的算法分析和控制法則規(guī)范說(shuō)明。
2.3.2 系統(tǒng)設(shè)計(jì)
設(shè)計(jì)就是該問(wèn)題的具體解決方案,是對(duì)分析模型的優(yōu)化。優(yōu)化準(zhǔn)則的集合就是要求的系統(tǒng)服務(wù)質(zhì)量QoS。如果把每個(gè)QoS方面看作是獨(dú)立的特征并具有相對(duì)重要性的加權(quán)因子,那么一個(gè)好的設(shè)計(jì)就是找出下面公式的最小值。
Min [ΣQoSFeaturej * Weightj ]
其中Weightj指的是與第j個(gè)QoSFeature相關(guān)的相對(duì)重要性。對(duì)系統(tǒng)的設(shè)計(jì)也分為兩個(gè)階段:體系結(jié)構(gòu)設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)階段。
(1)體系結(jié)構(gòu)設(shè)計(jì)階段
體系結(jié)構(gòu)包括邏輯體系結(jié)構(gòu)和物理體系結(jié)構(gòu)。邏輯體系結(jié)構(gòu)只涉及模型本身如何組織,這種組織可簡(jiǎn)可繁,取決于小組需要用它構(gòu)造什么;物理體系結(jié)構(gòu)指的是組織存在于運(yùn)行時(shí)的事物。這一階段用五層體系結(jié)構(gòu)視圖、子系統(tǒng)視圖和資源并發(fā)視圖等來(lái)描述。
五層體系結(jié)構(gòu)視圖[6]是一個(gè)特定的體系結(jié)構(gòu),作用于許多嵌入式和實(shí)時(shí)系統(tǒng)的通用結(jié)構(gòu)。它包含五個(gè)域:應(yīng)用域(application domain)、用戶界面域(user interface domain)、通信域(communication domain)、抽象操作系統(tǒng)域(abstract OS domain)和抽象硬件域(abstract hardware domain)。
子系統(tǒng)視圖是表示重要子系統(tǒng)的類(lèi)圖,多用于對(duì)系統(tǒng)進(jìn)行細(xì)化時(shí)。
資源并發(fā)視圖是實(shí)時(shí)和嵌入式系統(tǒng)一個(gè)最突出的特點(diǎn)。一個(gè)有資源服務(wù)的元素,它的有效性由一個(gè)或多個(gè)服務(wù)質(zhì)量(QoS)特性來(lái)定義。QoS是資源的量化性質(zhì),如容量、執(zhí)行速度、可靠性等等。
(2)詳細(xì)設(shè)計(jì)階段
詳細(xì)設(shè)計(jì)階段是對(duì)對(duì)象和類(lèi)的內(nèi)部精細(xì)加工,它只限制在單個(gè)對(duì)象和類(lèi)之中。詳細(xì)設(shè)計(jì)時(shí),多數(shù)優(yōu)化都集中在數(shù)據(jù)構(gòu)造、算法分解、對(duì)象狀態(tài)機(jī)的優(yōu)化、對(duì)象實(shí)現(xiàn)策略、關(guān)聯(lián)的實(shí)現(xiàn)以及可見(jiàn)性和封裝問(wèn)題等方面。
模式是對(duì)設(shè)計(jì)中一般問(wèn)題的抽象,所以針對(duì)具體應(yīng)用的模式匹配以及實(shí)例化是可根據(jù)需要對(duì)ERTSDP變動(dòng)的。譬如,需求分析階段可以根據(jù)問(wèn)題的復(fù)雜性對(duì)描述手段任意組合;系統(tǒng)工程階段也是微周期中的可選部分;如果系統(tǒng)非常復(fù)雜,可以遞歸調(diào)用子系統(tǒng)視圖對(duì)系統(tǒng)分解、分級(jí)細(xì)化;還可在體系結(jié)構(gòu)設(shè)計(jì)時(shí)增加Activity圖實(shí)現(xiàn)對(duì)任務(wù)的劃分,增加sequence圖對(duì)系統(tǒng)運(yùn)行流程描述。
總之,在具體應(yīng)用中可以靈活的應(yīng)用模式來(lái)輔助設(shè)計(jì)。下面通過(guò)對(duì)常見(jiàn)的嵌入式實(shí)時(shí)系統(tǒng)--遠(yuǎn)程監(jiān)控系統(tǒng)應(yīng)用ERTSDP模式進(jìn)行分析和設(shè)計(jì),闡述了實(shí)例化模式的方法,同時(shí)也是對(duì)這一模式的討論和驗(yàn)證。
3 基于ERTSDP的遠(yuǎn)程監(jiān)控系統(tǒng)
3.1 系統(tǒng)需求分析
遠(yuǎn)程監(jiān)控系統(tǒng)現(xiàn)在已經(jīng)深透到社會(huì)的各個(gè)方面,簡(jiǎn)而言之,遠(yuǎn)程監(jiān)控系統(tǒng)就是將現(xiàn)場(chǎng)設(shè)備的運(yùn)行數(shù)據(jù)發(fā)送至遠(yuǎn)端加以監(jiān)測(cè)和控制。本系統(tǒng)投入運(yùn)行后預(yù)期的用戶有三類(lèi):普通用戶、系統(tǒng)管理員、故障專(zhuān)家。他們具有不同的職責(zé),因而賦予了不同的權(quán)限。圖1的Use Case框圖可以清晰地反映出他們各自的權(quán)限職責(zé)。
圖1 遠(yuǎn)程監(jiān)控系統(tǒng)的Use Case框圖
3.2 系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)
本系統(tǒng)包含三個(gè)子系統(tǒng)--NetWeb、NetIO和RemoteClient(見(jiàn)圖2)。NetWeb是整個(gè)系統(tǒng)的核心,承擔(dān)著實(shí)時(shí)/歷史數(shù)據(jù)管理、報(bào)警條件檢測(cè),存貯用戶組態(tài)信息等功能;NetIO用于實(shí)現(xiàn)現(xiàn)場(chǎng)數(shù)據(jù)的采集(輸入)和裝置的控制(輸出);RemoteClient則實(shí)現(xiàn)了客戶端圖形用戶界面的功能。其中NetWeb和NetIO通過(guò)RS485總線進(jìn)行通訊,NetWeb 和RemoteClient則通過(guò)socket進(jìn)行信息交換。
NetWeb運(yùn)行在嵌入式開(kāi)發(fā)板上,操作系統(tǒng)是自主研發(fā)的嵌入式實(shí)時(shí)Linux,采用的方案設(shè)計(jì)是uClinux+RTAI。
圖2 遠(yuǎn)程監(jiān)控系統(tǒng)的五層體系結(jié)構(gòu)視圖
3.3 子系統(tǒng)視圖
子系統(tǒng)視圖是表示重要子系統(tǒng)的類(lèi)圖,多用于對(duì)系統(tǒng)進(jìn)行細(xì)化時(shí)。圖3是細(xì)化后的NetWeb子系統(tǒng),從圖中可以看到,特殊的雙內(nèi)核OS--uClinx+RTAI決定了NetWeb模塊分為實(shí)時(shí)應(yīng)用和非實(shí)時(shí)應(yīng)用。下面將從初始化和運(yùn)行兩方面對(duì)圖3詳細(xì)解釋。
圖3 NetWeb模塊的子系統(tǒng)視圖
3.3.1 NetWeb子系統(tǒng)初始化
NetWeb子系統(tǒng)初始化過(guò)程主要由KernelInit模塊和UserInit模塊(圖中灰色的模塊)實(shí)現(xiàn)。首先KernelInit模塊執(zhí)行,完成內(nèi)核空間的初始化任務(wù);然后啟動(dòng)UserInit模塊,這個(gè)過(guò)程比較復(fù)雜,首先Store模塊將系統(tǒng)存儲(chǔ)的配置信息和數(shù)據(jù)信息傳給UserInit模塊(標(biāo)注{1}所示),然后KernelInit模塊驅(qū)動(dòng)485Driver模塊實(shí)時(shí)采集當(dāng)前模塊的信息,傳送給UserInit模塊(標(biāo)注{3}、{2}所示),UserInit模塊經(jīng)過(guò)兩者信息的比較,確定采集的對(duì)象,以及模塊信息的變更、系統(tǒng)狀態(tài)的變更等,最終完成初始化工作。
3.3.2 NetWeb子系統(tǒng)運(yùn)行流程
當(dāng)系統(tǒng)完成初始化開(kāi)始運(yùn)行后,Gather模塊調(diào)用485Driver模塊相關(guān)接口API對(duì)底層32個(gè)NetIO模塊進(jìn)行輪詢(xún)式采集,采集上來(lái)的數(shù)據(jù)經(jīng)過(guò)過(guò)濾整合后,正常的數(shù)據(jù)傳送至Transfer模塊,這時(shí)調(diào)用RTAI內(nèi)核中的RT_SHM模塊實(shí)現(xiàn)內(nèi)核和用戶空間大規(guī)模數(shù)據(jù)的共享(見(jiàn)標(biāo)注{4})。Receive模塊從RT_SHM接受到數(shù)據(jù),送到Store模塊存儲(chǔ),然后根據(jù)用戶要求送到Socket模塊傳到遠(yuǎn)程客戶端。如果過(guò)濾整合時(shí)發(fā)現(xiàn)數(shù)據(jù)異常,就驅(qū)動(dòng)AlarmKernel模塊,這個(gè)模塊啟動(dòng)RTAI的RT_FIFO模塊,將需報(bào)警數(shù)據(jù)通過(guò)管道(見(jiàn)標(biāo)注{5})傳送至用戶空間的AlarmUser模塊。AlarmUser模塊再驅(qū)動(dòng)Email模塊以郵件的形式完成報(bào)警。
3.4 資源并發(fā)視圖
本系統(tǒng)中任務(wù)間資源共享的方式主要有兩種:共享內(nèi)存和消息隊(duì)列。圖4和圖5分別對(duì)這兩種資源共享方式采用并發(fā)視圖進(jìn)行了分析。
圖4 共享內(nèi)存訪問(wèn)并發(fā)視圖
共享內(nèi)存對(duì)于大規(guī)模的數(shù)據(jù)共享非常適用,這里討論的是RTAI提供的實(shí)時(shí)SHM。RT_SHM并沒(méi)有提供任何互斥機(jī)制來(lái)控制實(shí)時(shí)進(jìn)程和非實(shí)時(shí)進(jìn)程訪問(wèn)同步性(對(duì)于實(shí)時(shí)任務(wù)或非實(shí)時(shí)任務(wù)之間的共享有保護(hù)措施,故不再考慮),雖然可以自己實(shí)現(xiàn)一些lock機(jī)制來(lái)控制,但是考慮到內(nèi)核任務(wù)的優(yōu)先級(jí)遠(yuǎn)高于用戶任務(wù),即實(shí)時(shí)任務(wù)從來(lái)不會(huì)被非實(shí)時(shí)任務(wù)中斷,所以實(shí)時(shí)任務(wù)對(duì)共享區(qū)寫(xiě)數(shù)據(jù)時(shí)永遠(yuǎn)是一次性寫(xiě)完所有模塊信息,而且這些數(shù)據(jù)的時(shí)間戳是一致的,可以保證數(shù)據(jù)的正確性(如圖4);而非實(shí)時(shí)任務(wù)讀共享數(shù)據(jù)時(shí)是可能發(fā)生過(guò)程中被中斷的情況,導(dǎo)致可能一次讀取的模塊數(shù)據(jù)的時(shí)間戳不一致。但實(shí)際中寫(xiě)進(jìn)程的速度遠(yuǎn)遠(yuǎn)大于讀進(jìn)程的速度,同時(shí)考慮到實(shí)際運(yùn)行時(shí)模塊數(shù)據(jù)變化是連續(xù)的,同一模塊不同時(shí)間戳采集的數(shù)據(jù)變化率不會(huì)很大,而現(xiàn)階段讀進(jìn)程只要滿足用戶需要的刷新頻率(QoS)就足夠了,所以對(duì)于數(shù)據(jù)部分丟失現(xiàn)階段并不可惜。
圖5 消息隊(duì)列訪問(wèn)并發(fā)視圖
消息隊(duì)列提供了一種傳輸多條消息的機(jī)制。如圖5所示,Sender線程因響應(yīng)evRun事件而運(yùn)行。Sender類(lèi)調(diào)用rQueue::insert()操作,并鎖定信號(hào)燈。在rQueue::insert()操作過(guò)程中,該線程被更高優(yōu)先級(jí)的Receiver線程中斷。Receiver試圖檢查在其隊(duì)列中新加入的消息。它調(diào)用rQueue::remove(),同時(shí)試圖鎖定信號(hào)燈。如果失敗,Receiver自動(dòng)掛起或被阻塞,因?yàn)樾盘?hào)燈已經(jīng)被鎖定到Sender線程,這使得Sender線程繼續(xù)工作,完成store()操作。一旦完成,rQueue類(lèi)釋放它的信號(hào)燈。它將解除對(duì)Receiver線程的阻塞,Receiver線程這時(shí)可以鎖定信號(hào)燈,讀取等待在隊(duì)列中的消息,解除信號(hào)燈的鎖定,處理收到的消息。
4 系統(tǒng)仿真平臺(tái)
通過(guò)應(yīng)用ERTSDP模式對(duì)遠(yuǎn)程監(jiān)控系統(tǒng)分析、設(shè)計(jì)以及實(shí)現(xiàn),滿足了用戶預(yù)期的需求。為了對(duì)系統(tǒng)功能、性能進(jìn)一步驗(yàn)證,搭建了系統(tǒng)仿真實(shí)驗(yàn)平臺(tái)(如圖6)。圖中標(biāo)注為NetWeb的模塊就是系統(tǒng)的嵌入式裝置,這一模塊內(nèi)部是net-start開(kāi)發(fā)板,操作系統(tǒng)是嵌入式實(shí)時(shí)Linux,子系統(tǒng)NetWeb的所有功能就運(yùn)行其上。并排的五個(gè)模塊都是NetIO模塊,分別連接有不同的輸入/輸出信號(hào),可以看到它們是通過(guò)RS-485與NetWeb相連。AI模塊通過(guò)傳感器采集到燈泡(圖中$圓圈)的溫度值,根據(jù)溫度的高低決定是否啟動(dòng)DO模塊輸出控制風(fēng)扇的轉(zhuǎn)動(dòng)。同時(shí)AO模塊可以根據(jù)用戶需求,經(jīng)由可控硅的控制可變電壓,進(jìn)而調(diào)節(jié)燈泡的亮暗程度。
圖6 實(shí)驗(yàn)系統(tǒng)平臺(tái)結(jié)構(gòu)
5 結(jié)論
本文提出的設(shè)計(jì)模式ERTSDP是一種構(gòu)建系統(tǒng)的完整解決方案,旨在為典型的嵌入式實(shí)時(shí)應(yīng)用提供分析設(shè)計(jì)的模型。實(shí)踐證明這一模式非常適用于實(shí)時(shí)性、可靠性的描述,可以有效地提高嵌入式實(shí)時(shí)領(lǐng)域軟件的開(kāi)發(fā)速度,并使軟件的質(zhì)量得以保證。
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論