《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于Nios II自助點菜系統(tǒng)的μC/GUI應用
基于Nios II自助點菜系統(tǒng)的μC/GUI應用
來源:電子技術應用2011年第9期
何 偉,,游 婧,張 玲
(重慶大學 通信工程學院,重慶400030)
摘要: 結合自助點菜系統(tǒng),介紹了移植μC/GUI圖形庫到軟核Nios II平臺的方法,研究了μC/GUI與輸入外設的接口原理,,實現(xiàn)觸摸屏操作。采用消息響應機制,實現(xiàn)窗口,、控件和對話框的觸摸應用,,并深入分析了μC/GUI基于嵌入式操作系統(tǒng)μC/OS II的工作方式,將設計劃分為多個任務操作運行,,在觸摸屏上完成JPEG圖片顯示,、文字介紹、菜單瀏覽等功能,。
中圖分類號: TP311.5
文獻標識碼: A
文章編號: 0258-7998(2011)09-0035-04
Application of μC/GUI in self-service order system based on Nios II
He Wei,,You Jing,Zhang Ling
College of Communication Engineering,,Chongqing University, Chongqing 400030,,China
Abstract: With self-service order system, this thesis introduces how to port μC/GUI to Nios II system, and realizes the operation of touch screen based on the research about the interface between GUI and input devices. In general, all the touch screen operation about WM, control and dialog has been realized with the message callback method, and after analyzing the principle that how μC/GUI works in μC/OS II, system divides into the multitasking mode. At last, this system finishes a few functions such as displaying pictures of JPEG format, word description of every dishes, browsing menu and so on.
Key words : porting;μC/GUI,;touch screen,;control;μC/OS II


 隨著嵌入式系統(tǒng)在各領域的廣泛應用,,對圖形化人機交互界面的需求逐漸增加,。由于嵌入式系統(tǒng)硬件資源有限,從而要求圖形用戶界面具有輕型,、占用資源少,、高性能等特點。μC/GUI是一種用于嵌入式應用的Windows風格圖形支持軟件,,它為任何使用圖形LCD的應用提供一個有效的不依賴于處理器和LCD控制器的圖形用戶接口,,工作在單任務或多任務系統(tǒng)環(huán)境下,適用于使用任何LCD控制和任何CPU尺寸的物理或虛擬顯示,。因此,,掌握μC/GUI在嵌入式系統(tǒng)中的應用極為重要。移植μC/GUI到Nios II嵌入式軟核處理器[1]成了最佳選擇,。本文根據(jù)自助點菜系統(tǒng)的實際應用,,詳細介紹了μC/GUI移植方法,并在融合觸摸屏操作的基礎上實現(xiàn)控件使用和操作系統(tǒng)開發(fā),。
1 硬件
    系統(tǒng)中顧客使用終端觸摸屏瀏覽服務信息并實現(xiàn)相關操作,,通過無線局域網絡和前臺通信。各個點菜終端作為獨立系統(tǒng)工作,,所有數(shù)據(jù)傳到前臺上位機協(xié)調處理,。本文僅介紹與μC/GUI相關的點菜終端構成部分。終端硬件框圖如圖1所示,,利用片上可編程系統(tǒng)(SoPC)技術將Nios II處理器,、外設接口控制器等功能模塊集成到FPGA,構成可編程片上系統(tǒng)[2],。SDRAM,、Flash控制器用于處理程序和數(shù)據(jù)的存儲,;512 KB SRAM作為圖像數(shù)據(jù)緩存區(qū);FPGA內部自定義LTM控制器和SD卡控制器模塊,,輔助軟核工作,操作觸摸屏并讀取SD卡內的JPEG圖片,;UART接口用于和移植到CC2430的ZigBee模塊通信,;采用定時器以嵌入?滋C/OS II操作系統(tǒng)。

    觸摸顯示屏是4.3英寸數(shù)字LCD觸碰面板TRDB-LTM,,長寬比為15:9,,支持24 bit并行RGB接口,能通過內置模數(shù)轉換器(AD7843)將觸碰點X/Y坐標轉換成對應數(shù)字信息,。觸摸屏物理分辨率為800×480,,支持16 bit RGB565格式。
