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