999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

BREW平臺中接口的設計與實現(xiàn)

2012-11-24 02:17:58張繼榮
關鍵詞:程序

張 茜,張繼榮

(西安郵電學院,陜西 西安 710061)

如今,手機已不是簡單的語音通信工具,它已逐漸發(fā)展成為數(shù)據(jù)業(yè)務開發(fā)應用的平臺。在這種情況下,高通公司推出了一個新的BREW (BinaryRuntime Environment for Wireless)平臺。BREW平臺的出現(xiàn)使手機像電腦一樣,可以應用更多的第三方軟件,滿足人們不同的需求,為用戶提供更多的服務。

在手機軟件開發(fā)中,許多問題都需要使用C++中面向對象的方法來實現(xiàn),以提高代碼的可重用性、程序的模塊化及健壯性;為了滿足用戶對新數(shù)據(jù)應用的需求,移動設備制造商也希望不重新開發(fā)專有的軟件平臺,就可以快速提供新業(yè)務,以降低移動設備的技術門檻和產(chǎn)品上市門檻。

高通公司推出的BREW平臺,為無線設備設計專門提供了一個高效的應用程序執(zhí)行環(huán)境及開發(fā)平臺。在BREW平臺,用C語言開發(fā)應用程序可以達到C++的設計效果,而不需要開發(fā)專用的軟件平臺,又提高了程序開發(fā)的效率和新業(yè)務開發(fā)的速度。

本文通過一個例子,闡述BREW中如何實現(xiàn)接口的聲明和實現(xiàn)的分離來達到面向對象的特性,提高代碼的可重用性、健壯性以及其可擴展性和易于管理的特性。

1 BREW接口的實現(xiàn)

1.1 BREW平臺簡介

BREW 的全稱是無線二進制運行環(huán)境。從基本的層面而言,BREW 平臺就是手持設備上嵌入式芯片操作系統(tǒng)的接口或抽象層,可以將它看作是 PC 環(huán)境下Microsoft Windows的 Win32 API。BREW 平臺是一組用于本地執(zhí)行而編譯并鏈接的二進制庫,優(yōu)化后能使應用程序利用無線服務和資源,控制流出或流入應用程序的事件流,能根據(jù)相應的事件啟動、停止、中止或恢復應用程序。BREW 執(zhí)行環(huán)境在運行時可以發(fā)現(xiàn)應用程序和任何相關的擴展[1]。

1.2 嵌入式系統(tǒng)結構

圖1是分散式系統(tǒng)結構圖。從圖1中可以看出,SDK需要使用運行平臺的接口聲明來開發(fā)應用程序,運行平臺負責根據(jù)用戶的輸入啟動應用程序,而應用程序則通過運行平臺的接口調用運行平臺的函數(shù)庫來實現(xiàn)功能[2]。

圖1 分散式系統(tǒng)結構圖

假設程序運行到了需要調用平臺函數(shù)的時候,由于當前的應用程序是開發(fā)者使用SDK開發(fā)的,就像平臺不知道應用程序的地址一樣,應用程序也不知道平臺函數(shù)的地址,因此,所面臨的問題就是怎樣能夠知道應用程序中所調用的平臺函數(shù)的地址。雖然SDK中可以提供運行平臺中每個函數(shù)的地址,但是因為平臺會經(jīng)常升級,導致每個函數(shù)的鏈接地址不固定,因此在平臺升級時,SDK和應用程序都需要同時升級。這樣就不能實現(xiàn)“分散式”的升級了,這種程序的運行方式也就沒有任何意義了。為解決分散式系統(tǒng)分散式升級的問題,BREW提供了一個機制來解決應用程序調用函數(shù)的問題。

如果在開發(fā)過程中使用運行平臺的接口聲明,而在運行時應用程序使用真正的二進制接口,并在二進制層面調用接口函數(shù)[3]。則無論是SDK還是應用程序都與接口相關,解決這個問題的方式就是讓接口和接口的實現(xiàn)之間分離。下面介紹BREW中的接口是如何實現(xiàn)的。

1.3 軟件開發(fā)和C語言

在C語言中,C語言庫的開發(fā)商開發(fā)了一個算法來實現(xiàn)字符串的搜索,為了實現(xiàn)這個功能,軟件廠商生成了一個頭文件FastString.h[4],內容如下:

在BREW 接口中共有 4個接口:CreateObject、Release、GetLength、和 Search。CreateObject用來創(chuàng)建 IFastString接口,Release用來釋放接口的資源,GetLength用來獲取字符串長度,Search用來查找字符串。一般地,這個庫的使用者會將.lib庫鏈接到自己的工程中,通過接口聲明的頭文件來使用庫中的函數(shù)。這樣,庫函數(shù)將成為客戶應用程序中的一部分。

