μC/GUI在基于NiosⅡ嵌入式開(kāi)發(fā)平臺的環(huán)境智能監控系統中的移植與應用
0 引言
人機交互是智能化嵌入式產(chǎn)品一項重要功能,在設計智能監控系統時(shí)人機交互需要界面設計軟件,常用的圖形界面軟件有MiniGUI,QT/Embedded,OpenGUI等。Altera公司NiosⅡ已經(jīng)集成了μC/OS-Ⅱ系統。μC/OS-Ⅱ是一個(gè)實(shí)時(shí)多任務(wù)內核,不具有現代操作系統的線(xiàn)程,上述GUI不能方便的運行。
μC/GUI是一個(gè)優(yōu)秀的嵌入式圖形用戶(hù)界面,具有眾多的優(yōu)點(diǎn)。如,代碼開(kāi)源,占用系統資源少,所有的代碼均由ANSIC實(shí)現,功能強大且易于移植,可以應用于任何的LCD控制和CPU任何尺寸的物理與虛擬顯示,非常適合用于資源有限的嵌入式系統中。同時(shí),μC/GUI與μC /OS-Ⅱ都是美國Micrium公司產(chǎn)品,μC/GUI能輕易地在μC/OS-Ⅱ上應用,實(shí)現與μC/OS-Ⅱ的無(wú)縫結合。
本文在設計具有人機交互功能的基于NiosⅡ的嵌入式智能監控系統時(shí),為實(shí)現友好的人機交互和更加方便的顯示,將μC/GUI移植到NiosⅡ嵌入式平臺,系統采用通用液晶顯示器顯示,具有更加廣泛的通用性。
1 硬件系統設計
本系統設計采用的硬件平臺是Altera公司生產(chǎn)的DE2開(kāi)發(fā)板,使用軟件是QuartusⅡ9.0,FPGA芯片是EP2C35F672C6,通過(guò)VGA接口連接液晶顯示器顯示,利用QuartusⅡ軟件的SOPC Builder搭建的系統設計如圖1所示。其中,PS/2 IP核是采用AItera公司大學(xué)計劃中的IP核,SDR AM為系統運行時(shí)的內存。在系統中運行交互界面時(shí),通過(guò)PIO傳輸系統設置的參數,控制硬件實(shí)現的視頻的采集、顯示與相關(guān)視頻分析算法的實(shí)現。
VGA IP核采用突發(fā)傳輸模式,這樣可以提高從端口的數據吞吐量,在主端口一次多個(gè)數據單元的時(shí)候,可以達到極高的效率。在本設計的VGA IP核設計一次傳輸10個(gè)數據單元,額外的burstcount信號為4位。
2 μC/GUI移植
本系統采用μC/GUI 3.98版本進(jìn)行移植,在移植μC/GUI之前,有必要熟悉μC/GUI的軟件體系結構與文件結構,μC/GUI的軟件體系結構如圖2所示。
μC/GUI函數庫為用戶(hù)程序提供GUI接口,包含的函數有文本、數值、二維圖形、輸入設備以及各種窗口對象。其中,輸入設備可以是鼠標、鍵盤(pán)或觸摸屏;二維圖形包括圖片、直線(xiàn)、多邊形、圓、橢圓、圓弧等;窗口對象包括按鈕、編輯框、進(jìn)度條、復選框等。μC/GUI由庫函數目錄GUI和配置文件目錄Config兩個(gè)目錄組成,表1是μC/GUI目錄結構,帶星號的都是可選項。
其中Config目錄下包括3個(gè)文件分別是LCDConf.h、GUIConf.h和GUITouchConf.h,3個(gè)文件分別用來(lái)配置LCD驅動(dòng)、μC/GUI配置、觸摸屏的配置。μC/GUI移植主要就是對Config文件以及LCDDriver的移植,針對不同的平臺做相應的修改。
2.1 配置文件的移植
GUIConf.h是μC/GUI的基本屬性配置文件,有很多開(kāi)關(guān)可以配置,配置的內容包括是否采用內存設備,是否采用窗口管理器,是否支持操作系統、觸摸屏,以及配置動(dòng)態(tài)內存的大小等。具體可以參考μC/GUI的用戶(hù)手冊,這里只需配置幾個(gè)必要的參數如下:
2.2 LCD驅動(dòng)文件的移植
由于采用VGA顯示,根據LCDConf.h對LCD_CONTROLLER的配置,在LCD驅動(dòng)文件目錄下選擇LCDDummy.c,刪除其他無(wú)關(guān)的驅動(dòng)文件,LCD驅動(dòng)文件負責把μC/GUI的各種函數解釋成LCDconf.h文件中定義的液晶接口函數,這個(gè)文件與具體的硬件連接無(wú)關(guān),LCD驅動(dòng)在SDRAM開(kāi)辟幀緩沖以及往VGAIP中寫(xiě)入數據,在函數LCD_Controller_Init()完成,開(kāi)辟顯示緩沖區由framebuffer=(aIt_u32*)alt_uncached_malloc(LCD _XSIZE*LCD_YSIZE*LCD_BITSPERPIXEL/2)實(shí)現。同時(shí)編寫(xiě)void LCD_L0_SetPixelIndex(int x,int y,int PixelIndex)和unsigned int LCD_L0_GetPixelIndex(int x,int y)這2個(gè)函數,分別是設置一個(gè)像素和獲取一個(gè)像素的顏色,后面很多操作如畫(huà)點(diǎn)、線(xiàn)、圓等都需要調用這2個(gè)函數。
2.3 接口函數移植
由于支持μC/OS-Ⅱ操作系統,所以要對GUI_X_μCOS.c文件進(jìn)行修改,GUI_X_μCOs.c定義了GUI與RTOS的接口函數,使之能與μC/OS-Ⅱ操作系統實(shí)現無(wú)縫銜接,要增加系統延時(shí)函數OSTimeDly(1),void GUI_X_Execldle(void){OS_X_Dday(1);}改為:
到此,μC/GUI移植需要修改的代碼部分已經(jīng)全部完成。
3 μC/GUI應用程序開(kāi)發(fā)實(shí)例
根據平臺修改完配置、驅動(dòng)文件和接口函數之后,在NiosⅡ9.0 IDE建立一個(gè)新的工程,選擇工程操作系統為μC/OS-Ⅱ,將已經(jīng)修改好的Config和GUI文件夾以及GUI_X_μCOS.c拷貝到建立的工程目錄下,可以根據實(shí)際需求,刪掉一些不需要的功能文件,減少編譯時(shí)間以及編程生成的執行文件的大小。根據需求編寫(xiě)相應的應用程序,要使PS/2IP核正確使用,在應用程序中要用要alt_up_ps2_open_dev(“/ dev/ps2”),開(kāi)啟PS/2 IP核,同時(shí)要正確顯示圖形界面在顯示界面代碼之前要調用GUI_Init()函數,它的功能是初始化GUI,同時(shí)初始化LCD控制器與顯示緩沖區。Nios II IDE編譯器成功編譯工程還要為移植的文件添加相應的路徑,在include路徑要包括Config、GUI/Core,GUI/Widget和GUI/WM,編譯完成之后的工程目錄如圖3所示。成功編譯之后將程序下載到DE2開(kāi)發(fā)平臺,程序運行嵌入式智能監控系統交互界面,運行畫(huà)面如圖4所示。
交互界面顯示了系統標志,按鍵、窗口以及鍵盤(pán),每個(gè)按鍵代表一個(gè)功能,按鍵按下,彈出參數輸入窗口,可以在鍵盤(pán)輸入相關(guān)的參數通過(guò)PIO傳輸到硬件模塊。
4 結語(yǔ)
本文詳細介紹了μC/GUI在NiosⅡ嵌入式系統中的移植過(guò)程,包括從硬件平臺的搭建到μC/GUI配置文件、驅動(dòng)文件和接口函數的修改,采用自己編寫(xiě)的VGA顯示IP核,使系統可使用任何通用的液晶顯示器,與其他很多專(zhuān)用的LCD驅動(dòng)而言,本系統具有很強的通用性。結果表明,μC/GUI功能強大,易于移植,占用系統資源少,移植過(guò)程有很多可選功能,可以針對不同的需求,非常適用于資源有限的嵌入式系統中。
同時(shí)μC/GUI還提供了仿真器以及位圖轉換工具,有助于我們應用程序的開(kāi)發(fā),在開(kāi)發(fā)的過(guò)程中應用程序可以在仿真器中完成而不必每次都在硬件平臺運行驗證。μC/GUI對鼠標、鍵盤(pán)以及觸摸屏等的支持,將使基于NiosⅡ的智能監控系統可以完全集成為監視器中的一個(gè)功能模塊,具有很好應用前景與研究意義。
評論