基于MiniGUI的多進程圖形用戶界面的研究
MiniGUI提供了豐富的圖形構(gòu)件,如窗口、對話框、控件等,能夠?qū)崿F(xiàn)各種應用功能。MiniGUI本身是基于事件驅(qū)動的圖形用戶界系統(tǒng),所謂事件是指當用戶進行窗口操作時,如移動鼠標、單擊鼠標、進行鍵盤輸入的功能,這些動作會觸發(fā)一個相應的“事件”,并由支持系統(tǒng)收集,以特定方式翻譯為消息。應用程序一般包含自己的消息隊列,以接受系統(tǒng)消息并建立循環(huán),這樣的循環(huán)稱為消息循環(huán)。消息一般由代表消息類型的數(shù)和附加參數(shù)構(gòu)成。
多窗口系統(tǒng)在屏幕上要同時顯示多個應用程序窗口,程序窗口之間會有相互重疊關系。所以GUI系統(tǒng)運行后首先要創(chuàng)建一個根窗口,此窗口在系統(tǒng)啟動時由啟動腳本運行,是所有其他窗口的依附窗口。其他子窗口由用戶在根窗口內(nèi)點擊相應圖標產(chǎn)生,并且在子窗口內(nèi)可以繼續(xù)派生出自己的下一級子窗口,每個子窗口擁有一個窗口ID號,以標示與上級窗口的派生關系,據(jù)此便可以追溯到根窗口,而不至于產(chǎn)生窗口管理的混亂。窗口之間的可以為同級或者上下級派生關系。相互間的邏輯結(jié)構(gòu)如圖2所示:
2.2 多任務優(yōu)先級分配
由于嵌入式設備在硬件資源上的局限性,GUI系統(tǒng)對新的任務請求進行運行優(yōu)先級的分配和管理,以避免低運行級任務造成系統(tǒng)資源的浪費。GUI系統(tǒng)優(yōu)先運行級別較高的任務,對新產(chǎn)生的任務按照預定方式分配相應的運行級別,并與當前運行的任務級別進行比較,如果新任務是最高運行級別的任務,則掛起其他任務直到新任務處理結(jié)束;如果是相同運行級別的任務則把新任務加入到運行隊列的隊尾,由內(nèi)核分配CPU時間片和內(nèi)存資源,與其他的任務一起進行多任務的并發(fā)處理;如果新任務運行級別最低則將被放入到系統(tǒng)等待隊列中,直到其他任務處理完成再處理新任務。判斷流程如圖3示:
圖3運行級別判斷流程圖
3嵌入式開發(fā)環(huán)境構(gòu)建
完整的嵌入式開發(fā)環(huán)境由嵌入式目標板和宿主機構(gòu)成,兩者通過網(wǎng)線、計算機串口和JTAG連接。用戶程序在宿主機平臺上進行開發(fā),交叉編譯過的程序燒寫到開發(fā)板中的Flash芯片中。
3.1宿主機
宿主機安裝Redhat9.0操作系統(tǒng)、MiniGUI開發(fā)環(huán)境和開發(fā)工具集。工具集包括交叉編譯器gcc、調(diào)試器gdb、C函數(shù)庫glibc和二進制工具集binutils。
3.2 目標板
1)引導程序(Boot Loader)
是系統(tǒng)復位后執(zhí)行的一段代碼,首先完成系統(tǒng)硬件的初始化,包括時鐘設置、存儲區(qū)影射等,然后跳轉(zhuǎn)到操作系統(tǒng)內(nèi)核的入口,將系統(tǒng)控制權(quán)交給操作系統(tǒng)。 Boot Loader獨立于操作系統(tǒng)而高度依賴系統(tǒng)硬件,必須自行設計。本文采用vivi作為系統(tǒng)的引導程序。其啟動分為兩個階段:第一階段代碼采用匯編語言編寫,主要進行與CPU以及存儲設備密切相關的工作,并進行初始化;第二階段采用C語言編寫,來實現(xiàn)一般的流程及對板級的一些驅(qū)動支持。
2)Linux內(nèi)核
一般的嵌入式操作系統(tǒng)如uClinux、uC/OS-II通常運行在沒有MMU的CPU上,因此在進程編程時具有較大的困難度,所以選擇具有完整 Unix特性的Linux作為操作系統(tǒng)。開發(fā)板采用打過補丁的Linux-2.4.18-rmk7的內(nèi)核,內(nèi)核和補丁可以從ARM的官方網(wǎng)站上下載。在配置內(nèi)核時去掉無關的功能以減少內(nèi)核大小,如SCSI、IrDA、手柄等。
3)根文件系統(tǒng)
嵌入式根文件系統(tǒng)(root filesystem)是嵌入式Linux系統(tǒng)的核心部分 ,包含系統(tǒng)使用的軟件和庫,以及所有用來為用戶提供支持架構(gòu)和用戶使用的應用軟件,并作為存儲區(qū)讀寫結(jié)果的區(qū)域。
評論