《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于Nios II自助點菜系統的μC/GUI應用
基于Nios II自助點菜系統的μC/GUI應用
來源:電子技術應用2011年第9期
何 偉,游 婧,張 玲
(重慶大學 通信工程學院,重慶400030)
摘要: 結合自助點菜系統,介紹了移植μC/GUI圖形庫到軟核Nios II平臺的方法,研究了μC/GUI與輸入外設的接口原理,實現觸摸屏操作。采用消息響應機制,實現窗口、控件和對話框的觸摸應用,并深入分析了μC/GUI基于嵌入式操作系統μ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


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

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

 


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


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

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

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


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

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

    (1)初始化任務
    優先級別最高,用于建立和調用系統初始化函數。系統上電后,首先對各個硬件模塊、軟件內各數據初始化,如果SD卡讀取不成功、無線運行不正常,LED燈提示系統初始化失敗,同時系統退出運行狀態。反之,初始化完畢,系統開始任務調度。
    (2)接收消息任務
    接收上位機傳回的確認信息,實時顯示菜單狀態:準備中、制作中、傳送中和已上菜。由于無線發回數據不定時,且為了避免數據丟失,該任務優先級別高于TaskTouch。該任務與TaskTouch之間用信號量通信。
    (3)響應觸摸任務
    用于執行GUI_TOUCH_Exec()函數,更新觸摸點狀態,設置窗口、對話框等的回調函數,進行界面切換。放棄對CPU占用后,系統調度將CPU占用權交給TaskUpdate。
    (4)更新任務
    由于使用視窗管理回調機制,該任務必須實現,并定期調用(至少每秒鐘100次),優先級別最低。僅從一個任務調用GUI更新函數(即GUI_Exec(),GUI_Delay()),有助于保持程序結構清晰。任務完成后,按任務優先級高低開始新一輪調度。
    以μC/OS-II操作系統為基礎,系統在響應觸摸任務和更新任務中分別調用μC/GUI函數。該項工作通過在配置中使能多任務支持及配合內核接口函數來完成。由于任務實時行為只受運行在更高級別任務的影響,所以在低級別任務中設置用戶界面,使其切換到用戶界面時不會影響實時行為。
    本文介紹的系統,在Nios II架構上移植了可視化圖形庫μC/GUI,系統重點研究了如何應用?滋C/GUI。在實現觸摸屏操作的基礎上,結合消息響應機制實現窗口、控件和對話框的使用,并融合多任務操作系統提高點菜的實時性。LTM觸摸屏顯示帶有Windows風格圖形界面,顧客可根據菜品圖片、營養介紹及價格隨時點餐。通過GUI整合的觸摸操作,實現了自助點菜、查看菜品狀態、加菜、退菜以及結賬功能,可提供更優質、更人性化的服務。
