靳曉園 馬穎勁
北京航天自動控制研究所,北京 100854
?
一種基于MiniGUI的多任務(wù)嵌入式軟件設(shè)計
靳曉園 馬穎勁
北京航天自動控制研究所,北京 100854
分析圖形界面支持系統(tǒng)MiniGUI的消息循環(huán)機制、介紹了MiniGUI分層設(shè)計的體系結(jié)構(gòu),設(shè)計了一種基于MiniGUI的多任務(wù)多窗口嵌入式軟件。該軟件采用消息隊列和信號量處理機制以及多窗口共用一個消息循環(huán)的設(shè)計思想,加強了基于MiniGUI的嵌入式軟件的應(yīng)用性,對于嵌入式軟件圖形開發(fā)有很強的借鑒意義。
MiniGUI ;多任務(wù); 嵌入式軟件
目前,嵌入式VxWorks操作系統(tǒng)已經(jīng)廣泛應(yīng)用于航天型號中的各個領(lǐng)域。其傳統(tǒng)的圖形工具WindML由于繪制界面只是“點畫線”的方式,繪制過程繁瑣、實現(xiàn)功能單一,已越來越不能滿足VxWorks圖形應(yīng)用的需要。在圖形界面資源如此受限的嵌入式環(huán)境下,如何實現(xiàn)高效、人機交互靈活的界面應(yīng)用成為嵌入式環(huán)境開發(fā)中一個重點關(guān)注的問題。
MiniGUI是一個面向嵌入式系統(tǒng)的輕量級圖形用戶界面支持系統(tǒng),其優(yōu)點如下:
1)提供了完備的多窗口機制,實現(xiàn)了類win32的消息傳遞機制;
2)不同于WindML字符集局限性,能夠支持多字符集和多字體;
3)可以支持常見的圖像文件導(dǎo)入Vxworks操作系統(tǒng),如BMP,GIF,JPEG等;
4)支持windows的資源文件,如位圖、圖標(biāo)、光標(biāo)等。
本文以MiniGUI為參考,運行平臺為Vxworks操作系統(tǒng),在此基礎(chǔ)上開發(fā)多任務(wù)的嵌入式應(yīng)用,實現(xiàn)控制臺界面的實時顯示和刷新,并對實現(xiàn)后的軟件結(jié)構(gòu)進行分析與研究。
從整體結(jié)構(gòu)上看,MiniGUI是分層設(shè)計的。在最底層,GAL(圖形抽象層)和IAL(輸入抽象層)提供底層圖形接口以及鼠標(biāo)和鍵盤的驅(qū)動,而Pthread(POSIX thread)是用于提供內(nèi)核級線程支持的C函數(shù)庫。中間層是MiniGUI的核心層,其中包括了窗口系統(tǒng)必不可少的各個模塊,如圖l所示。最頂層的API是提供給用戶的編程接口。
圖1 MiniGUI的分層設(shè)計
本設(shè)計就是依據(jù)MiniGUI提供給用戶的界面編程GUI接口,利用多任務(wù)、多消息觸發(fā)的軟件設(shè)計思想,基于Vxworks操作系統(tǒng),設(shè)計出能夠?qū)崟r顯示和控制的嵌入式軟件。
首先要說明基于MiniGUI的多任務(wù)嵌入式軟件設(shè)計都包含哪些內(nèi)容,然后再提出下面主要闡述的幾個方面。
2.1 多任務(wù)處理方式
基于軟件使用多任務(wù)方式記錄、處理并顯示工作臺上的內(nèi)容,各任務(wù)之間及其與顯示內(nèi)容發(fā)送方的關(guān)系如圖2所示。
1)數(shù)據(jù)接收任務(wù):基于以太網(wǎng)TCP協(xié)議的數(shù)據(jù)接收任務(wù)主要功能是接收并解析顯示內(nèi)容發(fā)送方發(fā)送的顯示請求。根據(jù)解析,獲得顯示屬性(顯示內(nèi)容、所在控件、控件內(nèi)位置、顯示顏色),并將顯示屬性發(fā)送到顯示消息隊列,以顯示在控制臺界面上;
2)命令發(fā)送任務(wù):基于以太網(wǎng)TCP協(xié)議的數(shù)據(jù)接收任務(wù)主要功能是將空閑狀態(tài)的測試命令、測試過程中的鍵盤輸入碼、定期發(fā)送的查詢版本和狀態(tài)信息命令等命令發(fā)送給顯示內(nèi)容發(fā)送方;
圖2 控制顯示軟件的多任務(wù)處理方式
3)查詢狀態(tài)、版本任務(wù):該任務(wù)不斷向命令消息隊列發(fā)送查詢顯示內(nèi)容發(fā)送方的版本信息及狀態(tài)信息命令,以便命令發(fā)送任務(wù)處理該命令并獲得查詢結(jié)果回令;
4)MiniGUI界面任務(wù):該任務(wù)依據(jù)消息傳遞機制的方式處理任務(wù),獲得并向鍵盤處理任務(wù)發(fā)送鍵盤消息碼,并將顯示屬性隊列里的內(nèi)容顯示在控制臺界面上,向命令發(fā)送任務(wù)發(fā)送需要進行某項測試的ID號;
5)鍵盤處理任務(wù):處理MiniGUI界面任務(wù)發(fā)送給消息隊列的鍵盤輸入內(nèi)容,并將其轉(zhuǎn)換成鍵盤命令發(fā)送給命令發(fā)送任務(wù);
6)數(shù)據(jù)存儲任務(wù):為了便于調(diào)試和查找問題的需要,記錄用戶輸入的鍵盤消息、在控制臺上顯示的所有內(nèi)容、軟件在運行過程中的log信息。
為了保證所有通信過程的暢通、防止出現(xiàn)丟數(shù)漏數(shù)現(xiàn)象,應(yīng)把2個通信任務(wù):數(shù)據(jù)接收任務(wù)和命令發(fā)送任務(wù)的優(yōu)先級設(shè)為最高。數(shù)據(jù)存儲任務(wù)僅僅用于調(diào)試及排查問題需要,優(yōu)先級最低,各個任務(wù)的優(yōu)先級和堆棧分配關(guān)系如表1所示。
表1 任務(wù)優(yōu)先級及堆棧大小分配情況
控制顯示軟件的6項任務(wù)相輔相成、相互制約和影響,共同完成該軟件的控制和顯示功能。
2.2 消息隊列的處理和信號量機制
多任務(wù)的最大優(yōu)點是:除堆棧之外,幾乎所有的數(shù)據(jù)均是共享的,因此任務(wù)間切換、創(chuàng)建、刪除等操作開銷低;而最大缺點是:由于不同的任務(wù)共享同一個地址空間,很可能導(dǎo)致任務(wù)之間互相破壞數(shù)據(jù)。為了解決以上問題,控制顯示軟件增加了消息的處理和信號量機制,從而抑制了不同任務(wù)之間同時訪問相同數(shù)據(jù)現(xiàn)象產(chǎn)生。
消息隊列的處理方式就是一個任務(wù)將需要處理的內(nèi)容打包形成消息,放在(send)消息隊列里,另一個任務(wù)將需要處理的消息從消息隊列里取出(Receive),解包后以便進行處理。在某些任務(wù)中,當(dāng)大量顯示內(nèi)容等消息需要處理時,這種消息隊列機制可以暫且放入消息隊列等待處理,當(dāng)處理任務(wù)空閑時,可以從消息隊列依次取出消息進行處理,從而緩解了大量處理大量數(shù)據(jù)給任務(wù)帶來的壓力。
在一個任務(wù)中,消息放入消息隊列或從消息隊列取出消息的過程是不允許其他任務(wù)對該消息隊列進行訪問的,為防止其他任務(wù)對該消息隊列進行訪問,即引入了信號量處理機制。
在一個任務(wù)處理中,為防止其他的任務(wù)打斷并改寫第一個任務(wù)中的數(shù)據(jù)??稍诘谝粋€任務(wù)處理之前產(chǎn)生(Take)一個防止其他任務(wù)打斷的信號量,在該任務(wù)處理完畢后釋放(Give)該信號量。在該信號量釋放之前,其他高優(yōu)先級的任務(wù)也不能訪問該任務(wù)中的數(shù)據(jù),從而防止了在不同任務(wù)中破壞數(shù)據(jù)的現(xiàn)象產(chǎn)生。
2.3 多窗口的設(shè)計思想
MiniGUI消息循環(huán)的機制如圖3所示。
圖3 MiniGUI消息循環(huán)機制
可以看到,MiniGUI典型的消息循環(huán)方式下,如果一個窗口采用一個消息循環(huán),只有當(dāng)該窗口消息處理完畢退出后才能進行下一個窗口的消息處理,而上一個窗口的消息再也不會得到處理。所以,如果MiniGUI界面任務(wù)存在2個或2個以上窗口時,一個窗口對應(yīng)一個消息循環(huán)的情況下,在窗口產(chǎn)生的消息很難得到及時處理。
為了解決以上問題,控制顯示軟件設(shè)計了MiniGUI多窗口單消息循環(huán)的機制。在程序啟動之初即產(chǎn)生一個父窗口(pmStartLogoWin),由該父窗口產(chǎn)生3個子窗口(pmSelectWin,pmTestWin和pmShowDataWin),這3個窗口共用父窗口的消息循環(huán),該消息循環(huán)共同處理4個窗口產(chǎn)生的消息??刂骑@示軟件需要顯示某個窗口時,便將該窗口顯示屬性設(shè)為“顯示”,其他窗口顯示屬性設(shè)為“隱藏”。
這種多窗口的設(shè)計思想會避免多個消息循環(huán)帶來的消息不能處理問題。
以MiniGUI為軟件支撐,基于Vxworks的嵌入式軟件融入了多任務(wù)多窗口和消息隊列的處理機制,使得人機交互界面更友好、軟件設(shè)計更為合理,具有一定的推廣性。
[1] 于秀霞.嵌入式監(jiān)控系統(tǒng)中MiniGUI的編程與實現(xiàn)[J].長春大學(xué)學(xué)報,2009,19(6):58-60.(YU Xiuxia. Programme and Realization of MiniGUI on Embedded Monitor System[J].ChangChun University Transaction, 2009,19(6):58-60.)
[2] 保云,王銳.MiniGUI消息機制探討[J].計算機科學(xué),2006,33(9):188-189.(BAO Yun, WANG Rui. Discussion on MiniGui Message Mechanism[J].Computer Science, 2006,33(9):188-189.)
[3] 郡獻鵬,郭玉東.MiniGuI——面向嵌入式系統(tǒng)的GUI系統(tǒng)[J].信息工程大學(xué)學(xué)報,2001,2(3):8-10.(JUN Xianpeng, GUO Yudong.MiniGUI—GUI System Faced on Embedded System[J].Information Engineering University Transaction, 2001,2(3):8-10.)
[4] 明芳,徐凌,王剛.基于VxWorks系統(tǒng)的MiniGUI圖形界面開發(fā)[J].計算機與數(shù)字工程,2007,35(7):189-191.(MING Fang, XU Ling,WANG Gang.MiniGUI Graphical Interfaces Exploitation Based on Vxworks System[J].Computer and Digital Engineering, 2007,35(7):189-191.)
The Design of Embedded Software Based on MiniGUI and Multitask
JIN Xiaoyuan MA Yingjin
Beijing Aerospace Automatic Control Institute,Beijing 100854,China
ThemechanismofmessagecirculationbasedonGUIsystemMiniGUIisanalyzed,andthesystemstructureofMiniGUIdelaminationdesignisintroduced.AndaembeddedsoftwarebasedonMiniGui,multitaskandmultiwindowisdesigned.Thisdesignideaofmessagequeue,semaphoremanagementandamessagecirculationusedbymultiwindowisappliedinthissoftware.TheapplicationofembeddedsoftwarebasedonMiniGUIisenhancedbyusingthisfunctionandthissoftwarehasfairreferencevaluefortheGUIdesignofembeddedsoftware.
MiniGUI;Multitask;Embeddedsoftware
2011-09-01
靳曉園(1984-),女,山東棗莊人,助理工程師,主要研究方向為嵌入式軟件綜合設(shè)計和軟件工程;馬穎勁(1977-),男,江西上饒人,工程師,主要研究方向為嵌入式軟件的開發(fā)設(shè)計。
TP311.52
A
1006-3242(2012)03-0065-04