亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種跨cpu平臺(tái)的嵌入式圖形界面生成方法

文檔序號(hào):6460510閱讀:282來(lái)源:國(guó)知局
專利名稱:一種跨cpu平臺(tái)的嵌入式圖形界面生成方法
技術(shù)領(lǐng)域
本發(fā)明涉及代碼自動(dòng)生成技術(shù),特別地,涉及一種跨CPU平臺(tái)的嵌入式圖
形界面生成方法。
背景技術(shù)
隨著嵌入式技術(shù)的飛速發(fā)展,越來(lái)越多的控制系統(tǒng)采用嵌入式設(shè)備和技術(shù)
替代以前的PC機(jī)。圖形界面的開(kāi)發(fā)在嵌入式軟件中占了很大的比重,為了滿足
快速開(kāi)發(fā)的要求,軟件設(shè)計(jì)普遍采用了組態(tài)軟件技術(shù),通過(guò)設(shè)計(jì)和生成快速完 成一個(gè)軟件的開(kāi)發(fā)。但是由于嵌入式系統(tǒng)的特點(diǎn)就是平臺(tái)多樣性,包括大量的
操作系統(tǒng)平臺(tái)和不同類型的CPU硬件平臺(tái)。己有的組態(tài)軟件中只支持一種特定 平臺(tái)的軟件設(shè)計(jì)和生成,或者只能跨軟件平臺(tái),無(wú)法跨CPU平臺(tái)。使得更換CPU
平臺(tái)后需重復(fù)開(kāi)發(fā),效率低下。

發(fā)明內(nèi)容
本發(fā)明的目的在于針對(duì)現(xiàn)有技術(shù)無(wú)法實(shí)現(xiàn)跨CPU平臺(tái)的不足,提供一種跨 CPU平臺(tái)的嵌入式圖形界面生成方法。
本發(fā)明的目的是通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn)的 一種跨CPU平臺(tái)的嵌入式圖 形界面生成方法,包括以下步驟
(1) 使用者通過(guò)設(shè)計(jì)環(huán)境進(jìn)行設(shè)計(jì),系統(tǒng)對(duì)設(shè)計(jì)結(jié)果進(jìn)行描述;
(2) 生成器對(duì)描述文件進(jìn)行解析,解析結(jié)果處理成目標(biāo)平臺(tái)相關(guān)的格式;
(3) 根據(jù)解析結(jié)果和平臺(tái)特征,生成和組織源代碼;
(4) 將源代碼編譯成和目標(biāo)CPU平臺(tái)相關(guān)的指令集;
(5) 生成的指令集下載到目標(biāo)平臺(tái)運(yùn)行。
本發(fā)明的有益效果是通過(guò)跨CPU平臺(tái)的嵌入式圖形界面生成方法,可以
使得一次設(shè)計(jì)可以運(yùn)行于多個(gè)CPU硬件平臺(tái),方便實(shí)現(xiàn)系統(tǒng)移植,提高設(shè)計(jì)和開(kāi)發(fā)效率。


