走進(jìn)手機(jī)應(yīng)用軟件開發(fā)
中國(guó)移動(dòng)的手機(jī)應(yīng)用軟件商店Mobile Market今天上線了,這是繼蘋果、Sun、Google、之后又一個(gè)推出在線手機(jī)應(yīng)用軟件商店的巨頭;據(jù)悉,中國(guó)移動(dòng)的Mobile Market將與軟件開發(fā)者分成70%;蘋果App Stor的成功向我們表明了手機(jī)軟件開發(fā)的大好前景,那么開發(fā)手機(jī)軟件需要哪些知識(shí)?如何走進(jìn)手機(jī)應(yīng)用軟件的開發(fā)呢?
1 手機(jī)軟件的運(yùn)行環(huán)境
1.1 概述
手機(jī)可以被看作袖珍的計(jì)算機(jī)。它有CPU、存儲(chǔ)器(flash、RAM)、輸入輸出設(shè)備(鍵盤、顯示屏、USB和串口)。它還有一個(gè)更重要的I/O設(shè)備, 那就是空中接口。手機(jī)通過(guò)空中接口協(xié)議(例如GSM、CDMA、PHS等)和基站通信,既可以傳輸語(yǔ)音、也可以傳輸數(shù)據(jù)。
手機(jī)的CPU一般不是獨(dú)立的芯片,而是基帶處理芯片的一個(gè)單元,也稱作CPU核?;鶐幚硇酒鞘謾C(jī)的核心,它不僅包含CPU核、DSP核這些比較通用的單元,還包含通信協(xié)議處理單元。通信協(xié)議處理單元和手機(jī)協(xié)議軟件一起完成空中接口要求的通信功能。
隨著芯片技術(shù)的不斷發(fā)展,越來(lái)越多的外圍電路可以被集成到基帶處理芯片中,例如BAP,即基帶模擬處理器。這樣手機(jī)才可能越做越小、越做越便宜。
1.2 單CPU和雙CPU
很多手機(jī)只有一個(gè)CPU,也就是基帶處理芯片中的CPU核。在這個(gè)CPU上既要跑通信協(xié)議,又要實(shí)現(xiàn)用戶界面(稱作UI或MMI)。當(dāng)然DSP會(huì)分擔(dān)一些計(jì)算量繁重的工作,例如語(yǔ)音編解碼、安全層的各種算法等。
在市場(chǎng)推動(dòng)下,手機(jī)功能在不斷發(fā)展。攝像頭、MP3、藍(lán)牙這些功能可以依靠硬件,對(duì)CPU的壓力還不是很大,但java虛擬機(jī)、嵌入式瀏覽器等應(yīng)用軟件就會(huì)對(duì)CPU資源有較高的要求。
單CPU的首要任務(wù)是完成通信協(xié)議。通信協(xié)議軟件有著很精確的定時(shí)要求,如果這個(gè)CPU還要兼顧很多應(yīng)用軟件的話,就難免吃力。于是雙CPU手機(jī)應(yīng)運(yùn)而生。
顧名思義,雙CPU手機(jī)就是有兩個(gè)CPU的手機(jī),一個(gè)CPU專心把通信協(xié)議做好,另一個(gè)CPU負(fù)責(zé)UI、java虛擬機(jī)、嵌入式瀏覽器等應(yīng)用功能。兩個(gè)CPU可以做在一個(gè)芯片里面,也可以分開。
市場(chǎng)上的實(shí)際情況是,很多手機(jī)設(shè)計(jì)公司(Design House)沒(méi)有基帶處理芯片的開發(fā)能力,他們購(gòu)買國(guó)外公司的手機(jī)模塊,自己在外面再加一塊CPU。模塊跑通信協(xié)議,自己加的CPU跑UI和應(yīng)用軟件,兩者通過(guò)串行口通信。很多Design House也會(huì)購(gòu)買國(guó)外方案商的開發(fā)板級(jí)方案,自己做PCB、軟件上改改UI和外設(shè)驅(qū)動(dòng)。
市場(chǎng)上的智能手機(jī)基本上全是雙CPU方案,什么WindowsMobile、Symbian、Android、Apple OS、嵌入式Linux全是運(yùn)行在第二塊CPU上的。這些商業(yè)操作系統(tǒng)無(wú)法和無(wú)線通 信協(xié)議軟件集成到一塊CPU上。雙CPU的手機(jī)功能比較多,但它們一般體積大,耗電多,成本高?,F(xiàn)在市場(chǎng)上的大部分手機(jī)還是單CPU的。
目前的大部分手機(jī)應(yīng)用,例如Java、BREW、WAP、郵件、攝像頭、閃存、MP3、藍(lán)牙,在單CPU方案里都能實(shí)現(xiàn)。我認(rèn)為不管3G、4G如何發(fā)展, 小巧、實(shí)用、低成本的單CPU方案總會(huì)占據(jù)較大的市場(chǎng)份額。微軟在單CPU方案的手機(jī)市場(chǎng)還沒(méi)有立足之地,又怎么談的上什么***方向呢?
本文主要介紹單CPU手機(jī),大多數(shù)論述也適用于雙CPU方案的通信CPU。
1.3 3G和4G
3G和4G是指第三代、第四代無(wú)線通信技術(shù),對(duì)手機(jī)而言,它們改進(jìn)的是空中接口的效率,空中接口能以更大的帶寬傳送數(shù)據(jù)。通過(guò)手機(jī)無(wú)線上網(wǎng)的速度會(huì)更快。這和話音業(yè)務(wù)、手機(jī)應(yīng)用軟件沒(méi)有直接的聯(lián)系。
當(dāng)然,手機(jī)的嵌入式數(shù)據(jù)業(yè)務(wù)由于更高的帶寬,會(huì)產(chǎn)生更多的可能性。不過(guò)這些可能性的實(shí)現(xiàn)還是會(huì)受到手機(jī)輸入慢、顯示屏小等條件的制約。
2 手機(jī)軟件的組成
2.1 概述
手機(jī)軟件和PC機(jī)軟件一樣從中斷向量表開始,因?yàn)楸容^小,看上去更加清晰。中斷向量表的***個(gè)跳轉(zhuǎn)指令當(dāng)然是跳到復(fù)位的處理程序,后面是中斷處理、錯(cuò)誤處 理的跳轉(zhuǎn)指令。一上電,手機(jī)就跳轉(zhuǎn)到復(fù)位的處理程序,開始檢查內(nèi)存、初始化C運(yùn)行環(huán)境,然后創(chuàng)建***個(gè)任務(wù)。這個(gè)任務(wù)會(huì)按順序創(chuàng)建、啟動(dòng)其它任務(wù)。絕大多 數(shù)手機(jī)程序都是多任務(wù)的,但也有一些小靈通的協(xié)議棧是單任務(wù)的,沒(méi)有操作系統(tǒng),它們的主程序輪流調(diào)用各個(gè)軟件模塊的處理程序,模擬多任務(wù)環(huán)境。
手機(jī)軟件可以粗略地分成啟動(dòng)模塊、操作系統(tǒng)、協(xié)議棧、數(shù)據(jù)業(yè)務(wù)、本地存儲(chǔ)、驅(qū)動(dòng)程序、用戶界面和其它應(yīng)用。啟動(dòng)模塊前面已經(jīng)說(shuō)過(guò)了,下面簡(jiǎn)單介紹其它部分。
2.2 操作系統(tǒng)
操作系統(tǒng)在手機(jī)軟件只占很小一部分。它的主要功能就是提供多任務(wù)調(diào)度、通信機(jī)制。有的操作系統(tǒng)會(huì)提供動(dòng)態(tài)內(nèi)存分配,定時(shí)函數(shù),但這些都不是必須的。例如需要?jiǎng)討B(tài)內(nèi)存分配的模塊,可以自己管理一個(gè)內(nèi)存池,這樣更易于隔離模塊和預(yù)測(cè)內(nèi)存需求。
大多數(shù)手機(jī)的操作系統(tǒng)都是一個(gè)很小的內(nèi)核,例如REX、HIOS等。高通REX的源代碼連C代碼加匯編也不過(guò)一千多行,編譯后不過(guò)是2、3K的代碼量。而一般手機(jī)軟件有幾百到上千個(gè)源文件、超過(guò)一百萬(wàn)行的代碼。
2.3 協(xié)議棧
協(xié)議棧是手機(jī)軟件最復(fù)雜的部分,它的復(fù)雜性在于它和基帶處理芯片的設(shè)計(jì)密切相關(guān)。只有具備芯片設(shè)計(jì)能力的企業(yè)才可能開發(fā)協(xié)議棧。協(xié)議棧會(huì)使用基帶處理芯片的所有資源。
2.4 數(shù)據(jù)業(yè)務(wù)
數(shù)據(jù)業(yè)務(wù)主要有兩種:在前一種,手機(jī)相當(dāng)于一個(gè)調(diào)制解調(diào)器,PC機(jī)通過(guò)手機(jī)上網(wǎng),網(wǎng)絡(luò)協(xié)議全在PC機(jī)上,手機(jī)提供數(shù)據(jù)鏈路。另一種就是嵌入式數(shù)據(jù)業(yè)務(wù),手機(jī)內(nèi)部包含TCP/IP/PPP等協(xié)議,有時(shí)還要實(shí)現(xiàn)HTTP和嵌入式瀏覽器。
2.5 本地存儲(chǔ)
手機(jī)都有本地存儲(chǔ)功能,存儲(chǔ)電話本、短消息、用戶設(shè)定等。一般手機(jī)都有一個(gè)基于flash的文件系統(tǒng)。早期的手機(jī)存儲(chǔ)是基于EEPROM的。
2.6 驅(qū)動(dòng)程序
硬件驅(qū)動(dòng)一般指外設(shè)驅(qū)動(dòng),不過(guò)有的外設(shè)已經(jīng)被集成到基帶處理芯片中了。驅(qū)動(dòng)程序包括鍵盤、電源管理模塊、LCD、flash、RTC、串口、USB、SIM卡或UIM卡、射頻驅(qū)動(dòng)等。
2.7 用戶界面
用戶界面(UI)又稱作人機(jī)界面(MMI),它負(fù)責(zé)和用戶的交互,在必要的時(shí)候調(diào)用其它模塊的功能。除了手機(jī)的必備功能外,用戶界面也可能包含一些相對(duì)獨(dú)立的應(yīng)用程序,例如日程表、游戲等。
2.8 其它應(yīng)用
其它應(yīng)用包括Java虛擬機(jī)、WAP瀏覽器、郵件軟件等,是一些比較大,又相對(duì)獨(dú)立的應(yīng)用模塊。
基本上講完了。大家肯定看得挺沒(méi)意思吧。這些程序和微軟的longhorn、metedata有什么關(guān)系呢?手機(jī)程序絕大部分是用C語(yǔ)言寫的。但對(duì)于做應(yīng)用軟件的程序員要求具備面向?qū)ο蟆⒃O(shè)計(jì)模式的思維能力,然后用C語(yǔ)言實(shí)現(xiàn)出來(lái)。
高通的BREW就是用C語(yǔ)言硬生生地模仿C++,弄出很多奇怪的宏。一般應(yīng)用軟件的開發(fā)不用這么死板,但對(duì)各種軟件設(shè)計(jì)方法的了解還是必要的。
3 手機(jī)的核心技術(shù)
手機(jī)的核心技術(shù)是芯片和協(xié)議棧,兩者是密不可分的。芯片設(shè)計(jì)需要協(xié)議棧來(lái)驗(yàn)證,協(xié)議棧必須充分發(fā)揮出芯片的功能。芯片的CPU核、DSP核都可以買到現(xiàn)成的單元,但通信協(xié)議部分就需要自己設(shè)計(jì)了。手機(jī)比較難做好的是耗電量、惡劣信號(hào)環(huán)境的性能等。
4 第三方軟件
4.1 原理
“第三方軟件”這個(gè)詞的含義比較寬泛。本文用它來(lái)指代不是硬編碼在手機(jī)里,而是可以通過(guò)數(shù)據(jù)線或網(wǎng)絡(luò)下載到手機(jī)上,可以裝載、運(yùn)行,也可以刪除的軟件。
前面講到的軟件都是完整程序的各個(gè)部分。這些部分會(huì)被放到一起編譯,產(chǎn)生一個(gè)二進(jìn)制文件,通過(guò)JTAG口(升級(jí)時(shí)可以用串口)下載到手機(jī)的flash中。手機(jī)一上電,就會(huì)從指定地址開始運(yùn)行。這個(gè)地址的內(nèi)容就是跳轉(zhuǎn)到復(fù)位處理程序的跳轉(zhuǎn)指令。哈哈,又講回頭了。
第三方軟件是指手機(jī)可以通過(guò)數(shù)據(jù)線或者網(wǎng)絡(luò)下載一些可執(zhí)行文件到文件系統(tǒng)中。然后有一個(gè)裝載器可以執(zhí)行這些文件。這樣第三方就可以開發(fā)一些應(yīng)用程序,下載到手機(jī)中來(lái)擴(kuò)充手機(jī)功能。
這些可執(zhí)行文件現(xiàn)在主要有兩種格式:java程序和BREW程序。java程序需要java虛擬機(jī)裝載運(yùn)行。BREW程序是一個(gè)很奇怪的東西,它實(shí)際就是用與編譯手機(jī)程序相同的編譯器編譯出來(lái)的目標(biāo)代碼。這些目標(biāo)代碼必須是可以重新定位的,即不能包含全局和靜態(tài)變量。
裝載器將程序?qū)?zhí)行權(quán)傳給給BREW程序,一種聽上去更安全的說(shuō)法是調(diào)用BREW程序的入口函數(shù)。這個(gè)入口函數(shù)的位置在文件中是固定的。裝載器在調(diào)用 BREW程序的入口函數(shù)時(shí)會(huì)傳入一個(gè)地址。通過(guò)這個(gè)地址,BREW程序能夠順藤摸瓜,找到系統(tǒng)提供的各種API的地址,它通過(guò)這些API訪問(wèn)手機(jī)的顯示、 通信等功能。
java程序基本上是平臺(tái)無(wú)關(guān)的,針對(duì)各種平臺(tái)設(shè)計(jì)的java虛擬機(jī)隔離了平臺(tái)的大部分特性,除了廠家特意提供的一些OEM功能。BREW程序顯然是平臺(tái)相關(guān),換一個(gè)CPU,就不認(rèn)識(shí)原來(lái)的目標(biāo)碼了。
4.2 其它
除了java、BREW外,Windows CE、SmartPhone、WindowsMobile、Symbian、嵌入式Linux這些商業(yè)操作系統(tǒng)當(dāng)然可以提供各種創(chuàng)建第三方程序的方法。在 這些環(huán)境寫程序和在PC平臺(tái)寫程序很相近,基本上體會(huì)不到嵌入式編程的特點(diǎn),只是屏幕小一些,輸入麻煩一些。
這些第三方軟件不是必需的。手機(jī)在3G的市場(chǎng)中只占了一個(gè)較小的部分,網(wǎng)絡(luò)是大頭。而第三方軟件相對(duì)于手機(jī)來(lái)說(shuō),所占的份額就更小了。
5 結(jié)束語(yǔ)
需要說(shuō)明:關(guān)于以后的市場(chǎng)究竟以單CPU手機(jī)為主,還是以雙CPU手機(jī)為主的問(wèn)題,我傾向于單CPU手機(jī),但這只是我個(gè)人觀點(diǎn)。實(shí)際市場(chǎng)會(huì)怎么發(fā)展,殊難預(yù)料。
對(duì)于一個(gè)芯片兩個(gè)CPU核的方案,從軟件角度看我是很贊成的。將應(yīng)用軟件和協(xié)議軟件分開,協(xié)議軟件可以更加穩(wěn)定,應(yīng)用軟件可以自由發(fā)展,使用大量在PC環(huán)境已經(jīng)成熟的技術(shù)。
【編輯推薦】