2 μC/GUI移植
    本系統(tǒng)的用戶界面采用?滋C/GUI,,其最新版本是3.98,,其中一些組件不太完整。根據(jù)點菜系統(tǒng)使用需求,,特添加3.94版本的JPEG模塊來顯示圖片數(shù)據(jù),。ucgui398\Start\Config和ucgui398\Start\GUI是源碼包最重要的兩個文件夾,其中包括各種配置文件,、μC/GUI內核文件,、與字體相關的代碼文件、LCD驅動代碼文件,、μC/GUI支持的控件代碼以及視窗管理部分代碼等[3],。

 


2.1 修改LCD配置文件
    為使系統(tǒng)正確工作,必須修改文件LCDConf.h(GUI目錄中)中的一些配置宏,。該文件與硬件直接相關,,根據(jù)所使用的LCD類型和LCD控制器進行配置。由于μC/GUI提供不同型號的LCD配置文件(文件夾Sample\LCDConf\xxx中,,xxx代表LCD驅動器名稱),,應用程序開發(fā)者可直接在此基礎上修改程序。實際應用中,,選擇LCDLin.c驅動文件,。由于LTM控制器對顯示分辨率進行硬擴處理,因此LCD尺寸選擇400×240,。系統(tǒng)底層配置的部分宏如表1所示,。


    LCD_READ_MEM(off)、LCD_WRITE_MEM(off,,data)宏定義是μC/GUI與LTM控制器接口的關鍵[4],。SRAM_BASE是512 KB SRAM讀寫操作的基地址,,這些宏定義能實現(xiàn)對圖像數(shù)據(jù)緩存區(qū)的16 bit讀寫操作。此外,,一般移植操作必須定義LCD_INIT_CONTROLLER(),,以實現(xiàn)LCD屏初始化配置。LTM控制器初始化了觸摸屏,,因此軟件配置中省略此項,。
2.2 修改GUI和觸摸屏配置文件
    在調整系統(tǒng)或減小內存消耗時需配置LCDConf.h。具體步驟如下:(1)備份原始配置文件,;(2)檢查所有配置開關,;(3)刪除配置中不使用部分。除此之外,,系統(tǒng)工程編譯時,,會出現(xiàn)一些未定義錯誤,需要將Sample\GUI_X\GUI_X.c添加到工程中,,該文件定義GUI與操作系統(tǒng)的接口,,以及Debug錯誤報告等函數(shù)。由于系統(tǒng)使用μ/OS II,,可選擇GUI_X_uCOS.c文件,,并在文件結尾處添加以下函數(shù):
    void GUI_X_Log(const char *s){GUI_USE_PARA(s);}
    void GUI_X_Warn(const char *s){GUI_USE_PARA(s);}
    void GUI_X_ErrorOut(const char *s){GUI_USE_PARA(s);}
同時將GUI_X_ExecIdle( )中的OS_X_Delay(1)替換為OSTimeDly(1)。
    GUI文件夾中另一個需要配置的文件是GUITouchConf.h,,根據(jù)觸摸屏類型不同,,宏參數(shù)也不同。執(zhí)行觸摸屏操作的主要流程在GUI\Core\GUI_TOUCH_DriverAnalog.c文件中,。頭文件部分宏配置如表2所示,。

2.3 觸摸屏與GUI接口
    μC/GUI支持鍵盤、鼠標,、觸摸屏等外設,,并在源碼級對其消息響應。為使觸摸屏正常工作,,系統(tǒng)除對相應配置文件修改和添加一些相關函數(shù)外,,必須實現(xiàn)觸摸屏底層驅動,即修改LCDLin.c驅動文件,。
    理論上,,GUI_TOUCH_AD_LEFT和GUI_TOUCH_AD_RIGHT取值應當為0或1 024,但實際操作時,,必須根據(jù)具體情況校準,。系統(tǒng)取觸摸屏四個角坐標作為校正標準,經過多次試驗,,四個坐標分別是(29,,160),、(3 936,160),、(29,,3 900)和(3 936,3 900),。在GUI\Core\GUI_TOUCH_DriverAnalog.c中修改相應宏,,再據(jù)實際情形確定余下開關宏的值。
    通過調用GUI_TOUCH_Exec()函數(shù)來獲得觸摸屏觸點位置:系統(tǒng)通過中斷服務程序讀回觸點實際坐標值(x,,y);接著將實際坐標值轉換到邏輯坐標,;最后調用GUI_TOUCH_StoreState(x,,y)保存邏輯坐標值。為實時得到觸點坐標,,需不斷調用GUI_TOUCH_Exec()函數(shù),,因此建立單獨任務對該函數(shù)調用,以保證觸摸屏任務的實時響應,。該部分設計難點在于中斷標志清零,,如果每次得到觸點位置后不能即刻清零,則會影響GUI內部去抖操作和校準處理,,因此在保存穩(wěn)定坐標值后再清除標志位,。
