基于uITRON操作系統(tǒng)的嵌入式GUI設(shè)計-新品速遞_第1頁
基于uITRON操作系統(tǒng)的嵌入式GUI設(shè)計-新品速遞_第2頁
基于uITRON操作系統(tǒng)的嵌入式GUI設(shè)計-新品速遞_第3頁
基于uITRON操作系統(tǒng)的嵌入式GUI設(shè)計-新品速遞_第4頁
基于uITRON操作系統(tǒng)的嵌入式GUI設(shè)計-新品速遞_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

精品文檔-下載后可編輯基于uITRON操作系統(tǒng)的嵌入式GUI設(shè)計-新品速遞隨著嵌入式系統(tǒng)技術(shù)的不斷發(fā)展,各類嵌入式應(yīng)用對人機交互界面的要求也越來越高,這就使得對嵌入式圖形用戶界面的需求越來越迫切。與一般系統(tǒng)上的圖形用戶界面相比,嵌入式系統(tǒng)圖形用戶界面要求輕型、占用資源少、高性能、高可靠性、可配置等特點。本設(shè)計是在東南大學(xué)國家專用集成電路系統(tǒng)工程技術(shù)研究中心自主研發(fā)的,并在遵循uITRON3.0標(biāo)準(zhǔn)的RTOS-ASIXOS基礎(chǔ)上設(shè)計出一套適合于手持設(shè)備、儀器儀表等應(yīng)用的圖形用戶界面——ASIXWindow。該圖形用戶界面采用面向?qū)ο蟮脑O(shè)計思想,基于消息循環(huán)和事件驅(qū)動機制,構(gòu)建了比較完整的窗口系統(tǒng),為用戶提供了類Win32API的用戶編程接口??紤]到一般嵌入式應(yīng)用的屏幕較小,以及嵌入式系統(tǒng)處理器與存儲器容量的限制,ASIXWindow在設(shè)計上放棄了窗口剪切等復(fù)雜特性,大大降低了系統(tǒng)的復(fù)雜性,減少了對系統(tǒng)資源的占用。由于采用基于控件的設(shè)計概念,ASIXWindow非常適合裁減,可以根據(jù)用戶的需求方便地增加或刪減控件,增加了系統(tǒng)的可裁減性。該圖形用戶界面已成功應(yīng)用于PDA,電子詞典,稅控收款機等多款產(chǎn)品設(shè)計中。

1與操作系統(tǒng)內(nèi)核的接口

ASIXWindow的整體架構(gòu)是基于消息分發(fā),消息循環(huán)以及消息處理之上的。整個ASIXOS平臺的結(jié)構(gòu)如圖1所示。圖1中,層的是系統(tǒng)的消息源,包括中斷(鍵盤、觸摸屏等)和定時器,一般將它們統(tǒng)稱為中斷源。中斷發(fā)生后,進入中斷處理程序,該中斷處理程序維護其對應(yīng)的緩沖區(qū)后(如果它需要緩沖區(qū)),設(shè)置事件發(fā)生(通過調(diào)用內(nèi)核的事件標(biāo)志系統(tǒng)調(diào)用)。因為系統(tǒng)任務(wù)是阻塞在這個事件標(biāo)志上的,而且系統(tǒng)任務(wù)的優(yōu)先級,系統(tǒng)任務(wù)將被內(nèi)核調(diào)度運行,系統(tǒng)任務(wù)根據(jù)所發(fā)生事件的類型,來進行相應(yīng)的處理。比如說,如果是筆中斷事件,中斷處理程序?qū)⒐P的坐標(biāo)信息存放在相應(yīng)的緩沖區(qū)中,并設(shè)置相應(yīng)的事件標(biāo)志,系統(tǒng)任務(wù)將筆坐標(biāo)的數(shù)據(jù)轉(zhuǎn)換為相應(yīng)活動區(qū)域(ActiveArea)的消息,并由系統(tǒng)任務(wù)將這個消息發(fā)送到當(dāng)前需要該中斷事件的任務(wù)中。LCD顯示,鍵盤和筆中斷一定是由前臺任務(wù)(擁有屏幕的任務(wù))接管的,其他外圍設(shè)備所對應(yīng)的中斷源則由占用該資源的任務(wù)接管。