假設FastString庫占用了1 MB的空間,如果4個程序中都調用了這個接口,則FastString接口將會占用4 MB的空間,也就是說有3 MB的空間浪費掉子。圖2是多個程序調用FastString庫的示意圖。另外,如果庫廠商發(fā)現(xiàn)接口有缺陷,又沒有辦法替換已經(jīng)存在的缺陷代碼,一旦FastString接口鏈接到代碼中,就不可能在用戶設備上替換這部分代碼。因此,庫廠商不得不重新為每個應用程序的開發(fā)者廣播發(fā)布新的庫文件,并希望他們重新編譯程序來使用新的代碼。這在嵌入式系統(tǒng)中是不可能的。因為在這里FastString的角色就是運行平臺,不可能每個應用程序都包含一個運行平臺。解決這個問題的一種技術是使用動態(tài)鏈接庫技術將FastString包含起來。

圖2 多個程序使用FastString庫

1.4 動態(tài)鏈接庫

動態(tài)鏈接庫技術的典型應用是Windows操作系統(tǒng)中的動態(tài)鏈接庫[4]。這種方法是將FastString源文件編譯成特殊的二進制文件,并強迫FastString將所有的接口從二進制文件中引用出去,建立相應的引出表,以便于在運行時把每個接口的名字映射到對應的二進制接口地址上。同時還需要為使用者生成相應的引入庫,使用者通過引入庫可以獲取每個接口的符號。當客戶鏈接引入庫時,這些符號信息會加入到當前的可執(zhí)行文件中,運行時動態(tài)加載二進制庫文件,并在執(zhí)行時調用相應的程序。這樣,即使多個程序調用FastString接口,F(xiàn)astString代碼也只需要一份,而且如果發(fā)現(xiàn)FastString代碼有缺陷時,可以更新FastString二進制組件而不影響應用程序。圖3是使用動態(tài)鏈接庫時多個程序調用FastString庫的示意圖。

圖3 多個程序使用FastString庫

1.5 虛擬函數(shù)表

但是在嵌入式系統(tǒng)中一般不支持動態(tài)鏈接庫技術,因此在 BREW 中,采用虛擬函數(shù)表(VTBL)技術[4]實現(xiàn)接口和接口的分離。

下面是新版本的FastString的頭文件:

首先對FastString程序作一說明:在FastString頭文件里定義了IFastString和IFastStringVtbl兩個類型。IFastStringVtbl類型是虛擬函數(shù)表類型,IFastString中包含了指向虛擬函數(shù)表類型的指針。在接口定義時,使用((IFastString)p->pvt)調用虛擬函數(shù)表中的函數(shù)指針,這說明了如果要使用接口就必須先要提供IFastString的指針類型??梢钥闯?,Release、GetLength和 Find已經(jīng)實現(xiàn)了在 C語言定義的接口和實現(xiàn)函數(shù)之間的分離。

源文件FastString.c如下:

CFastString結構體中有IFastStringVtbl類型的指針,而且這個指針在結構體的最頂部。另外還發(fā)現(xiàn)在IFastString結構體的最頂部也包含了IFastStringVtbl的指針,即CFastString是IFastString的超集。從而可以看出,CreateObject函數(shù)中返回的IFastString指針其實是指向CFastString的指針。在FastString.C源文件中還定義了一個IFastStringVtbl的變量gvtFastString,并為這個變量初始化成各個對應的函數(shù),這個變量就是虛擬函數(shù)表。虛擬函數(shù)表的示意圖如圖4所示。

可以發(fā)現(xiàn),除了CreateObject成員之外,其余的三個成 員 函 數(shù) (IFastString_Release、IFastString_GetLength、IFastString_Find)都添加到了虛擬函數(shù)表中,而且這個虛擬函數(shù)表還可以隨著需求的增加而進行無限擴大,這樣只用了一個函數(shù)CreateObject就實現(xiàn)了無限多個接口與實現(xiàn)之間的分離。

由于用戶需要使用CreateObject來獲取IFastString指針,因此將其與實現(xiàn)分離的方法是:因為應用程序的啟動過程,對于一個程序,無論是由main函數(shù)或者其他函數(shù)作為啟動函數(shù),都允許啟動時傳遞參數(shù),因此把這個CreateObject函數(shù)作為參數(shù)傳遞給應用程序就可以了。至此應用程序、接口和實現(xiàn)之間已經(jīng)分離了。

1.6 支持多個接口和接口的擴展性

