一種嵌入式GUI的研究與應用
引 言
本文引用地址:http://dyxdggzs.com/article/149966.htm隨著(zhù)半導體技術(shù)和信息技術(shù)的飛速發(fā)展,各式各樣的嵌入式系統產(chǎn)品已經(jīng)滲入到人們生活的每一個(gè)角落。小到手機、MP3、MP4、數碼相機、機頂盒等產(chǎn)品,大到汽車(chē)、數控機床、火箭等產(chǎn)品。嵌入式GUI(Graphical User Interface)作為嵌入式系統的應用軟件,已經(jīng)成為當今圖形用戶(hù)界面領(lǐng)域的發(fā)展焦點(diǎn)。[2]
1 GUI 的概述
GUI以一種以圖形化為基礎的用戶(hù)界面,使用統一的圖形操作系統,如可移動(dòng)的視窗、選項與鼠標,作為用戶(hù)與操作系統之間的中介。GUI最重要的優(yōu)勢在于使用戶(hù)擺脫了在命令行提示符下與操作系統進(jìn)行交互的方式,用戶(hù)可以?xún)H僅通過(guò)鼠標點(diǎn)擊來(lái)實(shí)現熟悉程序的操作,而且由于圖表、對話(huà)框等的引入,使得操作直觀(guān)形象。GUI已成為一種用戶(hù)與計算機交互的標準。包括Microsoft的視窗系統、Unix的Motif、Linux的桌面系統GNOME。
在計算機硬件平臺下的GUI模型一般如圖1所示:
uC/GUI是由Micrium公司專(zhuān)門(mén)針對嵌入式系統開(kāi)發(fā)的一款圖形開(kāi)發(fā)系統。它設計用于為任何使用LCD圖形顯示的應用提供高效的獨立于處理器及 LCD 控制器的圖形用戶(hù)接口,它適用單任務(wù)或是多任務(wù)系統環(huán)境, 并適用于任意 LCD 控制器和 CPU 下任何尺寸的真實(shí)顯示或虛擬顯示。
對于開(kāi)發(fā)uC/GUI圖形應用不需要什么目標系統, 大部分的圖形應用開(kāi)發(fā)都可以在模擬器下進(jìn)行; 但是最終的目的是通常還是在目標系統上運行程序。
目標系統(硬件):
[1].CPU(8/16/32/64位)。
[2].必要的RAM和ROM 存儲。
[3].LCD 顯示器(任何類(lèi)型及分辨率的)。
對于內存的需求取決于你選用的 UCGUI 的功能模塊以及你所使用的目標系統上的編譯器的效率。 內存的占用量無(wú)法估計準確的值, 下面就一些的數值適用于多數的目標系統。
注:①小型系統指不包含窗口管理功能,大型系統指包含窗口管理及各種窗體控件功能。
②ROM的需求量隨著(zhù)應用程序中使用的字體數目而增長(cháng)。
2 基于S3C44B0X處理器的嵌入式系統的基本組成
三星公司推出的16/32位RISC處理器S3C44B0X為手持設備和一般應用提供了高性?xún)r(jià)比和高性能的微控制器解決方案。為了降低成本,同時(shí)增強穩定性,S3C44B0X提供了豐富的內置部件,包括:8KB Cache和 內部SRAM,LCD控制器等,其主頻可以達到66MHz,速度幾乎相當于486CPU,而且擴展了完整豐富的外圍設備的接口,圖2是典型的系統的框圖。
圖2 系統框圖
采用三星的S3C44B0X開(kāi)發(fā)通用的嵌入式系統,S3C44B0X的運行方式通常有兩種:一種是有操作系統的,由于操作系統所占用的空間比較大,所以Flash里面裝的是系統引導程序,通常稱(chēng)為Boot Loader,是在系統復位后執行的第一段代碼,相當于PC上的BIOS,完成系統硬件的初始化,包括時(shí)鐘的設置、存儲區的映射等,設置堆棧指針,然后跳轉到操作系統內核的入口,將系統控制權交給操作系統,在此之后系統的運行和Boot Loader 再無(wú)任何關(guān)系。Boot Loader獨立于操作系統,必須由用戶(hù)自己設計,它的實(shí)現高度依賴(lài)于硬件,包括處理器的體系結構、具體型號、硬件電路板的設計。
另一種是無(wú)操作系統的,系統的初始化以及主程序都是在Flash內,它與S3C44B0X的Bank0相連,上電復位后系統使程序從0x00000000開(kāi)始運行。
3 利用uC/GUI開(kāi)發(fā)GUI應用程序的基本方法
由于uC/GUI提供了源代碼,因此可以很容易地將它移植到各個(gè)平臺下,使用時(shí),只要將uC/GUI的軟件壓縮包解壓縮到一個(gè)目錄下就可以了。
3.1 uC/GUI的結構
uC/GUI的軟件體系結構如圖3所示。uC/GUI函數庫為用戶(hù)的應用程序提供GUI接口,包含的函數有文本、數值、二維圖形、輸入設備以及各種窗口對象。其中,輸入設備可以是鍵盤(pán)、鼠標或觸摸屏;二維圖形包括圖片、直線(xiàn)、多邊形、圓、橢圓、圓弧等;窗口對象包括按鈕、編輯框、進(jìn)度條、復選框等。μC/GUI函數庫可以通過(guò)GUI_CONf.h文件進(jìn)行配置,配置的內容包括是否采用內存設備,是否采用窗口管理器,是否支持操作系統、觸摸屏、以及配置動(dòng)態(tài)內存的大小等。
圖3 uC/GUI的軟件體系結構
3.2 利用uC/GUI開(kāi)發(fā)應用程序的步驟
由于uC/GUI提供了源代碼,在開(kāi)發(fā)應用程序時(shí),用戶(hù)可以首先將核心文件、LCD驅動(dòng)文件和需要的字體文件包含在自己的工程里,然后再根據實(shí)際的硬件需要,包含內存設備輸入設備控件和窗口管理部分。
具體可以分為以下幾步:
⑴按照實(shí)際需要,定制自己的uC/GUI開(kāi)發(fā)環(huán)境。其中包括對上述目錄的篩選,或對目錄中文件的篩選。
⑵指定硬件設備的地址,編寫(xiě)接口驅動(dòng)代碼。這里需要修改LCD_Conf.h文件。
⑶編譯、鏈接、調試示例程序。
⑷修改示例程序并測試,增加需要的功能。
⑸如果準備開(kāi)發(fā)多任務(wù)應用,則需要修改GUI_MAXTASK和GUI_OS宏,實(shí)現uC/GUI與操作系統的結合。
⑹編寫(xiě)自己的應用程序。
使用uC/GUI開(kāi)發(fā)應用程序時(shí),目標系統不是必須配備的,因為uC/GUI提供了一個(gè)模擬器,用戶(hù)可以在模擬器上面看到應用程序的執行的結果。所以,對于開(kāi)發(fā)環(huán)境,uC/GUI僅要求有一個(gè)符合ANSI標準的“C”語(yǔ)言編譯器。至于C++編譯器,它不是必須的,但是如果用戶(hù)使用C++語(yǔ)言來(lái)編寫(xiě)應用程序,那就需要一個(gè)C++編譯器。[1]
因此,在Windows系統下只要安裝了Microsoft Visual C++就可以運行uC/GUI的模擬器工程(工程名一般為Simulation.dsw),然后將該工程中的Application文件夾清空,加入自己編寫(xiě)的源文件,編譯鏈接就可以看到運行結果。
3.3應用實(shí)例
下圖是用uC/GUI開(kāi)發(fā)應用程序的一個(gè)實(shí)例,該程序是顯示汽車(chē)運行時(shí)發(fā)動(dòng)機轉速的一個(gè)界面。
圖4 用戶(hù)界面圖
黑色的背景是這個(gè)LCD的窗口區域,大小為640*480。先利用畫(huà)線(xiàn)函數繪制基本的弧線(xiàn),再利用填充函數填充相應的背景顏色,最后用一個(gè)分片存儲設備執行一個(gè)指定的繪圖函數,在這種情況下,在一段時(shí)間內只有一小部分要更新。
STatic void DemoScale(void)
{
int Cnt;
int tDiff, t0 = GUI_GetTime();
PARAM Param; /* 繪圖函數的參數 */
GUI_AUTODEV AutoDev; /* 分片存儲設備對象 */
GUI_SetColor(GUI_WHITE); /*設置顏色*/
GUI_SetFont(GUI_Font8x16);/*設置字體*/
GUI_DispStringHCenterAt(“Scale using GUI_AUTODEV-object”, 160, 0);
GUI_AA_EnableHiRes();/* 啟動(dòng)高分辨率用于抗鋸齒 */
GUI_AA_SetFactor(MAG);
GUI_MEMDEV_CreateAuto(AutoDev); /* 建立 GUI_AUTODEV 對象 */
/* 顯示在一個(gè)固定時(shí)間上的指針 */
for (Cnt = 0; (tDiff = GUI_GetTime() - t0) 24000; Cnt++);
{
/* 獲得數值用于顯示一個(gè)多邊形來(lái)表示指針 */
Param.Angle = GetAngle(tDiff)* DEG2RAD;
GUI_RotatePolygon ( Param.aPoints,
aNeedle,
countof(aNeedle),
Param.Angle);
GUI_MEMDEV_DrawAuto(AutoDev, Param.AutoDevInfo, Draw, Param);
}
4 結束語(yǔ)
本文只是簡(jiǎn)單展示了uC/GUI在開(kāi)發(fā)圖形用戶(hù)界面上的應用,其巨大的應用潛力還有待進(jìn)一步的研究。相信隨著(zhù)計算機滲透到人類(lèi)工作和生活的各個(gè)方面,以嵌入式系統為核心的后PC時(shí)代的到來(lái),uC/GUI的應用前景也將更為廣闊。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)c++相關(guān)文章:c++教程
評論