靳曉園 馬穎勁
北京航天自動控制研究所,北京 100854
?
一種基于MiniGUI的多任務嵌入式軟件設計
靳曉園 馬穎勁
北京航天自動控制研究所,北京 100854

分析圖形界面支持系統MiniGUI的消息循環機制、介紹了MiniGUI分層設計的體系結構,設計了一種基于MiniGUI的多任務多窗口嵌入式軟件。該軟件采用消息隊列和信號量處理機制以及多窗口共用一個消息循環的設計思想,加強了基于MiniGUI的嵌入式軟件的應用性,對于嵌入式軟件圖形開發有很強的借鑒意義。
MiniGUI ;多任務; 嵌入式軟件
目前,嵌入式VxWorks操作系統已經廣泛應用于航天型號中的各個領域。其傳統的圖形工具WindML由于繪制界面只是“點畫線”的方式,繪制過程繁瑣、實現功能單一,已越來越不能滿足VxWorks圖形應用的需要。在圖形界面資源如此受限的嵌入式環境下,如何實現高效、人機交互靈活的界面應用成為嵌入式環境開發中一個重點關注的問題。
MiniGUI是一個面向嵌入式系統的輕量級圖形用戶界面支持系統,其優點如下:
1)提供了完備的多窗口機制,實現了類win32的消息傳遞機制;
2)不同于WindML字符集局限性,能夠支持多字符集和多字體;
3)可以支持常見的圖像文件導入Vxworks操作系統,如BMP,GIF,JPEG等;
4)支持windows的資源文件,如位圖、圖標、光標等。
本文以MiniGUI為參考,運行平臺為Vxworks操作系統,在此基礎上開發多任務的嵌入式應用,實現控制臺界面的實時顯示和刷新,并對實現后的軟件結構進行分析與研究。
從整體結構上看,MiniGUI是分層設計的。在最底層,GAL(圖形抽象層)和IAL(輸入抽象層)提供底層圖形接口以及鼠標和鍵盤的驅動,而Pthread(POSIX thread)是用于提供內核級線程支持的C函數庫。中間層是MiniGUI的核心層,其中包括了窗口系統必不可少的各個模塊,如圖l所示。最頂層的API是提供給用戶的編程接口。

圖1 MiniGUI的分層設計
本設計就是依據MiniGUI提供給用戶的界面編程GUI接口,利用多任務、多消息觸發的軟件設計思想,基于Vxworks操作系統,設計出能夠實時顯示和控制的嵌入式軟件。
首先要說明基于MiniGUI的多任務嵌入式軟件設計都包含哪些內容,然后再提出下面主要闡述的幾個方面。
2.1 多任務處理方式
基于軟件使用多任務方式記錄、處理并顯示工作臺上的內容,各任務之間及其與顯示內容發送方的關系如圖2所示。
1)數據接收任務:基于以太網TCP協議的數據接收任務主要功能是接收并解析顯示內容發送方發送的顯示請求。根據解析,獲得顯示屬性(顯示內容、所在控件、控件內位置、顯示顏色),并將顯示屬性發送到顯示消息隊列,以顯示在控制臺界面上;
2)命令發送任務:基于以太網TCP協議的數據接收任務主要功能是將空閑狀態的測試命令、測試過程中的鍵盤輸入碼、定期發送的查詢版本和狀態信息命令等命令發送給顯示內容發送方;

圖2 控制顯示軟件的多任務處理方式
3)查詢狀態、版本任務:該任務不斷向命令消息隊列發送查詢顯示內容發送方的版本信息及狀態信息命令,以便命令發送任務處理該命令并獲得查詢結果回令;
4)MiniGUI界面任務:該任務依據消息傳遞機制的方式處理任務,獲得并向鍵盤處理任務發送鍵盤消息碼,并將顯示屬性隊列里的內容顯示在控制臺界面上,向命令發送任務發送需要進行某項測試的ID號;
5)鍵盤處理任務:處理MiniGUI界面任務發送給消息隊列的鍵盤輸入內容,并將其轉換成鍵盤命令發送給命令發送任務;
6)數據存儲任務:為了便于調試和查找問題的需要,記錄用戶輸入的鍵盤消息、在控制臺上顯示的所有內容、軟件在運行過程中的log信息。
為了保證所有通信過程的暢通、防止出現丟數漏數現象,應把2個通信任務:數據接收任務和命令發送任務的優先級設為最高。數據存儲任務僅僅用于調試及排查問題需要,優先級最低,各個任務的優先級和堆棧分配關系如表1所示。

