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