摘要:介紹一種優秀的嵌入式圖形支持軟件——MinGUI,初步構建了基于SEP4020 微處理器的嵌入式GUI(圖形用戶界面)開發平臺,并分步介紹了將MinGUI 移植到此嵌入式系統平臺的方法。最后在構建好的平臺上開發并運行一個GUI實例,驗證了此平臺的成功開發及其應用的優越性。
關鍵詞:Min GUI;嵌入式系統;SEP4020
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2008)31-0902-03
Transplant of Embedded MinGUI and Development of Platform
LONG Gao-hua, LING Ming
National ASIC System Engineering Center, Southeast University, Nanjing 210096, China)
Abstract: This paper presents a good embedded graphics supporting software: MinGUI, and primitively constructs a platform of embedded GUI based on SEP4020, and then introduces the solution of transplanting it to this embedded system platform step by step. Finally in this platform develop and run an example of GUI, consequently prove the success of development of platform and the best of its application.
Key words: MinGUI; embedded system; SEP4020
1 引言
嵌入式系統具有體積小、性能好、功耗低、可靠性高以及面向行業應用的突出特征, 現已廣泛應用于國防、電子消費、信息家電、網絡通信、工業控制等領域[1]。隨著嵌入式產品的廣泛應用, 開發人員越來越關注的一個系統組件就是圖形支持系統。因為嵌入式設備必須為用戶提供非常友好的用戶界面、圖像界面和靈活的控制方式, 這樣人們才能方便地使用嵌入式軟硬件系統。
然而由于嵌入式系統本身的特點, 不可能把PC機上的GUI 搬到嵌入式系統中來。嵌入式系統的GUI 即要有良好的人機交互界面, 又不能消耗太多的系統資源。而且由于嵌入式系統本身是一種定制設備, 所以, 不同的系統要有不同的GUI。用在嵌入式系統上的GUI 要求具有應用簡便、占用資源少、高性能、高可靠性和可配置等特點[2]。
2 嵌入式MinGUI介紹
MinGUI的開發始于2006年,東南大學ASIC工程中心著手開發一款基于ARM7核的繼電保護系統。作為電力系統的一種智能化保護裝置,該設備要求有非常高的實時性。但是由于硬件資源的限制,并且繼電保護算法本身極度銷耗系統資源,使得對GUI的性能要求非常苛刻:要求有極低的CPU占有率、極高的響應及顯示速度、高穩定性與可靠性。用當時現有的各類GUI(Grafix、ucgui等)作測試,發現GUI根本無法響應,因為CPU至少75%的時間被繼電保護算法占了,GUI根本來不及調度與刷新。于是決定根據系統需求專門寫一個精簡的、快速的、節省資源、高效率的GUI內核,這是MinGUI的由來。最初版本的MinGUI只支持黑白色顯示、一組基本的繪圖函數、幾個專門為繼電保護項目設計的控件、簡單的窗體系統及消息機制、沒有剪切域、并盡可能的把GUI的容錯機制放到應用程序中,總之一切為了精簡,一切為了節省系統開銷,當然在穩定性與可靠性上也下了工夫。最終的結果是成功的,在繼電保護系統中MinGUI的表現不負所望。在接下來的商務話機項目中,MinGUI被要求繼續提綱重任,于是MinGUI被進一步完善。就這樣, MinGUI不斷得到實際項目和產品的應用,同時新的項目也提出了更多技術需求。整個MinGUI全部加載需要628Kbyte的指令與數據空間,最小可以裁減到60K左右。其中除了MinGUI內核57K外,其它部件全部可以裁減。如圖1。
GUI在運行時,除上述的指令與數據空間外,還需要在堆上動態分配內存空間。MinGUI最低內存要求是3KBYTE(不開窗口,直接GDI繪圖),當有多個窗口運行時,需要更多的內存空間來保存窗口數據,具體根據窗口大小與數量來確定。一般應用程序只需要500k的內存空間就夠了,當然如果窗口開的多的話,需要配置足夠的空間。
3 開發平臺的構建
3.1 硬件平臺
硬件平臺所用的處理器為“東極”自主開發的SEP4020。SEP4020的內部集成了LCD控制器,LCDC是將系統需要顯示的數據經過處理后輸出到LCD顯示驅動器的液晶顯示控制模塊,支持黑白、灰度、彩色液晶屏。在用戶初始化配置后,LCDC將在自動進行讀取數據、緩存數據、處理數據以及輸出符合時序要求的控制和數據信號等操作。SEP4020中的LCD控制器被用來傳遞視頻數。
LCDC兼容AMBA規范,有AHB MASTER接口和AHB SLAVE接口,分別用于讀取需要顯示的數據和軟件配置。它具有高度可編程性,用戶通過向寄存器寫入數據來實現編程控制。
經過軟件配置后,LCDC能自己獨立工作,而不需要內核的再次參與,從而節省內核的處理時間。工作過程是LCDC使能后申請系統總線,獲得總線使用權后讀取需要顯示的數據,數據經過相應算法的處理就得到滿足時序要求的信號,送到LCD顯示驅動器。LCDC支持STN屏和TFT屏。
3.2 軟件平臺
軟件平臺使用ARM ADS1.2集成開發環境, 開發環境包括Code Warrior和AXD兩個工具。其中Code Warrior可以方便實現代碼的編譯、鏈接及修改, 它縮短了開發人員開發目標碼的周期。AXD具有一般意義上調試器的所有功能, 包括簡單和復雜斷點設置、棧顯示、寄存器和存儲區顯示及命令接口等。
MinGUI源碼包為用戶提供了一個基于VC++平臺的仿真開發環境, 它可以在Windows環境下仿真LCD硬件環境, 進行應用程序編譯等工作[6]。仿真的整個圖形庫API和視窗管理API與目標系統是一樣的, 所有函數動行與在目標硬件上高度一致, 因為仿真時使用了與目標系統同樣的“C”源代碼。唯一不同是在軟件的底層, LCD驅動。PC仿真使用一個仿真的驅動寫入一個位圖, 以代替實際的LCD驅動。開發人員在進行軟件開發時無需目標系統, 只要在仿真環境下編寫應用程序, 仿真通過后再移植到目標系統上運行, 這樣能大大提高開發速度。
4 移植MinGUI 到基于SEP4020 的開發平臺
MinGUI 具有通用性的特點, 開發人員在拿到源代碼后首先要做的是把它移植到自己的硬件平臺上。針對本平臺μC/GUI的移植步驟主要有四步, 此移植方法具有一定的通用性, 對于不同的硬件平臺,只需要修改相應的內容即可。第一步選擇所需要的組件, 在源碼的GUI 文件夾中, 有多個可供選擇的組件, 它們實現μC/GUI不同的功能, 如存儲器件的支持、抗鋸齒支持、觸摸屏支持等, 一般小的系統只需要最基本的如驅動、核、簡單字體支持和配置文件等。這里本著建立完整功能的開發平臺的目的, 將所有的組件都選擇進GUI 文件夾。
第二步對μC/GUI進行配置, 在GUIConf.h中, 選擇對所有組件的支持, 配置好動態存儲空間的大小和默認字體等。
如: #define GUI_WINSUPPORT (1) /* 窗口
管理支持*/
#define GUI_ALLOC_SIZE 12500 /* 動態存
儲空間的大小*/
#define GUI_DEFAULT_FONT GUI_Font6x8 /* 默認字
體為Font6x8*/
LCDConf.h 是S3C44B0X 控制器的頭文件, 在此文件中首先定義LCD 顯示為16 級灰度, 每像素4 位, 再對控制器進行如實際屏長寬、虛擬屏長寬、顯示緩沖區大小和其它控制信號VM、VLINE、VCLK、VFRME 的配置。
如:#define LCDG16 /* 定義LCD 顏色數*/
#define LCD_XSIZE (240) /* 屏幕X軸寬度*/
#define LCD_YSIZE (320) /* 屏幕Y軸長度*/
#define LINEVAL (LCD_YSIZE-1) /*確定LCD 屏的垂直尺度*/
#define ARRAY_SIZE_G16 (SCR_XSIZE/2*SCR_YSIZE)
/*16 級灰度顯示緩沖區大小*/
第三步在LCDDriver 文件夾中, 把源碼的Windows仿真驅動改成SEP4020的LCD控制器驅動程序。其中void SetPixel()是基本的畫像素點函數, 另外在LCD 控制器的初始化函數
LCD_Init_Controler() 中對LCD 控制寄存器、地址寄存器、抖動模式寄存器進行設置。
如:# ifdef LCDG16
U32(*frameBuffer16) [SCR_XSIZE/8]; /*定義16級灰度顯示緩沖地址指針*/
# ifdef LCDG16
if(x frameBuffer16 [(y)][(x)/8]=(frameBuffer16[(y)][x/8]~ (0xf0000000>>((x)% 8)*4))|((c)<<((8-1-((x)%8))*4));/* 把像素發送到顯示緩沖區*/ rLCDCON1=(0)|(1<<1)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_G16<<12); /*LCD控制寄存器1*/ rLCDSADDR1=(0x2<<27)|(((U32)frameBuffer16>>22)<<21)|M5D((U32)frameBuffer16>>1); /* 幀緩沖起始地址寄存器1*/ 第四步把修改好的MinGUI移到ADS工程中去, 工程中有編寫好的Bootload和Main函數。在工程中添加一個Application文件夾, 用來添加在MinGUI 仿真器中編寫的應用程序。值得注意的是在Main函數中一定要有GUI_Init()函數, 以完成對MinGUI初始化。 至此基本上完成了基于SEP4020硬件平臺的MinGUI移植, 工程人員即可基于本平臺開發用戶所需的GUI。 5 基于MinGUI的開發可以在Windows操作系統下進行 由于MinGUI完全用C來編寫,具有非常好的移植性。MinGUI應用程序在Windows下開發時,可以使用 Visual Studio或者C++Builder等集成開發環境進行GUI應用程序的開發及調試,并通過MinGUI模擬器實現顯示與輸入輸出交互。 MinGUI模擬器實際上是一個模擬了LcdFrameBuffer、Mouse/touchpad、Keyboard、Timer等設備的Windows應用程序,也就是MinGUI與Windows操作系統、圖形顯示設備、鍵盤/鼠標等輸入設備的抽象層接口。在程序開發時,完全可以把MinGUI 模擬器當作嵌入式開發環境下的終端設備。MinGUI模擬器的運行界面如圖2所示。 直接在模擬器或控制臺下運行調試MinGUI應用程序,大大方便了嵌入式程序的開發,避免了用戶重復刷寫嵌入式設備的工作。同時也使得用戶可以在開發主機上使用標準的調試器對應用程序進行調試。 6 結束語 本文只介紹了基于SEP4020微處理器的平臺開發與移植,基于其它嵌入式CPU平臺的圖形用戶系統的開發與此類似,有待開發人員去構建。可以肯定,隨著嵌入式系統的發展, MinGUI 在嵌入式系統中必將有著更為廣泛的應用。 參考文獻: [1] 田澤. 嵌入式系統開發與應用實驗教程[M].北京: 航天航空大學出版社, 2004. [2] 赫思 D,貝克 M P,蔡士杰,譯.計算機圖形學[M].北京: 電子工業出版社,1998. [3] Jefrey Richter;Programming Application for Microsoft Windows[M].Fourth Edition,Microsoft Press,1999. [4] Charles Petzold.Programming Window[M].Fifth Edition,Microsoft Press,1998.