表1 任務優先級及堆棧大小分配情況
控制顯示軟件的6項任務相輔相成、相互制約和影響,共同完成該軟件的控制和顯示功能。
2.2 消息隊列的處理和信號量機制
多任務的最大優點是:除堆棧之外,幾乎所有的數據均是共享的,因此任務間切換、創建、刪除等操作開銷低;而最大缺點是:由于不同的任務共享同一個地址空間,很可能導致任務之間互相破壞數據。為了解決以上問題,控制顯示軟件增加了消息的處理和信號量機制,從而抑制了不同任務之間同時訪問相同數據現象產生。
消息隊列的處理方式就是一個任務將需要處理的內容打包形成消息,放在(send)消息隊列里,另一個任務將需要處理的消息從消息隊列里取出(Receive),解包后以便進行處理。在某些任務中,當大量顯示內容等消息需要處理時,這種消息隊列機制可以暫且放入消息隊列等待處理,當處理任務空閑時,可以從消息隊列依次取出消息進行處理,從而緩解了大量處理大量數據給任務帶來的壓力。
在一個任務中,消息放入消息隊列或從消息隊列取出消息的過程是不允許其他任務對該消息隊列進行訪問的,為防止其他任務對該消息隊列進行訪問,即引入了信號量處理機制。
在一個任務處理中,為防止其他的任務打斷并改寫第一個任務中的數據??稍诘谝粋€任務處理之前產生(Take)一個防止其他任務打斷的信號量,在該任務處理完畢后釋放(Give)該信號量。在該信號量釋放之前,其他高優先級的任務也不能訪問該任務中的數據,從而防止了在不同任務中破壞數據的現象產生。
2.3 多窗口的設計思想
MiniGUI消息循環的機制如圖3所示。

圖3 MiniGUI消息循環機制
可以看到,MiniGUI典型的消息循環方式下,如果一個窗口采用一個消息循環,只有當該窗口消息處理完畢退出后才能進行下一個窗口的消息處理,而上一個窗口的消息再也不會得到處理。所以,如果MiniGUI界面任務存在2個或2個以上窗口時,一個窗口對應一個消息循環的情況下,在窗口產生的消息很難得到及時處理。
為了解決以上問題,控制顯示軟件設計了MiniGUI多窗口單消息循環的機制。在程序啟動之初即產生一個父窗口(pmStartLogoWin),由該父窗口產生3個子窗口(pmSelectWin,pmTestWin和pmShowDataWin),這3個窗口共用父窗口的消息循環,該消息循環共同處理4個窗口產生的消息??刂骑@示軟件需要顯示某個窗口時,便將該窗口顯示屬性設為“顯示”,其他窗口顯示屬性設為“隱藏”。
這種多窗口的設計思想會避免多個消息循環帶來的消息不能處理問題。
以MiniGUI為軟件支撐,基于Vxworks的嵌入式軟件融入了多任務多窗口和消息隊列的處理機制,使得人機交互界面更友好、軟件設計更為合理,具有一定的推廣性。
[1] 于秀霞.嵌入式監控系統中MiniGUI的編程與實現[J].長春大學學報,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].計算機科學,2006,33(9):188-189.(BAO Yun, WANG Rui. Discussion on MiniGui Message Mechanism[J].Computer Science, 2006,33(9):188-189.)
[3] 郡獻鵬,郭玉東.MiniGuI——面向嵌入式系統的GUI系統[J].信息工程大學學報,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系統的MiniGUI圖形界面開發[J].計算機與數字工程,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-),女,山東棗莊人,助理工程師,主要研究方向為嵌入式軟件綜合設計和軟件工程;馬穎勁(1977-),男,江西上饒人,工程師,主要研究方向為嵌入式軟件的開發設計。
TP311.52
A
1006-3242(2012)03-0065-04