基于DeltaOS的系統(tǒng)軟件設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
雙星定位系統(tǒng)是我國(guó)自主開(kāi)發(fā)的定位導(dǎo)航系統(tǒng),它的用戶手持終端對(duì)實(shí)時(shí)性要求高,考慮到價(jià)格以及開(kāi)發(fā)周期的因素,用戶機(jī)系統(tǒng)軟件的開(kāi)發(fā)選用了具有國(guó)內(nèi)自主知識(shí)產(chǎn)權(quán)的DeltaOS.
本系統(tǒng)的系統(tǒng)軟件在DeltaCORE內(nèi)核上構(gòu)建,選擇采用C語(yǔ)言編寫(xiě),來(lái)提高軟件的執(zhí)行效率和可讀性;圖形界面基于DeltaGUI設(shè)計(jì),采用C++編寫(xiě),以縮短開(kāi)發(fā)周期。該系統(tǒng)軟件設(shè)計(jì)的重點(diǎn)在于穩(wěn)定性和可靠性,關(guān)鍵和難點(diǎn)在于實(shí)時(shí)性的保證。作為一個(gè)完善的系統(tǒng),軟件功能的可擴(kuò)展性也是必不可少的。本文從總體設(shè)計(jì)入手,針對(duì)性地解決了以上問(wèn)題。
1 系統(tǒng)功能
雙星用戶機(jī)是一個(gè)定位和通信終端,它除了必須完成定位、通信功能外,還需要有友善的人機(jī)交互界面以及測(cè)試設(shè)備接口。嵌入式系統(tǒng)和外設(shè)之間的關(guān)系如圖1所示。
嵌入式系統(tǒng)的硬件平臺(tái)是通用性的平臺(tái),算法實(shí)現(xiàn)和設(shè)備各部分的協(xié)調(diào)控制都由嵌入式軟件來(lái)實(shí)現(xiàn)。軟件部分需要完成的具體功能有:界面輸入輸出控制、入站數(shù)據(jù)段打包、入站信息加密、入站幀打包、出站幀拆包、出站信息解密和提供測(cè)試接口。
2 提高系統(tǒng)的實(shí)時(shí)性
2.1 任務(wù)劃分的優(yōu)化
在設(shè)計(jì)一個(gè)較為復(fù)雜的多任務(wù)應(yīng)用時(shí),進(jìn)行的合理的任務(wù)劃分對(duì)系統(tǒng)的運(yùn)行效率、實(shí)時(shí)性和吞吐量影響極大。任務(wù)分解過(guò)細(xì)會(huì)引起任務(wù)頻繁切換的開(kāi)銷(xiāo)增加,而任務(wù)分解不夠徹底會(huì)造成原本可以并行的操作只能按順序串行完成,從而減少了系統(tǒng)的吞吐量。
在將一個(gè)軟件系統(tǒng)分解成并行任務(wù)時(shí),主要需考慮的是系統(tǒng)功能的異步性。分析數(shù)據(jù)流圖中的變換,確定哪些變換可以并行,哪些變換在本質(zhì)上是順序的,通過(guò)這種方法,劃分出任務(wù):一個(gè)變換對(duì)應(yīng)一個(gè)任務(wù),或者一個(gè)任務(wù)包括幾個(gè)變換。一個(gè)變換是應(yīng)該成為一個(gè)獨(dú)立的任務(wù),還是應(yīng)該和其他變換一起組成一個(gè)任務(wù),本軟件中遵循了H-Gomma原則[1],即:
?、買(mǎi)/O依賴性原則
②時(shí)間關(guān)鍵性原則
?、鄞笥?jì)算量原則
④功能內(nèi)聚
?、輹r(shí)間內(nèi)聚
⑥周期性原則
本系統(tǒng)的軟件分為應(yīng)用軟件和系統(tǒng)軟件兩大部份。應(yīng)用軟件部分位于系統(tǒng)軟件上層,它完成圖形界面的輸入及顯示功能。應(yīng)用軟件部分具有處理時(shí)間長(zhǎng)、實(shí)時(shí)性要求不高和不存在并行性的特點(diǎn),因此作為一個(gè)GUI任務(wù)并且賦予最低優(yōu)先級(jí)。系統(tǒng)軟件需要完成所有出入站信息處理,處理過(guò)程復(fù)雜,實(shí)時(shí)性要求高,順序處理顯然不能滿足要求,因此必須進(jìn)行任務(wù)劃分優(yōu)化。
圖2為入站信息處理的數(shù)據(jù)流圖,圖3位出站信息處理的數(shù)據(jù)流圖。
根據(jù)I/O依賴性原則,直接和I/O設(shè)備打交道的功能都應(yīng)該成為獨(dú)立的任務(wù),因?yàn)樗倪\(yùn)行速度受制于與它交互的I/O設(shè)備的速度。在入站流程中,向IC卡發(fā)指令、接收IC卡響應(yīng)信息和送入站數(shù)據(jù)幀至基帶均存在I/O操作,應(yīng)該獨(dú)立劃分為一個(gè)任務(wù)。同理,出站信息處理過(guò)程中的主通道數(shù)據(jù)讀取、次通道數(shù)據(jù)讀取、向IC卡發(fā)指令和接收IC卡響應(yīng)信息分別劃分為獨(dú)立的任務(wù)。
圖2 入站信息處理數(shù)據(jù)流圖
圖3 出站信息處理數(shù)據(jù)流圖
根據(jù)功能內(nèi)聚原則,功能緊密相關(guān)的變換組成一個(gè)任務(wù),它們共享資源或相同事件的驅(qū)動(dòng)。定位數(shù)據(jù)段打包和通信數(shù)據(jù)段打包具有相似功能,它們均由有效輸入的指令觸發(fā),可以合并為一個(gè)數(shù)據(jù)段打包任務(wù),針對(duì)不同類(lèi)別的請(qǐng)求使用不同的功能模塊來(lái)處理。這樣,當(dāng)系統(tǒng)需要增加新的功能時(shí)只需在該任務(wù)中增加相應(yīng)的處理模塊即可,可擴(kuò)展性得到了保證。
根據(jù)時(shí)間內(nèi)聚原則,同一時(shí)間內(nèi)完成的功能,即使這些功能不相關(guān)也可組成一個(gè)任務(wù)。數(shù)據(jù)段的打包在輸入指令解釋完成之后立即被處理,在時(shí)間上具有連續(xù)性,合并成一個(gè)任務(wù)可以減少任務(wù)間通信開(kāi)銷(xiāo),有利于提高系統(tǒng)實(shí)時(shí)性。
主通道數(shù)據(jù)幀拆包、次通道數(shù)據(jù)幀拆包和入站數(shù)據(jù)幀打包的運(yùn)算量大,適合作為獨(dú)立的任務(wù)。然而,主通道和次通道出站數(shù)據(jù)幀格式相同,完全可以共用一個(gè)任務(wù):出站幀數(shù)據(jù)拆包。
雖然加密指令打包和解密指令打包分別處于入站信息處理流程和出站信息處理流程,但是它們同屬I(mǎi)C卡指令打包,具有很強(qiáng)的功能內(nèi)聚性,合并為一個(gè)任務(wù)共用IC卡驅(qū)動(dòng)。
任務(wù)重新劃分如圖4所示。優(yōu)化之后,不但系統(tǒng)軟件實(shí)時(shí)性和可擴(kuò)展性得到增強(qiáng),而且由于充分的代碼重用,代碼尺寸減小,節(jié)省存儲(chǔ)空間。
圖4 優(yōu)化后的出入站任務(wù)劃分和數(shù)據(jù)流圖
2.2 中斷優(yōu)化
任務(wù)的切換是由操作系統(tǒng)來(lái)調(diào)度的,操作系統(tǒng)的干預(yù)會(huì)浪費(fèi)CPU時(shí)間。特別是對(duì)于時(shí)間關(guān)鍵性很強(qiáng)任務(wù),例如基帶主通道數(shù)據(jù)讀取、次通道數(shù)據(jù)讀取、向IC卡發(fā)指令、接收IC卡相應(yīng)信息任務(wù),頻繁的任務(wù)調(diào)度會(huì)使系統(tǒng)的效率低下。因此,這些處理直接由中斷服務(wù)子程序來(lái)完成。
雖然中斷服務(wù)響應(yīng)速度快,但是當(dāng)一個(gè)中斷服務(wù)執(zhí)行時(shí),其它同優(yōu)先級(jí)或較低優(yōu)先級(jí)的中斷以及任意優(yōu)先級(jí)的任務(wù)均得不到執(zhí)行。因此如果中斷服務(wù)所占用的時(shí)間過(guò)長(zhǎng),同樣會(huì)降低系統(tǒng)的實(shí)時(shí)性。
為了提高系統(tǒng)的實(shí)時(shí)性,本系統(tǒng)軟件在中斷處理上主要做了以下兩方面的優(yōu)化:
?、僦袛鄡?yōu)先級(jí)設(shè)置的優(yōu)化,將觸發(fā)頻率高的中斷和重要的中斷設(shè)為高優(yōu)先級(jí)來(lái)保證其及時(shí)響應(yīng)。
?、陉P(guān)中斷時(shí)間應(yīng)該盡可能地小,ISRs只完成一些必要的操作,如:輸入數(shù)據(jù)、輸出數(shù)據(jù)或?qū)⒖刂菩畔鬟f給任務(wù),對(duì)中斷的進(jìn)一步處理通過(guò)任務(wù)來(lái)完成[2]。[!--empirenews.page--]3 可靠性保證和可擴(kuò)展性的提高
對(duì)于任何軟件來(lái)說(shuō),可靠性都是至關(guān)重要的。軟件的可靠性在任務(wù)內(nèi)是容易做到,通常問(wèn)題都是出在任務(wù)間的接口之上。接口設(shè)計(jì)也關(guān)系到軟件可擴(kuò)展性能。在多任務(wù)操作系統(tǒng)中,任務(wù)間的接口是通過(guò)同步和通信機(jī)制來(lái)實(shí)現(xiàn)的,因此同步和通信機(jī)制必須認(rèn)真選取。
DeltaCORE提供了消息隊(duì)列(message queue)、信號(hào)量(semaphore)、異步信號(hào)(signal)、事件(event)這四種通信和同步機(jī)制。其中,消息隊(duì)列和事件機(jī)制可以同時(shí)實(shí)現(xiàn)通信和同步,信號(hào)量機(jī)制可以實(shí)現(xiàn)同步和互斥,異步信號(hào)(又叫軟中斷機(jī)制)可以實(shí)現(xiàn)同步。
為了滿足系統(tǒng)通信和同步的需要,可以采用兩種方案:第一種方案是信號(hào)量等同步機(jī)制實(shí)現(xiàn)同步,用全局?jǐn)?shù)組或其他的共享數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)各任務(wù)間的通信,如圖5;另一種是采用消息隊(duì)列來(lái)同時(shí)實(shí)現(xiàn)通信和同步,如圖6。
對(duì)比兩種方案,各有優(yōu)缺點(diǎn):方案一實(shí)時(shí)性強(qiáng),但存在可重入性問(wèn)題;方案二實(shí)現(xiàn)簡(jiǎn)單而且可靠,但是消息隊(duì)列機(jī)制通信的實(shí)時(shí)性相對(duì)較弱。本系統(tǒng)中出站信息的突發(fā)性強(qiáng),如果采用方案一,則可能導(dǎo)致第二個(gè)通道的數(shù)據(jù)失效或者第一個(gè)通道的數(shù)據(jù)被覆蓋;如果采用方案二雖然數(shù)據(jù)的處理延時(shí)稍大,但是數(shù)據(jù)能夠完整存儲(chǔ)到消息隊(duì)列中不被損壞。此外,利用消息隊(duì)列為任務(wù)提供唯一的入口,能簡(jiǎn)化接口設(shè)計(jì)和方便功能擴(kuò)展。因此,本文采用消息隊(duì)列方案,其實(shí)現(xiàn)方法如下:
每個(gè)任務(wù)都對(duì)應(yīng)一個(gè)消息隊(duì)列,任務(wù)只處理與之相對(duì)應(yīng)的消息隊(duì)列中的消息。對(duì)于發(fā)送方(task1),當(dāng)它需要將發(fā)送緩沖區(qū)buffer中的數(shù)據(jù)交給task2處理時(shí),只須將buffer中的數(shù)據(jù)發(fā)送到與task2對(duì)應(yīng)的消息隊(duì)列Q2中就行了。
ret = delta_message_queue_send ( Queue_id[ 2 ], buffer, size );
其中Queue_id[2]為消息隊(duì)列Q2的ID,size為消息大小(單位字節(jié))。
對(duì)于接收方(task2),將接收消息函數(shù)的等待時(shí)間參數(shù)設(shè)為永久等待,達(dá)到當(dāng)消息隊(duì)列為空時(shí)阻塞任務(wù)的目的。task2的代碼如下:
delta_task task1()
{
delta_status_code ret;
…… // 定義其他局部變量
while(1)
{
ret = delta_message_queue_receive(
Queue_id[ 2 ], /*消息隊(duì)列ID*/
RecBuff, /*指向接收緩沖區(qū)的指針*/
&size,/*接收消息的尺寸(單位字節(jié))*/
DELTA_DEFAULT_OPTIONS, /*屬性集*/
DELTA_NO_TIMEOUT /*等待時(shí)間*/
);
…… //完成task1功能的代碼
}
}
通過(guò)這種方式,任務(wù)與任務(wù)之間、任務(wù)與中斷之間的通信和同步都得以實(shí)現(xiàn)。任務(wù)的狀態(tài)轉(zhuǎn)換如圖7:
4 致命錯(cuò)誤的防止和解決
通常異常是由兩種情況引起的:一種是數(shù)組越界或使用指針不當(dāng);另一種是任務(wù)棧溢出。為避免以上情況發(fā)生,數(shù)組和任務(wù)棧的大小必須設(shè)置恰當(dāng),修改數(shù)組元素的時(shí)候要保證下標(biāo)是在合法范圍內(nèi)的,使用指針要特別小心。不過(guò),DeltaOS提供了異常處理機(jī)制,用戶可以編寫(xiě)自己的擴(kuò)展例程,當(dāng)出現(xiàn)致命錯(cuò)誤的時(shí)候?qū)嵭幸欢ǖ耐炀却胧热鐝?fù)位程序整個(gè)系統(tǒng)軟件或者重新起動(dòng)指定任務(wù)。
DeltaOS是一個(gè)強(qiáng)實(shí)時(shí)性的操作系統(tǒng),通過(guò)優(yōu)化任務(wù)劃分、有效的利用中斷機(jī)制滿足了系統(tǒng)的強(qiáng)實(shí)時(shí)要求。利用本文提出的通信和同步方案,實(shí)現(xiàn)了任務(wù)的標(biāo)準(zhǔn)化接口,方便地進(jìn)行了多次功能擴(kuò)展,并且顯示了它可靠性強(qiáng)的優(yōu)點(diǎn)。