PPSM嵌入式RTOS中的窗口系統(tǒng)開發(fā)
發(fā)布時間:2007/8/30 0:00:00 訪問次數(shù):727
在目前的中低檔PDA中,很多廠商都采用Motorola M68K系列芯片。Motorola為其M68K CPU提供了一套免費(fèi)的實(shí)時操作系統(tǒng)PPSM(Personal Portable System Manager)。但該系統(tǒng)中沒有提供窗口系統(tǒng)。我們在實(shí)踐中開發(fā)了一套窗口系統(tǒng),如圖1和圖2所示。該系統(tǒng)為事件驅(qū)動方式,并有一系列控件支持。軟件開發(fā)人員采用添加控件的方式構(gòu)建所需的窗口,編寫對控件和窗口事件的響應(yīng)方式。下面介紹這套窗口系統(tǒng)的設(shè)計(jì)方案。
1 PPSM系統(tǒng)簡介
(1)虛擬多任務(wù)方式
PPSM系統(tǒng)中可以創(chuàng)建多個主任務(wù),但只有一個主任務(wù)處于活動狀態(tài)。每個主任務(wù)可以創(chuàng)建多個子任務(wù)。主任務(wù)和子任務(wù)均有唯一的TaskId。任務(wù)之間可以發(fā)送消息。接收消息的任務(wù)及其主任務(wù)可以取得CPU的控制權(quán)。
(2)觸摸屏輸入
PPSM系統(tǒng)采用了“活動區(qū)”的概念!盎顒訁^(qū)”是用戶設(shè)定的屏幕上的一個矩形區(qū)域,只有筆在這樣的區(qū)域中的動作才能引起PPSM向活動任務(wù)發(fā)送消息。每個活動區(qū)均屬于其創(chuàng)建的任務(wù)。換一種方式表達(dá)為:每個任務(wù)保存和管理一系列活動區(qū),活動主任務(wù)的所有子任務(wù)的活動區(qū)均處于活動狀態(tài),后創(chuàng)建的活動區(qū)覆蓋之前創(chuàng)建的活動區(qū)。
(3)圖形界面支持
PPSM系統(tǒng)以一部分系統(tǒng)內(nèi)存作為屏幕緩存。每個任務(wù)可以擁有自己獨(dú)立的屏幕緩存,也可以共享一個屏幕緩存。屏幕緩存的尺寸可以與實(shí)際的屏幕大小不同。系統(tǒng)顯示活動任務(wù)的屏幕緩存中的圖像。每個主任務(wù)擁有自己獨(dú)立的屏幕緩存,可以使主任務(wù)切換時迅速切換屏幕;而各主任務(wù)共享一個屏幕緩存可以節(jié)約內(nèi)存空間,同時,應(yīng)用程序還可以創(chuàng)建獨(dú)立于任務(wù)的屏幕緩存。它具有與屏幕緩存同樣的結(jié)構(gòu),但不能直接輸出到屏幕上。用戶可設(shè)置當(dāng)前的屏幕緩存。PPSM提供了一組GUI函數(shù),用于在當(dāng)前的屏幕緩存中作圖。
(4)事件驅(qū)動
PPSM采用中斷方式處理各類事件,如時鐘、UART輸入/輸出、筆輸入等。各種事件均向活動任務(wù)發(fā)送消息。各任務(wù)(主任務(wù)或子任務(wù))均有各自的消息隊(duì)列。各任務(wù)從其消息隊(duì)列中取得并處理消息。
由于PPSM采用活動區(qū)的輸入方式,每個任務(wù)管理自己的活動區(qū),任務(wù)激活時,其活動區(qū)處于有效狀態(tài)。因而應(yīng)用程序切換時,其活動區(qū)自動切換;但一個應(yīng)用程序中,各窗口的活動區(qū)可能互相干擾。應(yīng)用程序中,每個窗口均有各種的輸入?yún)^(qū)域,而各窗口的活動區(qū)域可能相互覆蓋,顯示上層窗口時必須使下次窗口的所有活動區(qū)無效。
有兩種方式可實(shí)現(xiàn)這樣的要求。第一種方式是,采用PPSM中子任務(wù)的方式:各子任務(wù)管理自己的活動區(qū),當(dāng)該子任務(wù)掛起或激活時,其活動區(qū)隨之掛起或激活。這要求一個窗口必須對應(yīng)有一個子任務(wù)。由于每個新的子任務(wù)需要較大的系統(tǒng)內(nèi)存空間,而我們并不需要應(yīng)用程序內(nèi)各窗口之間的切換,因而我們不采用這種方式。第二種方式是,采用PPSM中掛起活動區(qū)和恢復(fù)活動區(qū)的方法。PPSM支持對每個任務(wù)多次掛起活動區(qū)和恢復(fù)活動區(qū),因而我們可以在顯示新的窗口時,先掛起原有的活動區(qū);窗口關(guān)閉時,恢復(fù)原有的活動區(qū)。
(3)消息的處理
PPSM中定義了一系統(tǒng)硬件中斷產(chǎn)生的消息,如IRPT_TIMER、IRPT_RTC、IRPT_UART等等;同時,提供SendMessage和AdvSendMessage函數(shù)允許發(fā)送用戶自定義消息。用戶自定義消息從IRPT_USER開始。一個程序可以發(fā)送到另一個應(yīng)用程序或自己。這些消息和所有系統(tǒng)消息均由應(yīng)用程序的頂層窗口處理。應(yīng)用程序從其消息隊(duì)列中取得消息后,首先,由預(yù)定義的應(yīng)用程序消息處理函數(shù)處理公共的消息。然后,由為頂層窗口定義的消息處理函數(shù)處理。頂層窗口不處理的消息由預(yù)定義的窗口消息處理函數(shù)處理。
消息發(fā)送采用兩種方式。第一種是Send Message(),該函數(shù)將消息放在應(yīng)用程序的消息隊(duì)列中并立即返回;第二種是直接調(diào)用應(yīng)用程序頂層窗口的消息處理函數(shù),這樣函數(shù)便在消息處理之后返回。
(4)控件體系
窗口只是提供了界面設(shè)計(jì)操作的基礎(chǔ)。窗口中需要一系列按功能和操作方式分類的可視的界面元素,以便編程人員能夠方便地設(shè)計(jì)窗口的界面,實(shí)現(xiàn)窗口的特定功能。這樣的界面元素叫控件。
由于嵌入式設(shè)備內(nèi)存有限的原因,控件并不采用子窗口的方式。根據(jù)設(shè)計(jì)控件的目的,各類控件具有較為確定的外觀和規(guī)定的動作,并在特定的條件下,向其父窗口發(fā)出預(yù)定義的消息以供其處理。
控件屬于父窗口。在父窗口顯示時自動顯示,在父窗口關(guān)閉時自動釋放其占用的內(nèi)存空間;父窗口接收的消息首先在各控件中分發(fā)處理。按照這一要求,窗口必須保存、維護(hù)其控件的一個列表。列表中控件的指針按控件創(chuàng)建的順序存放。控件按創(chuàng)建的順序顯示,而消息在控件中按反序傳遞,以保證后創(chuàng)建的控件在可以覆蓋之前創(chuàng)建的控件的圖形和操作。
為了提高控件開發(fā)效率,我們需要各控件可以作為一種新定義控件的子控件。這樣新定義的控件可以利用已有的控件功
在目前的中低檔PDA中,很多廠商都采用Motorola M68K系列芯片。Motorola為其M68K CPU提供了一套免費(fèi)的實(shí)時操作系統(tǒng)PPSM(Personal Portable System Manager)。但該系統(tǒng)中沒有提供窗口系統(tǒng)。我們在實(shí)踐中開發(fā)了一套窗口系統(tǒng),如圖1和圖2所示。該系統(tǒng)為事件驅(qū)動方式,并有一系列控件支持。軟件開發(fā)人員采用添加控件的方式構(gòu)建所需的窗口,編寫對控件和窗口事件的響應(yīng)方式。下面介紹這套窗口系統(tǒng)的設(shè)計(jì)方案。
1 PPSM系統(tǒng)簡介
(1)虛擬多任務(wù)方式
PPSM系統(tǒng)中可以創(chuàng)建多個主任務(wù),但只有一個主任務(wù)處于活動狀態(tài)。每個主任務(wù)可以創(chuàng)建多個子任務(wù)。主任務(wù)和子任務(wù)均有唯一的TaskId。任務(wù)之間可以發(fā)送消息。接收消息的任務(wù)及其主任務(wù)可以取得CPU的控制權(quán)。
(2)觸摸屏輸入
PPSM系統(tǒng)采用了“活動區(qū)”的概念。“活動區(qū)”是用戶設(shè)定的屏幕上的一個矩形區(qū)域,只有筆在這樣的區(qū)域中的動作才能引起PPSM向活動任務(wù)發(fā)送消息。每個活動區(qū)均屬于其創(chuàng)建的任務(wù)。換一種方式表達(dá)為:每個任務(wù)保存和管理一系列活動區(qū),活動主任務(wù)的所有子任務(wù)的活動區(qū)均處于活動狀態(tài),后創(chuàng)建的活動區(qū)覆蓋之前創(chuàng)建的活動區(qū)。
(3)圖形界面支持
PPSM系統(tǒng)以一部分系統(tǒng)內(nèi)存作為屏幕緩存。每個任務(wù)可以擁有自己獨(dú)立的屏幕緩存,也可以共享一個屏幕緩存。屏幕緩存的尺寸可以與實(shí)際的屏幕大小不同。系統(tǒng)顯示活動任務(wù)的屏幕緩存中的圖像。每個主任務(wù)擁有自己獨(dú)立的屏幕緩存,可以使主任務(wù)切換時迅速切換屏幕;而各主任務(wù)共享一個屏幕緩存可以節(jié)約內(nèi)存空間,同時,應(yīng)用程序還可以創(chuàng)建獨(dú)立于任務(wù)的屏幕緩存。它具有與屏幕緩存同樣的結(jié)構(gòu),但不能直接輸出到屏幕上。用戶可設(shè)置當(dāng)前的屏幕緩存。PPSM提供了一組GUI函數(shù),用于在當(dāng)前的屏幕緩存中作圖。
(4)事件驅(qū)動
PPSM采用中斷方式處理各類事件,如時鐘、UART輸入/輸出、筆輸入等。各種事件均向活動任務(wù)發(fā)送消息。各任務(wù)(主任務(wù)或子任務(wù))均有各自的消息隊(duì)列。各任務(wù)從其消息隊(duì)列中取得并處理消息。
由于PPSM采用活動區(qū)的輸入方式,每個任務(wù)管理自己的活動區(qū),任務(wù)激活時,其活動區(qū)處于有效狀態(tài)。因而應(yīng)用程序切換時,其活動區(qū)自動切換;但一個應(yīng)用程序中,各窗口的活動區(qū)可能互相干擾。應(yīng)用程序中,每個窗口均有各種的輸入?yún)^(qū)域,而各窗口的活動區(qū)域可能相互覆蓋,顯示上層窗口時必須使下次窗口的所有活動區(qū)無效。
有兩種方式可實(shí)現(xiàn)這樣的要求。第一種方式是,采用PPSM中子任務(wù)的方式:各子任務(wù)管理自己的活動區(qū),當(dāng)該子任務(wù)掛起或激活時,其活動區(qū)隨之掛起或激活。這要求一個窗口必須對應(yīng)有一個子任務(wù)。由于每個新的子任務(wù)需要較大的系統(tǒng)內(nèi)存空間,而我們并不需要應(yīng)用程序內(nèi)各窗口之間的切換,因而我們不采用這種方式。第二種方式是,采用PPSM中掛起活動區(qū)和恢復(fù)活動區(qū)的方法。PPSM支持對每個任務(wù)多次掛起活動區(qū)和恢復(fù)活動區(qū),因而我們可以在顯示新的窗口時,先掛起原有的活動區(qū);窗口關(guān)閉時,恢復(fù)原有的活動區(qū)。
(3)消息的處理
PPSM中定義了一系統(tǒng)硬件中斷產(chǎn)生的消息,如IRPT_TIMER、IRPT_RTC、IRPT_UART等等;同時,提供SendMessage和AdvSendMessage函數(shù)允許發(fā)送用戶自定義消息。用戶自定義消息從IRPT_USER開始。一個程序可以發(fā)送到另一個應(yīng)用程序或自己。這些消息和所有系統(tǒng)消息均由應(yīng)用程序的頂層窗口處理。應(yīng)用程序從其消息隊(duì)列中取得消息后,首先,由預(yù)定義的應(yīng)用程序消息處理函數(shù)處理公共的消息。然后,由為頂層窗口定義的消息處理函數(shù)處理。頂層窗口不處理的消息由預(yù)定義的窗口消息處理函數(shù)處理。
消息發(fā)送采用兩種方式。第一種是Send Message(),該函數(shù)將消息放在應(yīng)用程序的消息隊(duì)列中并立即返回;第二種是直接調(diào)用應(yīng)用程序頂層窗口的消息處理函數(shù),這樣函數(shù)便在消息處理之后返回。
(4)控件體系
窗口只是提供了界面設(shè)計(jì)操作的基礎(chǔ)。窗口中需要一系列按功能和操作方式分類的可視的界面元素,以便編程人員能夠方便地設(shè)計(jì)窗口的界面,實(shí)現(xiàn)窗口的特定功能。這樣的界面元素叫控件。
由于嵌入式設(shè)備內(nèi)存有限的原因,控件并不采用子窗口的方式。根據(jù)設(shè)計(jì)控件的目的,各類控件具有較為確定的外觀和規(guī)定的動作,并在特定的條件下,向其父窗口發(fā)出預(yù)定義的消息以供其處理。
控件屬于父窗口。在父窗口顯示時自動顯示,在父窗口關(guān)閉時自動釋放其占用的內(nèi)存空間;父窗口接收的消息首先在各控件中分發(fā)處理。按照這一要求,窗口必須保存、維護(hù)其控件的一個列表。列表中控件的指針按控件創(chuàng)建的順序存放?丶磩(chuàng)建的順序顯示,而消息在控件中按反序傳遞,以保證后創(chuàng)建的控件在可以覆蓋之前創(chuàng)建的控件的圖形和操作。
為了提高控件開發(fā)效率,我們需要各控件可以作為一種新定義控件的子控件。這樣新定義的控件可以利用已有的控件功
熱門點(diǎn)擊
- VxWorks下UDP協(xié)議棧效率的研究與改進(jìn)
- 硬實(shí)時操作系統(tǒng)-RTLinux
- 基于Qt/Embedded的微波信號發(fā)生器軟
- 關(guān)于ISA設(shè)備的驅(qū)動程序轉(zhuǎn)換為PCI設(shè)備的W
- 在MOTOROLA A68K系列MCU上移植
- 矢量字庫在嵌入式機(jī)頂盒中的應(yīng)用
- 基于單片機(jī)的便攜式電子秤
- PPSM嵌入式RTOS中的窗口系統(tǒng)開發(fā)
- 一種基于比特表的實(shí)時多任務(wù)新調(diào)度算法
- ARM是什么?
推薦技術(shù)資料
- 羅盤誤差及補(bǔ)償
- 造成羅盤誤差的主要因素有傳感器誤差、其他磁材料干擾等。... [詳細(xì)]
- CV/CC InnoSwitch3-AQ 開
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門信號調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究