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