當前位置:首頁 > 嵌入式 > 嵌入式硬件
[導讀]隨著嵌入式系統(tǒng)技術的不斷發(fā)展,各類嵌入式應用對人機交互界面的要求也越來越高,這就使得對嵌入式圖形用戶界面的需求越來越迫切。與一般系統(tǒng)上的圖形用戶界面相比,嵌入式

隨著嵌入式系統(tǒng)技術的不斷發(fā)展,各類嵌入式應用對人機交互界面的要求也越來越高,這就使得對嵌入式圖形用戶界面的需求越來越迫切。與一般系統(tǒng)上的圖形用戶界面相比,嵌入式系統(tǒng)圖形用戶界面要求輕型、占用資源少、高性能、高可靠性、可配置等特點。

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

1 與操作系統(tǒng)內核的

接口

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

 

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

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

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

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

2 窗口管理

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

typedef struct asix_window

{ struct asix window *prey}//指向前一個兄弟窗口

struct asix_window *next;//指向后一個兄弟窗口

struct asix_window *child;//指向子窗口鏈表

/*本窗口的相關ID*/

WNDCLASS *wndclass;//指向本窗口的窗口類

U32 task_id; //本窗口所屬任務的任務號

U32 wnd_

id; //本窗口ID號

U32 parent_id; //本窗口的父窗口 ID號

/*本窗口的位置、狀態(tài)、風格以及窗口標題等*/

U32 status; //本窗口狀態(tài)

U16 x; //本窗口左上角x坐標

U16 v; //本窗口左上角Y坐標

U16 width; //本窗口的寬度

U16 hight; //本窗口的高度

char *caption} //本窗口標題

U32 style; //本窗口風格

/*指向本窗口私有數(shù)據(jù)結構的指針*/

void *etrl_str; //指向本窗口的私有數(shù)據(jù)結構

}ASIX_WINDOW;

實際上,不同的控件擁有不同的功能和結構,所以它們的操作是不同的。為了擁有統(tǒng)一的操作函數(shù)接口,為每一個不同的窗口或控件定義了相應的窗口類,窗口類實際上是每種控件的模版,這個模版定義了與該控件相關的內容。當應用程序員調用CreatWindow函數(shù)創(chuàng)建某類控件時,CreatWindow查找該類控件的窗口類,并根據(jù)窗口類中的定義,調用與該控件相關的創(chuàng)建函數(shù)

,進行實際的創(chuàng)建工作。然后CreatWindow填寫相應的數(shù)據(jù)結構,描述該控件

類的實例,并將其鏈接到系統(tǒng)窗口鏈表中去,以便后續(xù)的管理。利用窗口類描述不同控件設計的同時,可以將不同控件的開發(fā)獨立于系統(tǒng)構架的實現(xiàn),使得控件的開發(fā)可以獨立進行。使用獨立窗口類來描述每個控件的另一個好處是可以非常方便的對ASIX Window進行裁減。下面給出窗口類數(shù)據(jù)結構的定義。

typedef struct window_class

{ U8 wndclass_id; //窗口類的ID號

//CreateWindow()調用本函數(shù)執(zhí)行控件的具體創(chuàng)建

[!--empirenews.page--]

STATUS (。create)(char‘caption,U32 style,U16 x,

U16 Y,U16 width,U16 hight,U32 wndid,U32 menH,void*

*etrl_str,void*exdata);

//DestroyWindow()調用本函數(shù)執(zhí)行控件的具體刪除

STATUS (*destroy)(void*ctrl_str);

//DefWindowProc()調用本函數(shù)進行消息處理

STATUS (。msg_proe)(U32 win_id,U16 asix_msg·U32

lparam.void*data,U16 wparam.void*reserved);

//GetMessage()調用本函數(shù)進行底層消息的翻譯與轉換

STATUS (*msg_trans)(void*ctrl_str,U16 msg_type,

U32 areald.P_U16 data,U32 size,PMSG trans_msg);

//RePaintWindow()調用本函數(shù)重繪本窗口類控件

STATUS (*repaint)(void*ctrl_str,U32 Iparam);

//SetWindowText()調用本函數(shù)設置本窗口類控件的標題

STATUS (*caption)(void*ctrl_str,char*caption,void* exdata);

WNDCLASS;

系統(tǒng)中窗口鏈表的結構,系統(tǒng)還維護了一張任務鏈表,每個任務控制塊(TCB)中都保留了指向本任務窗口鏈表的首指針。

 

3 消息傳遞與處理

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

4 圖形接口

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

 

為了避免圖形函數(shù)重

人時帶來的問題,以及不同應用任務擁有不同屏幕以及相應屬性的問題,在新的設計中采用了圖形上下文(G

raphic Context,簡稱GC)的結構。每個需要用到屏幕的應用任務都擁有自己的圖形上下文,該結構中保存與硬件無關的顯示屬性,比如當前色、背景色、當前線寬、當前填充模式、光標的位置、閃爍頻率、光標大小、顯示緩沖區(qū)(VRAM)的頭指針、物理屏幕在邏輯屏幕中的位置坐標等信息。

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

 

結 語

根據(jù)以上內容,設計完成了GUI的原型系統(tǒng),并在PDA應用中采用了該GUI。為了方便應用程序員的開發(fā),還在此基礎上設計了基于MS VC++的GUI模擬器。圖4所示是ASIX Windcw在PDA系統(tǒng)和模擬器上的應用。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