每個任務(wù)都有一個自己的信箱(MailBox),在每個信箱上都維護著一條消息隊列,所有發(fā)往該任務(wù)的消息都連接在這個隊列中。任務(wù)代碼應(yīng)該通過消息循環(huán)不斷地從該隊列中取消息并處理,如果消息隊列為空,則該任務(wù)阻塞,由ASIXOS內(nèi)核選擇下一個就緒的高優(yōu)先級任務(wù)運行。

系統(tǒng)任務(wù)是內(nèi)核的擴展,提供系統(tǒng)基本的服務(wù)功能和接口。它接管系統(tǒng)所有的中斷資源并將相應(yīng)的中斷事件翻譯成為相應(yīng)的系統(tǒng)消息,并將該消息分發(fā)到對應(yīng)的應(yīng)用程序任務(wù);系統(tǒng)任務(wù)同時維護系統(tǒng)中所有任務(wù)的信息,負責(zé)確定前臺任務(wù)(擁有顯示屏幕和用戶輸入焦點的任務(wù),前臺任務(wù)不一定是CPU正在運行的任務(wù))以及前臺任務(wù)的切換。系統(tǒng)任務(wù)阻塞在底層中斷的事件標(biāo)志上,系統(tǒng)任務(wù)擁有的優(yōu)先級。

在系統(tǒng)任務(wù)之上是服務(wù)任務(wù)。服務(wù)任務(wù)負責(zé)提供系統(tǒng)的其他擴展服務(wù)。服務(wù)任務(wù)沒有屏幕顯示(類似于Linux中的守護進程),服務(wù)任務(wù)阻塞在自己的消息隊列上。服務(wù)任務(wù)擁有第二高的優(yōu)先級。

500)this.width=500"border=0>圖1ASIXOS的總體架構(gòu)

應(yīng)用程序任務(wù)是用戶使用的各個應(yīng)用。應(yīng)用任務(wù)阻塞在自己的消息隊列上,所有的應(yīng)用程序一般都應(yīng)該擁有屏幕顯示,所有的應(yīng)用程序在同一優(yōu)先級上。

2窗口管理

ASIXWindows是基于消息驅(qū)動的圖形用戶接口。從ASIXWindows的角度來看,應(yīng)用程序是由一組窗口和控件組成的,程序的功能是通過窗口的操作來實現(xiàn)的??丶窃贏SIXWindows中定制的具有特定功能的獨立模塊,例如:按鈕、菜單、下拉框、軟鍵盤等。在ASIXWindows中,每一個控件在數(shù)據(jù)結(jié)構(gòu)上都被描述為一個窗口(也就是說,在數(shù)據(jù)結(jié)構(gòu)上,窗口和控件是一樣的),不同的是,控件是作為某個窗口的子窗口。在數(shù)據(jù)結(jié)構(gòu)上將窗口與控件統(tǒng)一,使得整個系統(tǒng)的結(jié)構(gòu)更簡單,對窗口的操作與對控件的操作可以統(tǒng)一到一起,這使得系統(tǒng)的編程接口可以統(tǒng)一到窗口的操作函數(shù)上。在ASIXWindows中所有的窗口操作,不管是窗口或是控件,都使用這些統(tǒng)一的函數(shù)。系統(tǒng)通過下面這個統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)來對所有的控件進行管理。