3 μC/GUI應用開發(fā)
3.1 觸摸屏消息響應機制

    GUI所有外設輸入均以消息形式發(fā)送給當前窗體回調函數(shù)處理,具體流程如圖2所示[5],。觸摸屏的消息傳遞實質是對全局變量_State記載和更新,。_State有3個成員變量:消息發(fā)生點x坐標、y坐標,、外設按下與否的操作狀態(tài),。外設輸入消息統(tǒng)稱為WM_TOUCH,函數(shù)WM_HandlePID()專門處理這種消息,。通過GUI_PID_GetState獲取GUI_PID_STATE結構的WM_TOUCH消息,,將新獲取消息與函數(shù)內靜態(tài)舊消息變量比較,包括該消息發(fā)生點的屏幕坐標及外設操作狀態(tài),。狀態(tài)發(fā)生變化是將操作狀態(tài)變化作為獨立消息WM_PID_STATE_CHANGED發(fā)送,,再發(fā)送WM_TOUCH消息。構造WM_TOUCH消息所用到的數(shù)據(jù),,需要獲取當前焦點窗體句柄,,當前焦點窗體是用WM_hCapture全局變量記載,如果為0則調用函數(shù)WM_Screen2hWin(),,根據(jù)消息發(fā)生點屏幕坐標獲取窗體句柄,。向當前焦點窗體發(fā)送消息后,,更新當前消息到舊消息變量,結束本次消息處理,。


3.2 窗口,、控件和對話框應用
    系統(tǒng)界面豐富,頻繁用到頁面切換,,因此使用?滋C/GUI視窗管理器(WM)進行窗口創(chuàng)建,、顯示、隱藏和刪除等,。用戶程序中對不同窗口指定不同回調函數(shù),,當指定事件發(fā)生時,通知圖形系統(tǒng)調用指定函數(shù),,如窗口內容改變時自動重繪的場合等,。圖3(a)、圖3(b)分別為菜品推薦及菜單顯示窗口,。
    為使點菜系統(tǒng)功能更加豐富,,界面中加入按鈕、列表框,、單選按鈕,、框架窗口等控件??丶菢嬙煊脩艚涌诘脑?,能自動對某些事件反應??丶彩峭ㄟ^其構造函數(shù)返回的句柄而引用,。控件使用視窗管理器,,一旦一個控件建立,,它被處理成與其他窗口一樣,WM保證它在需要時能正確顯示(及重繪),。

    控件消息響應機制在使用中十分重要,,包括按鈕觸碰響應、單選按鈕序列號獲取,、列表框滑動等,。下面以按鈕為例介紹其功能。Button按鈕在其回調函數(shù)中對相關消息(WM_MOUSEOVER/WM_PID_STATE_CHANGED/WM_TOUCH)進行處理,,在button.c文件中可找到相關實現(xiàn)函數(shù),,用觸摸屏點擊該按鈕時發(fā)送以下三種消息之一:WM_NOTIFICATION_MOVED_OUT、WM_NOTIFICATION_RELEASED、WM_NOTIFICATION_PRESSED,,之后在該按鈕父窗口捕獲并處理消息,。系統(tǒng)是通過捕獲WM_NOTIFICATION_RELEASED消息實現(xiàn)按鈕觸碰功能的。
    系統(tǒng)除了點菜外,,還能存儲會員信息,,用于累積會員積分,如圖3(c),。對于新建和登錄賬戶界面,,使用對話框是很需要的。建立對話框需要做兩件基本工作:一個資源表,,定義包括的控件,;另一個是定義控件的初始化。對話框包含多個控件(框架窗口,、按鈕,、編輯框、文本框),,通過對不同控件的選擇向系統(tǒng)發(fā)出請求信息,。多數(shù)消息被對話框自動處理,,其他傳送給對話框指定的回調函數(shù),。其中,將WM_INIT_DIALOG和WM_NOTIFY_PARENT兩種類型的附加消息傳送到對話框窗口進行處理,。對話框顯示前,,WM_INIT_DIALOG消息立即被發(fā)送到對話框處理,對話框程序用這個消息初始化控件以及實現(xiàn)其他影響對話框顯示的初始化任務,;通過對話框的子窗口發(fā)送WM_NOTIFY_PARENT消息到對話框,,通知父窗口以保證事件同步。