參考文獻
[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開發圖形用戶界面[J].計算機工程與設計,2005,26(1):253-255.

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
99精品国产热久久91蜜凸| 亚洲欧美日韩国产中文| 欧美视频成人| 欧美国产日本在线| 美女免费视频一区| 久久婷婷丁香| 久久久福利视频| 久久福利毛片| 久久成人免费视频| 欧美一区二区性| 欧美一区二区三区啪啪| 午夜精品免费| 欧美一区二区三区的| 欧美一区二区在线免费观看| 午夜精品久久久99热福利| 亚洲一区日韩在线| 亚洲欧美久久久| 亚洲欧美久久久| 性欧美video另类hd性玩具| 亚洲欧美国产精品桃花| 午夜在线视频一区二区区别| 亚洲欧美日本国产有色| 亚洲免费视频网站| 午夜精品国产| 久久精品欧美| 免费人成精品欧美精品| 欧美黄色精品| 欧美日韩高清在线观看| 欧美日韩一区二区高清| 欧美天堂亚洲电影院在线观看| 欧美视频在线观看免费网址| 国产精品成人免费视频 | 麻豆成人91精品二区三区| 老司机一区二区| 欧美福利电影在线观看| 欧美精品七区| 国产精品国产馆在线真实露脸| 国产精品一区免费在线观看| 国产香蕉97碰碰久久人人| 韩日精品中文字幕| 亚洲国产高清一区二区三区| 亚洲精品一品区二品区三品区| 亚洲毛片一区二区| 亚洲一品av免费观看| 午夜精彩国产免费不卡不顿大片| 欧美中文字幕在线观看| 日韩一级大片在线| 亚洲综合成人婷婷小说| 久久精品国产欧美亚洲人人爽| 麻豆久久婷婷| 欧美日韩中文另类| 国产婷婷色一区二区三区| 亚洲第一色中文字幕| 一本久道综合久久精品| 亚洲欧美日韩中文视频| 亚洲国产免费看| av成人免费观看| 欧美伊人久久久久久久久影院| 裸体一区二区三区| 欧美性开放视频| 国产综合久久| 99视频国产精品免费观看| 欧美一区二区三区喷汁尤物| 夜夜嗨av一区二区三区中文字幕| 亚洲视频欧洲视频| 国产原创一区二区| 国产视频一区在线观看| 一区二区视频欧美| 99天天综合性| 久久精品国产视频| 亚洲一区二区欧美日韩| 老司机免费视频一区二区| 国产精品捆绑调教| 亚洲国产欧美精品| 亚洲欧美日韩一区二区在线| 日韩午夜精品视频| 性欧美1819性猛交| 欧美日韩国产小视频| 国产一区在线观看视频| 一级日韩一区在线观看| 亚洲国产精品热久久| 性久久久久久| 国产精品www994| 亚洲黄一区二区| 久久精品免费| 性做久久久久久免费观看欧美| 欧美精品v日韩精品v国产精品 | 亚洲视频成人| 欧美电影在线| 国语自产在线不卡| 一区二区欧美日韩视频| 亚洲激情一区二区| 欧美一区激情| 欧美日韩综合在线| 亚洲大胆人体视频| 久久爱www久久做| 欧美一级夜夜爽| 欧美午夜精品电影| 亚洲人妖在线| 亚洲精品欧美日韩专区| 欧美一区二区视频在线观看2020| 欧美日韩午夜| 亚洲另类自拍| 日韩一区二区精品在线观看| 免费久久99精品国产自在现线| 国产无遮挡一区二区三区毛片日本| 亚洲视频在线视频| 一区二区三区视频在线看| 欧美激情亚洲一区| 精品动漫3d一区二区三区免费| 欧美一区二区免费视频| 欧美亚洲一级| 国产精品爽爽ⅴa在线观看| 一区二区三区久久精品| 亚洲伦伦在线| 欧美激情一区二区三区 | 午夜精品福利一区二区蜜股av| 亚洲视频自拍偷拍| 欧美日韩黄色大片| 美女黄毛**国产精品啪啪| 久久精品五月| 国产精品免费观看在线| 亚洲免费观看高清完整版在线观看| 91久久精品一区| 欧美激情一二区| 亚洲精品欧美一区二区三区| 一本色道**综合亚洲精品蜜桃冫| 欧美国产综合视频| 亚洲欧洲另类国产综合| 一本色道综合亚洲| 欧美视频亚洲视频| 亚洲天堂av综合网| 午夜精品久久久久99热蜜桃导演| 国产精品捆绑调教| 亚洲男人天堂2024| 午夜激情综合网| 国产偷国产偷亚洲高清97cao| 久久精品99国产精品酒店日本| 久久久999成人| 在线观看视频一区二区欧美日韩 | 久久综合狠狠综合久久激情| 加勒比av一区二区| 亚洲国产精品一区制服丝袜| 欧美成人网在线| 亚洲美女在线一区| 夜夜嗨av色综合久久久综合网| 欧美电影免费观看| 一区二区三区成人| 欧美一区二区三区视频免费播放| 国产午夜精品美女视频明星a级| 亚洲高清视频一区二区| 欧美黄在线观看| av成人免费观看| 欧美一区久久| 一区二区在线观看av| 日韩视频第一页| 国产精品v一区二区三区 | 亚洲美女少妇无套啪啪呻吟| 欧美午夜视频| 欧美一级二级三级蜜桃| 免费在线成人| 亚洲狼人综合| 久久成人人人人精品欧| 亚洲高清视频在线| 亚洲夜晚福利在线观看| 国产一区二区精品| 日韩亚洲欧美成人一区| 国产精品美女在线观看| 欧美伊久线香蕉线新在线| 美女脱光内衣内裤视频久久影院| 亚洲区一区二| 欧美自拍丝袜亚洲| 亚洲黄色一区| 午夜国产精品影院在线观看| 一区在线播放视频| 亚洲一区二区三区影院| 国产精品久久久久久久久久免费| 欧美中文字幕不卡| 欧美人妖在线观看| 性欧美video另类hd性玩具| 亚洲婷婷免费| 国产欧美日韩不卡免费| 亚洲精品乱码久久久久久日本蜜臀 | 午夜电影亚洲| 国产一区二区三区在线观看网站 | 性久久久久久久久| 在线观看av不卡| 亚洲自拍偷拍麻豆| 黄色精品一二区| 亚洲尤物精选| 亚洲动漫精品| 久久精品国产精品亚洲综合| 亚洲品质自拍| 久久露脸国产精品| 在线一区二区日韩| 欧美第一黄网免费网站| 香蕉成人伊视频在线观看| 欧美日韩一卡二卡| 亚洲激情网站| 国产视频在线观看一区|