typedefstructasix_window{structasix_window*prev;//指向前一個兄弟窗口structasix_window*next;//指向后一個兄弟窗口structasix_window*child;//指向子窗口鏈表/*本窗口的相關(guān)ID*/WNDCLASS*wndclass;//指向本窗口的窗口類U32task_id;//本窗口所屬任務(wù)的任務(wù)號U32wnd_id;//本窗口ID號U32parent_id;//本窗口的父窗口ID號/*本窗口的位置、狀態(tài)、風(fēng)格以及窗口標(biāo)題等*/U32status;//本窗口狀態(tài)U16x;//本窗口左上角X坐標(biāo)U16y;//本窗口左上角Y坐標(biāo)U16width;//本窗口的寬度U16hight;//本窗口的高度char*caption;//本窗口標(biāo)題U32style;//本窗口風(fēng)格/*指向本窗口私有數(shù)據(jù)結(jié)構(gòu)的指針*/void*ctrl_str;//指向本窗口的私有數(shù)據(jù)結(jié)構(gòu)}ASIX_WINDOW;

實際上,不同的控件擁有不同的功能和結(jié)構(gòu),所以它們的操作是不同的。為了擁有統(tǒng)一的操作函數(shù)接口,為每一個不同的窗口或控件定義了相應(yīng)的窗口類,窗口類實際上是每種控件的模版,這個模版定義了與該控件相關(guān)的內(nèi)容。當(dāng)應(yīng)用程序員調(diào)用CreatWindow函數(shù)創(chuàng)建某類控件時,CreatWindow查找該類控件的窗口類,并根據(jù)窗口類中的定義,調(diào)用與該控件相關(guān)的創(chuàng)建函數(shù),進行實際的創(chuàng)建工作。然后CreatWindow填寫相應(yīng)的數(shù)據(jù)結(jié)構(gòu),描述該控件類的實例,并將其鏈接到系統(tǒng)窗口鏈表中去,以便后續(xù)的管理。利用窗口類描述不同控件設(shè)計的同時,可以將不同控件的開發(fā)獨立于系統(tǒng)構(gòu)架的實現(xiàn),使得控件的開發(fā)可以獨立進行。使用獨立窗口類來描述每個控件的另一個好處是可以非常方便的對ASIXWindow進行裁減。下面給出窗口類數(shù)據(jù)結(jié)構(gòu)的定義。

typedefstructwindow_class{U8wndclass_id;//窗口類的ID號//CreateWindow()調(diào)用本函數(shù)執(zhí)行控件的具體創(chuàng)建STATUS(*create)(char*caption,U32style,U16x,U16y,U16width,U16hight,U32wndid,U32menu,void**ctrl_str,void*exdata);//DestroyWindow()調(diào)用本函數(shù)執(zhí)行控件的具體刪除STATUS(*destroy)(void*ctrl_str);//DefWindowProc()調(diào)用本函數(shù)進行消息處理STATUS(*msg_proc)(U32win_id,U16asix_msg,U32lparam,void*data,U16wparam,void*reserved);//GetMessage()調(diào)用本函數(shù)進行底層消息的翻譯與轉(zhuǎn)換STATUS(*msg_trans)(void*ctrl_str,U16msg_type,U32areaId,P_U16data,U32size,PMSGtrans_msg);//RePaintWindow()調(diào)用本函數(shù)重繪本窗口類控件STATUS(*repaint)(void*ctrl_str,U32lparam);//SetWindowText()調(diào)用本函數(shù)設(shè)置本窗口類控件的標(biāo)題STATUS(*caption)(void*ctrl_str,char*caption,void*exdata);}WNDCLASS;

500)this.width=500"border=0>圖2任務(wù)鏈表與窗口鏈表

圖2所示是系統(tǒng)中窗口鏈表的結(jié)構(gòu),系統(tǒng)還維護了一張任務(wù)鏈表,每個任務(wù)控制塊(TCB)中都保留了指向本任務(wù)窗口鏈表的首指針。

3消息傳遞與處理

每個窗口(Form)都擁有自己的消息處理函數(shù),該函數(shù)接收來自系統(tǒng)(包括窗口和控件)的消息并作相應(yīng)的處理和動作。每一個窗口處理函數(shù)實際上就是一個消息循環(huán),窗口函數(shù)通過取消息函數(shù)ASIXGetMessage()獲得系統(tǒng)任務(wù),并發(fā)送給該窗口的消息進行處理。ASIXGetMessage()獲得系統(tǒng)消息并進行相應(yīng)的處理和消息轉(zhuǎn)換(實際上是將底層操作系統(tǒng)所提供的硬件消息轉(zhuǎn)換成ASIXWindow的消息,該函數(shù)通過調(diào)用相應(yīng)窗口類所定義的消息翻譯函數(shù)msg_trans()實現(xiàn)消息的轉(zhuǎn)換),然后窗口函數(shù)對消息進行分檢并作相應(yīng)的處理,這部分代碼是用戶自己定制的,實際上是用戶程序處理來自窗口和控件的消息,用來實現(xiàn)該應(yīng)用程序的功能。窗口函數(shù)調(diào)用ASIXWindows的控件消息處理函數(shù)DefWindowProc(),該函數(shù)是一個消息過濾器及轉(zhuǎn)換器,它接管非用戶的,屬于控件自己的消息(這個消息可能來自用戶的操作)。它首先掃描由取消息函數(shù)獲得的消息,檢查其中是否有屬于ASIXWindows控件的消息。如果該消息屬于某個控件,則消息處理函數(shù)調(diào)用系統(tǒng)窗口鏈表中該控件所對應(yīng)的窗口類所指明的消息處理函數(shù),處理這個消息執(zhí)行相應(yīng)的動作并可能發(fā)出相應(yīng)的消息(例如,當(dāng)用戶點擊某按鈕時,控件消息處理函數(shù)將接管該點擊事件,并執(zhí)行按鈕被點擊的動畫,同時發(fā)送一條該按鈕被點擊的消息)。

4圖形接口

ASIXWindow的圖形接口設(shè)計引入了硬件抽象層的概念,圖形函數(shù)(GraphicAPI)不直接操縱硬件,而是通過調(diào)用硬件抽象層提供的一組基本函數(shù)來作具體的圖形繪制工作。硬件抽象層函數(shù)將按照設(shè)備相關(guān)的格式將要顯示的內(nèi)容首先填寫到系統(tǒng)內(nèi)存的一片緩沖區(qū)(VRAM)中,然后硬件抽象層的函數(shù)將根據(jù)傳入的參數(shù)決定是否將數(shù)據(jù)復(fù)制到LCD控制器。如果所調(diào)用函數(shù)的應(yīng)用任務(wù)當(dāng)前擁有LCD(前臺任務(wù)),則將數(shù)據(jù)送往LCD控制器,否則該函數(shù)僅僅將數(shù)據(jù)寫入VRAM緩沖區(qū)(該任務(wù)是后臺任務(wù))。硬件抽象層還提供了一個叫做Refresh的函數(shù),該函數(shù)將把當(dāng)前VRAM中的內(nèi)容復(fù)制到LCD控制器的數(shù)據(jù)寄存器中。系統(tǒng)任務(wù)在應(yīng)用任務(wù)切換的時候調(diào)用Refresh函數(shù),將切換進來的任務(wù)中所屬VRAM的數(shù)據(jù)刷新到LCD中去,實現(xiàn)屏幕的切換,如圖3所示。

500)this.width=500"border=0>圖3ASIXWindow的圖形上下文