3.3μC/OS II應用
    系統(tǒng)使用接口函數(shù)OSTaskCreateExt 創(chuàng)建任務,,根據(jù)系統(tǒng)要求,,設計四個任務,分別是:初始化任務(TaskStart),、接收消息任務(TaskRxmsg),、響應觸摸任務(TaskTouch)和更新任務(TaskUpdate)。任務間通過信號量,、全局變量等方式通信,,具體狀態(tài)轉移如圖4所示。

    (1)初始化任務
    優(yōu)先級別最高,,用于建立和調用系統(tǒng)初始化函數(shù),。系統(tǒng)上電后,首先對各個硬件模塊、軟件內各數(shù)據(jù)初始化,,如果SD卡讀取不成功,、無線運行不正常,LED燈提示系統(tǒng)初始化失敗,,同時系統(tǒng)退出運行狀態(tài),。反之,初始化完畢,,系統(tǒng)開始任務調度,。
    (2)接收消息任務
    接收上位機傳回的確認信息,實時顯示菜單狀態(tài):準備中,、制作中,、傳送中和已上菜。由于無線發(fā)回數(shù)據(jù)不定時,,且為了避免數(shù)據(jù)丟失,,該任務優(yōu)先級別高于TaskTouch。該任務與TaskTouch之間用信號量通信,。
    (3)響應觸摸任務
    用于執(zhí)行GUI_TOUCH_Exec()函數(shù),,更新觸摸點狀態(tài),設置窗口,、對話框等的回調函數(shù),,進行界面切換。放棄對CPU占用后,,系統(tǒng)調度將CPU占用權交給TaskUpdate,。
    (4)更新任務
    由于使用視窗管理回調機制,該任務必須實現(xiàn),,并定期調用(至少每秒鐘100次),,優(yōu)先級別最低。僅從一個任務調用GUI更新函數(shù)(即GUI_Exec(),,GUI_Delay()),,有助于保持程序結構清晰。任務完成后,,按任務優(yōu)先級高低開始新一輪調度,。
    以μC/OS-II操作系統(tǒng)為基礎,系統(tǒng)在響應觸摸任務和更新任務中分別調用μC/GUI函數(shù),。該項工作通過在配置中使能多任務支持及配合內核接口函數(shù)來完成,。由于任務實時行為只受運行在更高級別任務的影響,所以在低級別任務中設置用戶界面,,使其切換到用戶界面時不會影響實時行為,。
    本文介紹的系統(tǒng),在Nios II架構上移植了可視化圖形庫μC/GUI,系統(tǒng)重點研究了如何應用?滋C/GUI,。在實現(xiàn)觸摸屏操作的基礎上,,結合消息響應機制實現(xiàn)窗口、控件和對話框的使用,,并融合多任務操作系統(tǒng)提高點菜的實時性,。LTM觸摸屏顯示帶有Windows風格圖形界面,顧客可根據(jù)菜品圖片,、營養(yǎng)介紹及價格隨時點餐,。通過GUI整合的觸摸操作,實現(xiàn)了自助點菜,、查看菜品狀態(tài),、加菜、退菜以及結賬功能,,可提供更優(yōu)質,、更人性化的服務。
參考文獻
[1] Altera Corporation.Nios II processor reference handbook[M]. 2005.
[2] 李蘭英.Nios II嵌入式軟核SOPC設計原理及應用[M].北京:北京航空航天大學出版社,,2006.
[3] Micrium Inc.μC/GUI manual Rev.0[M].2002.
[4] Qiu Chuanfei,,Zhang Wei,Zhou Quanzhi,,et al.Porting μC/GUI To LCD and VGA in Nios II system[C].International Conference on Measuring Technology and Mechatronics  Automation,,Changsha,2010.
[5] 葛欣,,孟凡榮.使用μC/GUI開發(fā)圖形用戶界面[J].計算機工程與設計,,2005,,26(1):253-255.

此內容為AET網站原創(chuàng),,未經授權禁止轉載。