圖1是跨CPU平臺(tái)的嵌入式圖形界面生成方法原理框圖2是跨CPU平臺(tái)的嵌入式圖形界面生成方法設(shè)計(jì)流程圖3是支持跨平臺(tái)的內(nèi)核框圖4是一個(gè)漢字編碼示例圖5是控件組織二叉樹(shù)結(jié)構(gòu)框圖6是GUI執(zhí)行流程框圖。
具體實(shí)施例方式
本發(fā)明提供一種跨CPU平臺(tái)的嵌入式圖形界面生成器,結(jié)構(gòu)參見(jiàn)圖1,設(shè) 計(jì)流程參見(jiàn)圖2。首先使用者通過(guò)設(shè)計(jì)環(huán)境進(jìn)行設(shè)計(jì),系統(tǒng)對(duì)設(shè)計(jì)結(jié)果進(jìn)行描述 (步驟101);生成器對(duì)描述文件進(jìn)行解析,解析結(jié)果處理成目標(biāo)平臺(tái)相關(guān)的格式 (步驟102);根據(jù)解析結(jié)果和平臺(tái)特征,生成和組織源代碼(步驟103);將源代碼 編譯成和目標(biāo)CPU平臺(tái)相關(guān)的指令集(步驟104);生成的指令集下載到目標(biāo)平臺(tái)
運(yùn)行(步驟105)。
如圖3所示,通過(guò)硬件描述層(HIUD)對(duì)硬件驅(qū)動(dòng)進(jìn)行抽象,由HIUD層 完成底層驅(qū)動(dòng)的調(diào)用,實(shí)現(xiàn)GUI內(nèi)核的硬件無(wú)關(guān)性,方便移植。HIUD定義一 個(gè)統(tǒng)一的接口供GUI內(nèi)核和其他部分調(diào)用,并負(fù)責(zé)根據(jù)不同的CPU平臺(tái)分別實(shí) 現(xiàn)定義的接口功能。
GUI的圖形庫(kù)實(shí)現(xiàn)基本圖形繪制,主要包括點(diǎn)、直線、矩形繪制與填充、 圓形繪制與填充、橢圓繪制與填充、多邊形繪制與填充、弧線、位圖顯示、網(wǎng) 格(表格)繪制、矩形區(qū)域反相顯示。字庫(kù)實(shí)現(xiàn)方法為把每種字符類型(字體+ 字號(hào))的字符集合按字符編碼升序排序組成一個(gè)數(shù)組。當(dāng)要顯示一個(gè)字符時(shí),可 使用折半査找快速的找到要顯示的字符的信息。字庫(kù)數(shù)據(jù)結(jié)構(gòu)包括字模結(jié)構(gòu)、 字符信息結(jié)構(gòu)、字符信息數(shù)組、字體。字模結(jié)構(gòu)是一個(gè)一維數(shù)組,數(shù)組的大小 視字體不同的寬度和高度而定。設(shè)字體的寬度為w象素,高度為h象素,則數(shù) 組的大小為(w*h/8)字節(jié)。因此可以看出,數(shù)組中每一位表示一個(gè)象素,用1 表示字符筆劃經(jīng)過(guò)該象素(在顯示的時(shí)候?qū)⒈惶钌袭?huà)筆的顏色),0表示不經(jīng)過(guò)(在顯示的時(shí)候不填色,即顯示背景色)。圖4顯示了一個(gè)"大"(16X16)字
的結(jié)構(gòu)。
字符信息包含字符的編碼、寬度(像素)、每行的字節(jié)數(shù)和字模所在地址,只
包含字符的寬度而不包含高度,是假設(shè)同一字體的所有字符都是等高的。因此,
有如下的字符信息結(jié)構(gòu) typedef struct^ U16 inCode; U8 xSize; U8 bytePLine; U8* pCharData; }sGUI—CharInfo;
其中,inCode是字符的編碼;xSize表示字符的寬度(象素);bytePLine是 字符的行數(shù)據(jù)(字節(jié)為單位);pCharData表示字模的地址。如"大"字的字符 信息結(jié)構(gòu)為
{ 0xb4f3, 16, 2, acFontHZSong_16_b4G},/*大96 */
"大"字的編碼為0xb4f3,字符寬度為16,每行要2個(gè)字節(jié)的數(shù)據(jù)。
字符信息數(shù)組一個(gè)字符信息數(shù)組是該類型的所有字符按編碼升序排序后的
數(shù)組。其定義形式如下
<formula>formula see original document page 5</formula>
字體結(jié)構(gòu)包含字符的高度信息(規(guī)定同一字體的字符的高度是相同的)、字
符信息數(shù)組的地址以及數(shù)組中元素的個(gè)數(shù)。由此可定義字體結(jié)構(gòu)如下 typedef struct<formula>formula see original document page 6</formula>其中,ySize表示字符的高度;pCharList是字符信息數(shù)組的地址;charNum
是數(shù)組中元素的個(gè)數(shù)。
消息隊(duì)列是順序表示(即數(shù)組表示)的循環(huán)隊(duì)列,消息結(jié)構(gòu)如下 typedef struct
union {
const void* p;
int v; } data; sGUI一Handle hObjDst; sGUI二Handle hObjSrc; U16 msgldj }sGUI—Msg;
其中,msgld表示的是消息的類型,比如MSG—TOUCH—STAT^DOWN表 示觸摸屏被觸摸(按下),MSG—SHOW表示顯示窗體的消息等;hWinDst則表示 接收并處理消息的目標(biāo)窗體;hObjSrc表示發(fā)送消息的對(duì)象;data字段是一個(gè)聯(lián) 合體,其成員包含一個(gè)voicP類型的指針p和一個(gè)int型的變量v,通過(guò)它們可以 用來(lái)傳遞消息所包含的數(shù)據(jù)。
定義好消息結(jié)構(gòu)以后,就可以定義消息隊(duì)列控制結(jié)構(gòu)了。首先定義消息隊(duì) 列長(zhǎng)度。消息隊(duì)列的控制結(jié)構(gòu)采用"模板"方式,只描述通用數(shù)據(jù)類型。定義 好隊(duì)列控制結(jié)構(gòu)后,用一個(gè)真正的隊(duì)列(數(shù)組)來(lái)存放消息具體的消息。消息 隊(duì)列的數(shù)據(jù)結(jié)構(gòu)定義好后就可以對(duì)消息進(jìn)行管理了,包括消息隊(duì)列的初始化, 消息入隊(duì)列,消息出隊(duì)列,判斷消息隊(duì)列是否為空,發(fā)送消息,消息派送等操 作。消息隊(duì)列的初始化,主要是將隊(duì)列控制結(jié)構(gòu)初始化。另外,發(fā)送消息實(shí)際 上就是將消息入隊(duì),而消息派送則是將消息真正的發(fā)給處理它的窗體或控件來(lái) 處理。
應(yīng)用程序進(jìn)入循環(huán)以后,GUI系統(tǒng)開(kāi)始執(zhí)行,在這個(gè)過(guò)程中,由于某些原
因產(chǎn)生并發(fā)送了消息(主要包括觸摸屏按下抬起消息,退出系統(tǒng)消息,重畫(huà) 控件消息,控件獲得失去焦點(diǎn)消息,按鍵消息,窗體移動(dòng)消息,窗體顯示隱藏 消息,用戶自定義消息等),這些消息先被寄存在消息隊(duì)列中。 一旦觸發(fā)消息處 理函數(shù),該函數(shù)將對(duì)本次收集的消息進(jìn)行一次集中處理,直到消息隊(duì)列空為止。如果有需要,可以在任意的地方手動(dòng)觸發(fā)消息處理函數(shù),這樣可以及時(shí)的處理 需要處理的消息,提高效率。
控件庫(kù)包含常用的控件和操作,如控件移動(dòng),控件隱藏顯示、按鈕動(dòng)態(tài)效 果,編輯框軟鍵盤輸入??丶墓ぷ髟硎鞘紫葎?chuàng)建控件,主要是為控件分 配內(nèi)存空間,設(shè)置控件的初始屬性和狀態(tài)及默認(rèn)屬性和狀態(tài),設(shè)置控件的默認(rèn) 回調(diào)函數(shù)用以處理一些默認(rèn)的消息,把控件加入控件管理鏈表??丶?chuàng)建成功 后,返回控件的句柄。在以后的程序中就是通過(guò)這個(gè)句柄來(lái)操作控件的,包括 向控件發(fā)送消息,改變控件的屬性值等。在內(nèi)存管理模塊中提到句柄與真實(shí)地 址轉(zhuǎn)換的過(guò)程,當(dāng)向控件派送消息或改變控件的屬性時(shí),首先根據(jù)句柄得到相 應(yīng)的對(duì)象在內(nèi)存中的真實(shí)地址(指針),通過(guò)這個(gè)指針操作對(duì)象的屬性,包括調(diào) 用默認(rèn)的回調(diào)函數(shù)來(lái)處理消息。這樣就完成消息處理機(jī)制了 。
常用控件的對(duì)象結(jié)構(gòu)是大部分有形控件的基礎(chǔ)設(shè)施,主要用于實(shí)現(xiàn)對(duì)象的
管理及包含一些公共屬性。其中包含了對(duì)象的矩形區(qū)域、唯一標(biāo)識(shí)、默認(rèn)的消
息處理函數(shù)的函數(shù)指針以及鍵盤、鼠標(biāo)、觸摸屏消息處理函數(shù)指針和對(duì)象鏈表
指針。對(duì)象結(jié)構(gòu)定義如下 typedef struct
int id; sGUI—CALLBACK cbDefault;
sGUI一KeyEventHandlers cbKey;
sGUI一TouchEventHandlers cbTouch;
sGUI一MouseEventHandlers cbMouse;
sGUI:Handle hParent;
sGUI二Handle hFirstChild;
sGUI二Handle hNextSibling;
sGUI二Rect rect;
U16 status;
double curPx; double curPy; }sGUIObj;
操作描述包括操作發(fā)出對(duì)象結(jié)構(gòu)描述,若采用鍵盤操作為按鍵信息結(jié)構(gòu);
若采用觸摸屏操作為觸摸操作信息結(jié)構(gòu);若采用鼠標(biāo)操作為鼠標(biāo)操作信息結(jié)構(gòu)。
還包括三類操作類型對(duì)應(yīng)的消息回調(diào)函數(shù)類型,用來(lái)對(duì)自定義控件的操作進(jìn)行 處理。另外,需要保存對(duì)象的狀態(tài),包括可見(jiàn)、無(wú)效和無(wú)用三種狀態(tài),可見(jiàn)狀
態(tài)表示對(duì)應(yīng)的控件是否可見(jiàn);無(wú)效表示控件已失效,需要重畫(huà);無(wú)用狀態(tài)表示 控件不可用。控件對(duì)象管理完成對(duì)象之間的關(guān)系描述,通過(guò)一棵弟兄二叉樹(shù)表現(xiàn)這些關(guān)系。在創(chuàng)建一個(gè)控件時(shí),需要指定控件的父控件。如果父控件為0,則 表示創(chuàng)建的是第一個(gè)控件。否則,把控件插入父控件的所有子控件隊(duì)列的尾部。
因此形成了一棵弟兄二叉樹(shù),其級(jí)別結(jié)構(gòu)如下如圖5所示。
執(zhí)行模塊驅(qū)動(dòng)整個(gè)GUI的工作,包括定時(shí)器的執(zhí)行、觸摸屏的執(zhí)行、鍵盤、 窗體模塊的執(zhí)行、和LCD模塊的執(zhí)行。GUI的執(zhí)行流程如圖6所示。
生成器解析部分首先讀取XML描述文件,通過(guò)遍歷整個(gè)XML文件所有 節(jié)點(diǎn)和子節(jié)點(diǎn),獲取使用者設(shè)計(jì)信息,包括圖形界面、事件和通信等,圖形界 面有窗體和窗體中的控件,以及控件的屬性組成。解析后獲取的結(jié)果作為代碼 生成的依據(jù)。組織部分根據(jù)解析結(jié)果,調(diào)用和平臺(tái)相關(guān)的模板文件,分類生成 各個(gè)模塊的源代碼;再把生成的源代碼組織成工程中的各個(gè)源代碼文件。對(duì)生 成的源代碼文件,調(diào)用目標(biāo)平臺(tái)編譯器編譯成可執(zhí)行指令集。
以上所述僅為本發(fā)明一個(gè)實(shí)施例,當(dāng)不能以此限制本發(fā)明范圍,凡依據(jù)本 發(fā)明所做的結(jié)構(gòu)上的變化、功能模塊的增刪,只要不失本發(fā)明的要義所在,都 應(yīng)視為落入本發(fā)明保護(hù)范圍之內(nèi)受到制約。
權(quán)利要求
1.一種跨CPU平臺(tái)的嵌入式圖形界面生成方法,其特征在于,包括以下步驟(1)使用者通過(guò)設(shè)計(jì)環(huán)境進(jìn)行設(shè)計(jì),系統(tǒng)對(duì)設(shè)計(jì)結(jié)果進(jìn)行描述。(2)生成器對(duì)描述文件進(jìn)行解析,解析結(jié)果處理成目標(biāo)平臺(tái)相關(guān)的格式。(3)根據(jù)解析結(jié)果和平臺(tái)特征,生成和組織源代碼。(4)將源代碼編譯成和目標(biāo)CPU平臺(tái)相關(guān)的指令集。(5)生成的指令集下載到目標(biāo)平臺(tái)運(yùn)行。
全文摘要
本發(fā)明公開(kāi)了一種跨CPU平臺(tái)的嵌入式圖形界面生成方法,使用者通過(guò)設(shè)計(jì)環(huán)境進(jìn)行設(shè)計(jì),系統(tǒng)對(duì)設(shè)計(jì)結(jié)果進(jìn)行描述;生成器對(duì)描述文件進(jìn)行解析,解析結(jié)果處理成目標(biāo)平臺(tái)相關(guān)的格式;根據(jù)解析結(jié)果和平臺(tái)特征,生成和組織源代碼;將源代碼編譯成和目標(biāo)CPU平臺(tái)相關(guān)的指令集;生成的指令集下載到目標(biāo)平臺(tái)運(yùn)行;本發(fā)明通過(guò)跨CPU平臺(tái)的嵌入式圖形界面生成方法,可以使得一次設(shè)計(jì)可以運(yùn)行于多個(gè)CPU硬件平臺(tái),方便實(shí)現(xiàn)系統(tǒng)移植,提高設(shè)計(jì)和開(kāi)發(fā)效率。
文檔編號(hào)G06F9/44GK101295247SQ20081006255
公開(kāi)日2008年10月29日 申請(qǐng)日期2008年6月24日 優(yōu)先權(quán)日2008年6月24日
發(fā)明者義 嚴(yán), 鄔惠峰 申請(qǐng)人:杭州義益自動(dòng)化有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1