實現(xiàn)了接口和實現(xiàn)之間的分離,但一個平臺不會只有一個接口,還包含了其他用途的接口。但又不能把所有接口的CreateObject作為參數(shù)傳遞給應用程序啟動函數(shù),所以要對現(xiàn)有接口進行擴展來實現(xiàn)只要傳遞一個參數(shù)就能創(chuàng)建多個接口的功能。就像設計模式里面的工廠模式,創(chuàng)建一個專門的類用來創(chuàng)建別的類。因此,本設計采用增加一個稱為Shell的接口來管理其他接口。

在Shell接口中,定義了CreateInstance接口函數(shù),其代碼如下:其作用是通過參數(shù)nClassID來創(chuàng)建指定的接口實例。IShell_CreateObject函數(shù)用來創(chuàng)建Shell接口本身,然后再通過Shell接口來創(chuàng)建其他接口。也就是說,在應用程序啟動時,先創(chuàng)建Shell接口,然后通過IShell_CreateInstance來創(chuàng)建其他接口。這樣,不但實現(xiàn)了接口的管理工作,而且方便了接口的擴展。

本文通過一個例子介紹了BREW中接口的實現(xiàn),說明使用虛擬函數(shù)表能夠實現(xiàn)接口的聲明與實現(xiàn)的分離,從而當平臺升級或修改接口時不會影響應用程序,提高了CPU利用率,并使程序更加健壯。一個應用程序會使用很多接口,而Shell接口可以用來創(chuàng)建其他接口,使BREW接口有了很大的擴展性。使用C語言開發(fā)的BREW平臺具有面向對象的封裝性、繼承性和多態(tài)性。

[1]陳秀寓.基于brew平臺的多態(tài)機制實現(xiàn) [J].軟件工程師,2010(2):104-106.

[2]趙建祥,高禮中.基于BREW的手機軟件模塊設計[J].儀儀器儀表用戶,2009(5):47-49.

[3]費寧.BREW實現(xiàn)機制深入分析[J].江蘇通信技術,2006(4):15-17.

[4]焦玉海.深入 BREW 開發(fā)[EB/OL](2005-10-04)[2011-10-01]http://down.51cto.com/data/250317.

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
基于VMM的程序行為異常檢測
偵查實驗批準程序初探
我國刑事速裁程序的構建
創(chuàng)衛(wèi)暗訪程序有待改進
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 97久久免费视频| 免费又爽又刺激高潮网址| 欧美h在线观看| 亚洲黄色视频在线观看一区| 欧美一级黄色影院| 91国内外精品自在线播放| 精品免费在线视频| 手机成人午夜在线视频| 成人午夜网址| 92午夜福利影院一区二区三区| 中文无码毛片又爽又刺激| 亚洲国产成人精品无码区性色| 国产一级毛片yw| 亚洲永久色| 亚洲成年人片| 亚洲欧美日韩色图| 欧美成人区| 久久国产亚洲偷自| 久久伊人色| 亚洲天堂网在线播放| 国产拍在线| 五月天在线网站| 97在线碰| 国产精品视频公开费视频| 亚洲欧美不卡中文字幕| 真实国产乱子伦高清| 色呦呦手机在线精品| 国产麻豆另类AV| 亚洲人成亚洲精品| 欧美中文字幕一区| 香蕉伊思人视频| 亚洲国产中文在线二区三区免| www.99精品视频在线播放| 伊人中文网| 欧美精品H在线播放| 红杏AV在线无码| 国产成人h在线观看网站站| 国产H片无码不卡在线视频| 亚洲无限乱码| 青草娱乐极品免费视频| 中文字幕无码电影| 夜夜爽免费视频| 狠狠v日韩v欧美v| 99国产在线视频| 国产农村妇女精品一二区| 国产成人精品高清不卡在线| 国产男人的天堂| 无码'专区第一页| 亚洲欧美日韩动漫| 99视频精品在线观看| 欧美yw精品日本国产精品| 色综合日本| 国产成人av大片在线播放| 波多野结衣久久高清免费| 中文字幕伦视频| 亚洲AV无码久久精品色欲| 国产成人久久综合一区| 在线网站18禁| 精品伊人久久久香线蕉 | 国产视频一二三区| 久久久精品无码一二三区| 日韩美毛片| av在线5g无码天天| 波多野结衣AV无码久久一区| 国产成人资源| 996免费视频国产在线播放| 亚洲欧美在线看片AI| 精品无码一区二区三区在线视频| 国产欧美精品一区aⅴ影院| 日本草草视频在线观看| 欧美精品H在线播放| 亚洲精品国产自在现线最新| 国产精品99在线观看| 日本精品αv中文字幕| 国内精品免费| 亚洲综合中文字幕国产精品欧美 | 美女国产在线| 免费一级毛片完整版在线看| 欧美h在线观看| 人妻精品久久久无码区色视| 亚洲清纯自偷自拍另类专区| 国产资源免费观看|