為了避免圖形函數(shù)重入時帶來的問題,以及不同應(yīng)用任務(wù)擁有不同屏幕以及相應(yīng)屬性的問題,在新的設(shè)計中采用了圖形上下文(GraphicContext,簡稱GC)的結(jié)構(gòu)。每個需要用到屏幕的應(yīng)用任務(wù)都擁有自己的圖形上下文,該結(jié)構(gòu)中保存與硬件無關(guān)的顯示屬性,比如當(dāng)前色、背景色、當(dāng)前線寬、當(dāng)前填充模式、光標(biāo)的位置、閃爍頻率、光標(biāo)大小、顯示緩沖區(qū)(VRAM)的頭指針、物理屏幕在邏輯屏幕中的位置坐標(biāo)等信息。

實際上,這樣的設(shè)計一方面可以實現(xiàn)邏輯屏幕的概念,即應(yīng)用程序可以在比實際物理屏幕大的屏幕上繪制圖形;另一方面,不管應(yīng)用任務(wù)在前臺(擁有LCD)還是在后臺(不擁有LCD),都可以進行圖形函數(shù)的調(diào)用。如果是前臺任務(wù),繪制的圖形會立刻顯示在LCD上;如果是后臺任務(wù),圖形被暫時“繪制”到該任務(wù)的VRAM中,等下次該后臺任務(wù)切換到前臺時,系統(tǒng)任務(wù)(SystemTask)將調(diào)用Refresh函數(shù)將該任務(wù)的VRAM刷新到LCD上。

結(jié)語

根據(jù)以上內(nèi)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論