国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于uITRON操作系統(tǒng)的嵌入式GUI設(shè)計(jì)

發(fā)布時(shí)間:2010-11-15 12:23    發(fā)布者:eetech
隨著嵌入式系統(tǒng)技術(shù)的不斷發(fā)展,各類(lèi)嵌入式應(yīng)用對(duì)人機(jī)交互界面的要求也越來(lái)越高,這就使得對(duì)嵌入式圖形用戶(hù)界面的需求越來(lái)越迫切。與一般系統(tǒng)上的圖形用戶(hù)界面相比,嵌入式系統(tǒng)圖形用戶(hù)界面要求輕型、占用資源少、高性能、高可靠性、可配置等特點(diǎn)。

本設(shè)計(jì)是在東南大學(xué)國(guó)家專(zhuān)用集成電路系統(tǒng)工程技術(shù)研究中心自主研發(fā)的,并在遵循uITRON 3.0標(biāo)準(zhǔn)的RTOS-ASIX OS基礎(chǔ)上設(shè)計(jì)出一套適合于手持設(shè)備、儀器儀表等應(yīng)用的圖形用戶(hù)界面——ASIX Window。該圖形用戶(hù)界面采用面向?qū)ο蟮脑O(shè)計(jì)思想,基于消息循環(huán)和事件驅(qū)動(dòng)機(jī)制,構(gòu)建了比較完整的窗口系統(tǒng),為用戶(hù)提供了類(lèi)Win32 API的用戶(hù)編程接口?紤]到一般嵌入式應(yīng)用的屏幕較小,以及嵌入式系統(tǒng)處理器與存儲(chǔ)器容量的限制,ASIX Window在設(shè)計(jì)上放棄了窗口剪切等復(fù)雜特性,大大降低了系統(tǒng)的復(fù)雜性,減少了對(duì)系統(tǒng)資源的占用。由于采用基于控件的設(shè)計(jì)概念,ASIX Window非常適合裁減,可以根據(jù)用戶(hù)的需求方便地增加或刪減控件,增加了系統(tǒng)的可裁減性。該圖形用戶(hù)界面已成功應(yīng)用于PDA,電子詞典,稅控收款機(jī)等多款產(chǎn)品設(shè)計(jì)中。

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

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

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

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

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




圖1 ASIX OS的總體架構(gòu)

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

2 窗口管理

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

typedef struct asix_window
{struct asix_window *prev;  //指向前一個(gè)兄弟窗口
struct asix_window *next;  //指向后一個(gè)兄弟窗口
struct asix_window *child;  //指向子窗口鏈表
/*本窗口的相關(guān)ID */
WNDCLASS*wndclass; //指向本窗口的窗口類(lèi)
U32 task_id; //本窗口所屬任務(wù)的任務(wù)號(hào)
U32wnd_id; //本窗口ID號(hào)
U32parent_id; //本窗口的父窗口ID號(hào)
/*本窗口的位置、狀態(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;

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

typedef struct window_class
{ U8wndclass_id;//窗口類(lèi)的ID號(hào)
// CreateWindow() 調(diào)用本函數(shù)執(zhí)行控件的具體創(chuàng)建
STATUS(*create)(char *caption, U32 style, U16 x, U16 y, U16 width, U16 hight, U32 wndid, U32 menu, void **ctrl_str, void *exdata);
// DestroyWindow() 調(diào)用本函數(shù)執(zhí)行控件的具體刪除
STATUS(*destroy)(void *ctrl_str);
// DefWindowProc() 調(diào)用本函數(shù)進(jìn)行消息處理
STATUS(*msg_proc)( U32 win_id, U16 asix_msg, U32 lparam,void *data, U16 wparam, void *reserved);
//GetMessage() 調(diào)用本函數(shù)進(jìn)行底層消息的翻譯與轉(zhuǎn)換
STATUS(*msg_trans)(void *ctrl_str, U16 msg_type, U32 areaId,P_U16 data, U32 size, PMSG trans_msg);
//RePaintWindow() 調(diào)用本函數(shù)重繪本窗口類(lèi)控件
STATUS(*repaint)(void *ctrl_str, U32 lparam);
//SetWindowText() 調(diào)用本函數(shù)設(shè)置本窗口類(lèi)控件的標(biāo)題
STATUS(*caption)(void *ctrl_str, char *caption, void *exdata);
} WNDCLASS;




圖2 任務(wù)鏈表與窗口鏈表

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

3 消息傳遞與處理

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

4 圖形接口

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




圖3 ASIX Window的圖形上下文

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

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

結(jié)語(yǔ)

根據(jù)以上內(nèi)容,設(shè)計(jì)完成了ASIX Window GUI 的原型系統(tǒng),并在PDA應(yīng)用中采用了該GUI。為了方便應(yīng)用程序員的開(kāi)發(fā),還在此基礎(chǔ)上設(shè)計(jì)了基于MS VC++的GUI模擬器。圖4所示是ASIX Window在PDA系統(tǒng)和模擬器上的應(yīng)用。ASIX Window編譯后的核心非常小巧,長(zhǎng)度只有200 KB左右。在可移植性方面,該GUI已成功地移植到了68000、X86、ARM等處理器平臺(tái)上。




圖4 ASIX Window在PDA上的應(yīng)用以及模擬器截圖
本文地址:http://www.qingdxww.cn/thread-39296-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠(chǎng)商推薦

  • Microchip視頻專(zhuān)區(qū)
  • Cortex-M4外設(shè) —— TC&TCC結(jié)合事件系統(tǒng)&DMA優(yōu)化任務(wù)培訓(xùn)教程
  • 你仿真過(guò)嗎?使用免費(fèi)的MPLAB Mindi模擬仿真器降低設(shè)計(jì)風(fēng)險(xiǎn)
  • 深度體驗(yàn)Microchip自動(dòng)輔助駕駛應(yīng)用方案——2025巡展開(kāi)啟報(bào)名!
  • 更佳設(shè)計(jì)的解決方案——Microchip模擬開(kāi)發(fā)生態(tài)系統(tǒng)
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)

相關(guān)在線(xiàn)工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91青青草视频 | 亚洲国产天堂在线观看 | 在线精品视频在线观看高清 | 成人在线免费视频 | 欧美亚洲视频在线观看 | 麻豆视频网址 | 视频二区 中文字幕 欧美 | 午夜精品免费 | 无人视频在线观看完整版免费下载 | 黄页网站在线观看免费 | 花季传媒视频播放软件 | 亚洲最大成人 | 免费国产不卡午夜福在线观看 | 日韩精品福利视频一区二区三区 | 久久机热一这里只精品 | 天天插天天操天天干 | 91在线青春娱乐精品分类 | 美女裸身无档视频免费 | 九九免费高清在线观看视频 | 国产日韩精品一区二区 | 精品在线小视频 | 国产高清精品91在线 | 韩国视频一区二区 | 午夜精品视频在线观看 | 欧美老人另类视频 | 精品视频一区二区三区四区 | 亚洲六月婷婷 | 99热在线获取最新地址 | 国产一区二区三区视频 | 九色自拍视频 | 一个色在线视频 | 久久精品视频91 | 国产h视频 | 亚洲欧美日本欧美在线播放污 | 在线观看免费午夜大片 | 在线免费观看亚洲 | 在线观看福利影 | 日韩欧美一二三 | 888午夜不卡理论久久 | 一级黄片毛片 | 91免费精品国自产拍在线可以看 |