技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于PC/104的圖形界面控制軟件設(shè)計

基于PC/104的圖形界面控制軟件設(shè)計

時間:2008-09-05 11:02:00來源:ronggang

導語:?在嵌入式PC/104選用的操作系統(tǒng)中,建立圖形界面的人機接口軟件在實際中有很大的意義,本文針對相關(guān)工業(yè)控制項目,討論了有關(guān)基于消息處理機制的圖形界面人機接口的建立方法和相關(guān)問題
摘 要:在嵌入式PC/104選用的操作系統(tǒng)中,建立圖形界面的人機接口軟件在實際中有很大的意義,本文針對相關(guān)工業(yè)控制項目,討論了有關(guān)基于消息處理機制的圖形界面人機接口的建立方法和相關(guān)問題。 Abstract: Establishing Graphics User Interface software used on PC/104 is significant in the real industry project. This article discussed the method and problem of designing GUI based on message handling mechanism. 關(guān)鍵詞:圖形界面;操作系統(tǒng);控制系統(tǒng) Keywords: Graphic User Interface. OS. Control System 1 引言   在新興的嵌入式PC/104應用領(lǐng)域,因其硬件的獨特特點,往往要求使用者的軟件操作系統(tǒng)要具備以下特點:   ● 操作系統(tǒng)占用空間小,大約占用幾M或十幾M;   ● 系統(tǒng)穩(wěn)定性好;   ● 對硬件配置要求低;   ● 軟件開發(fā)靈活性高;   ● 可以直接對硬件操作,控制響應速度快。   基于這樣操作系統(tǒng)的軟件有時又要求為用戶提供一個良好的人機界面,而這類操作系統(tǒng)往往在圖形界面的能力上與Windows相比有著明顯的不足,針對這一難點,本人在基于注塑機械手控制軟件的圖形界面開發(fā)上,進行了積極的探索,希望對相關(guān)的軟件開發(fā)有所幫助。   建立與用戶交互的圖形界面,除了要在系統(tǒng)上畫出圖形外(這類系統(tǒng)往往提供繪畫函數(shù)),最關(guān)鍵的是要在圖形上建立軟件對用戶操作的響應,即類以于Windows系統(tǒng)中,系統(tǒng)針對用戶對圖形上的各種功能圖案(如按鈕)的點擊要給予響應。所以建立圖形界面關(guān)鍵是要在用戶與軟件之間建立起一種交互機制,針對這一問題,本文以下部分將詳細進行討論。 2 事件控制機制   軟件程序有兩種基本控制機制,即順序驅(qū)動(或過程驅(qū)動)機制和事件控制機制,采用順序驅(qū)動機制設(shè)計的程序有一個明顯的開始、明顯的過程和明顯的結(jié)束,這樣的控制機制不利于建立友好的人機接口。還有一種程序控制的機制,即事件驅(qū)動機制,采用事件驅(qū)動機制設(shè)計的程序,由事件的發(fā)生來控制。這樣的程序控制機制能夠為用戶提供更好的人機接口。   采用事件驅(qū)動機制在人機交互很強的程序設(shè)計中比較適用,它給用戶在程序的運行上以選擇的余地。事件驅(qū)動控制機制多在基于Windows的軟件上使用,Windows上的軟件開發(fā)大多使用VC、VB等一些可視化開發(fā)平臺,這些平臺往往已經(jīng)為用戶提供了事件驅(qū)動機制,用戶只需設(shè)計相關(guān)事件處理程序,在程序編制過程中并不涉及事件驅(qū)動機制的內(nèi)部運行機理。而在本文所討論的開發(fā)環(huán)境下,必須自己搭建事件驅(qū)動機制平臺,在這一點上增加了程序設(shè)計的難度和復雜性。   采用事件驅(qū)動機制可以大大減少消息丟失的可能性,如當程序正在處理某一個消息時,又產(chǎn)生了新的消息,這時事件驅(qū)動機制會將新消息放入消息循環(huán)隊列,等到當前消息處理完后再處理新來的消息,從而防止了消息丟失的可能。這種程序控制方式非常適用于系統(tǒng)及時響應用戶的請求,與用戶建立友好的人機接口。這比采用順序驅(qū)動機制設(shè)計的程序?qū)τ脩魜碚f更友好。 3 搭建事件驅(qū)動機制平臺   在用戶界面設(shè)計中,事件就是用戶通過各種輸入設(shè)備進行操作時所產(chǎn)生的各種信號,又稱消息。該消息是一種激發(fā)性的用于聯(lián)系用戶、計算機系統(tǒng)以及應用軟件之間交互活動的最基本信號。比如,用戶按下鍵盤上的某個鍵就可以形成一個消息,因為用戶的這一行為會對系統(tǒng)產(chǎn)生一個激發(fā)性的信號,使得系統(tǒng)由原來的某種狀態(tài)轉(zhuǎn)為另一種狀態(tài)。   消息的產(chǎn)生方式很多,主要由用戶通過按下鍵盤上的某個鍵或移動鼠標器并按下其上的某個鍵來產(chǎn)生。對于消息的產(chǎn)生者我們又稱之為消息源。消息源包括鼠標器、鍵盤、串行端口中斷、有關(guān)的軟件工具、設(shè)備驅(qū)動器、其它的輸入設(shè)備、其它的定位設(shè)備等等,甚至還可以是應用程序自身。   由于事件是激發(fā)人機交互活動最基本的因素,因而人機交互活動的關(guān)鍵就是研究由事件產(chǎn)生的消息處理技術(shù)及其算法。用戶界面的質(zhì)量高低,在某種程度上取決于事件及消息管理技術(shù)的優(yōu)劣   3.1 事件驅(qū)動機制的實現(xiàn)方法   以下列出本人所參與的注塑機械手控制軟件中,用于裝載鍵盤和鼠標事件所產(chǎn)生消息的消息隊列的數(shù)據(jù)結(jié)構(gòu):   struct event_define  ?。?   struct event_define *Last;   unsigned char ScanCode;   unsigned char KeyState;   int MouseState;   int CursorX;   int CursorY;   struct event_define *Next;  ?。?   下面介紹這一結(jié)構(gòu)體中各個元素的功能:   ● struct event define *Last 中的指針Last用于裝指向上一個消息隊列記錄的地址;   ● struct event define *Next 中的指針Next用于裝指向下一個消息隊列記錄的地址。這兩個指針中的內(nèi)容是在消息隊列初始化過程中完成的,使消息隊列形成首尾相鏈的隊列,同時頭指針與尾指針都指向消息隊列中的默認為0的消息數(shù)據(jù)記錄;   ● unsigned char ScanCode中的ScanCode用于裝鍵盤敲擊事件發(fā)生時,被敲擊鍵的鍵值;   ● unsigned char KeyState中的KeyState用于裝鍵盤敲擊事件發(fā)生時當時鍵的狀態(tài)(壓下或抬起);   ● int MouseState中的MouseState用于裝鼠標事件發(fā)生時鼠標消息的內(nèi)容,如鼠標左鍵壓下、左鍵抬起等;   ● int CursorX和int CursorY中的CursorY和CursorX分別用于裝鼠標事件發(fā)生時鼠標在顯示屏上的坐標值;本項目中有關(guān)消息的裝入都是用中斷方式來完成的,下面簡要介紹有關(guān)中斷處理的具體方法。   在程序中,當鼠標、鍵盤和串口數(shù)據(jù)事件發(fā)生時,本程序把這類事件當做中斷來處理。這樣做的好處在于:CPU不必花大量的時間去查尋外部事件是否產(chǎn)生。因為,中斷事件何時發(fā)生是不能預知的,一旦有外部事件請求中斷,則會向CPU的接收中斷信號的引腳發(fā)出電信號,這些信號CPU是馬上可以知道的。如鍵盤何時有鍵按下,是隨機的,CPU不用反復查尋鍵盤狀態(tài),而可以去執(zhí)行其它程序,一旦有按鍵按下,鍵盤馬上產(chǎn)生中斷請求信號,CPU得知這信號后,便立即去執(zhí)行為鍵盤服務的中斷程序。服務完后,CPU又恢復執(zhí)行被中斷了的程序邏輯。   中斷方式處理事件的優(yōu)點在于:執(zhí)行速度快,可實時處理,不占用CPU過多的時間等優(yōu)點。注塑機械手控制軟件中,中斷服務程序完成的主要任務就是把中斷事件裝入相應的消息隊列中。如:當有鍵盤敲擊時,就把鍵盤當前被敲擊的鍵值及狀態(tài)放入消息隊列,緊接著把尾指針指向下一個消息隊列數(shù)據(jù)記錄。如果在鍵盤敲擊前,頭指針與尾指針指向同一個消息隊列數(shù)據(jù)記錄,則鍵盤敲擊后,尾指針指向了下一個消息隊列數(shù)據(jù)記錄,這樣頭指針與尾指針就指向了不同的消息隊列數(shù)據(jù)記錄。若此時又有新的消息進入,則把它放入尾指針當前消息隊列數(shù)據(jù)記錄中,并把尾指針前移,指向下一個消息隊列數(shù)據(jù)記錄。而主程序則用循環(huán)結(jié)構(gòu)不斷檢測消息隊列的頭指針與尾指針是否指向同一地址。若二者指向同一地址,則轉(zhuǎn)入下一次循環(huán),再次檢測消息隊列的頭指針與尾指針是否指向同一地址,如此反復。若某次檢測發(fā)現(xiàn)頭指針與尾指針指向了不同地址則說明有消息裝入消息隊列,此時主程序?qū)⒆x出消息內(nèi)容,并將頭指針向前移動,使之指向下一個消息隊列數(shù)據(jù)記錄的地址,接著對當前消息做相應的處理,處理完成后再次檢測消息隊列的頭指針與尾指針是否指向同一地址,若不同則做相應處理,若相同則進入下一輪循環(huán),如此反復。這樣由外部事件將消息放入消息隊列中,使尾指針前移;而主程序按先進先出的順序讀出消息隊列中的數(shù)據(jù)記錄,并使頭指針向前移動,然后根據(jù)消息內(nèi)容做相應處理。這種事件處理方式又稱消息處理機制,如圖1。   在上述消息處理的過程中易出現(xiàn)一種特殊情況,即消息密度較高,主程序處理的速度低于消息裝入消息隊列的速度,最后將導致消息隊列裝滿,卻仍有新消息產(chǎn)生。針對這種情況,有兩種處理方法,一種是忽略新來的消息;一種是用新來的消息覆蓋原來的消息。本程序采用的辦法是忽略新來的消息,直到消息隊列空出新的隊列數(shù)據(jù)記錄,才將空出隊列后產(chǎn)生的消息裝入隊列。如果這種情況發(fā)生,就會導致隊列裝滿后和在隊列空出新的數(shù)據(jù)記錄期間產(chǎn)生的消息不被響應和處理,這種情況在程序?qū)嶋H運行中是不允許發(fā)生的。為了避免這種主程序處理的速度低于消息進入的速度的情況,可以采取的措施有三個:   ● 中斷服務程序用匯編語言編寫;   ● 主程序消息處理部分盡量簡潔;   ● 設(shè)定消息隊列的數(shù)據(jù)記錄個數(shù)足夠大。 [align=center] 圖1 消息處理機制[/align]   中斷服務程序用匯編語言編寫,這樣可以使得中斷服務程序更簡練,占用CPU時間更少,從而為主程序運行提供了更長的時間。這樣就使得原來可能產(chǎn)生數(shù)據(jù)阻塞的情況,在用匯編語言編寫中斷程序后,主程序運行分配的時間加長,主程序能夠完成消息處理,及時空出消息隊列數(shù)據(jù)記錄,為新來的消息提供數(shù)據(jù)記錄空間。   主程序消息處理部分盡量簡潔,就會加快主程序消息處理的速度,從而使主程序消息處理的速度大于消息裝入的速度。   設(shè)定消息隊列的數(shù)據(jù)記錄個數(shù)足夠大,這樣就會使新來的消息有一個足夠大的消息隊列數(shù)據(jù)記錄空間,就好比一個較大的緩沖區(qū),用以存放新來的消息數(shù)據(jù)。這樣即使新來的消息比較密集,也有一個比較大的空間存放。從而間接為主程序處理消息提供了時間。但實際上消息隊列數(shù)據(jù)記錄空間的大小是有上限的,所以在程序設(shè)計中這一問題的解決是由三個手段綜合解決的。

標簽:

點贊

分享到:

上一篇:無線傳感器網(wǎng)絡LEACH 協(xié)議的...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權(quán)與免責聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.connectcrack.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責任。

網(wǎng)站簡介|會員服務|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務平臺

網(wǎng)站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號