MTK手機(jī)開發(fā)入門教程_第1頁
MTK手機(jī)開發(fā)入門教程_第2頁
MTK手機(jī)開發(fā)入門教程_第3頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、開發(fā)環(huán)境設(shè)立1、開發(fā)主機(jī)要求及所需工具:操作系統(tǒng):Windows2000,WinXP.推薦Windows2000withSP2orlater.編譯器:ADS(ArmDeveloperSuite)v1.2Build842Perl解析:ActivePerl,推薦使用ActivePerl5.6.1版本仿真工具:MTKPCSimulator跟蹤工具:Catcher_L1v3.10.01,從串口輸出調(diào)試信息,只做普通UI應(yīng)用的話,大致不會(huì)用到,用PC仿真工具就好了燒錄工具:FlashTool_UIv3.1.05或FlashTool_v3.0844.00其他:PL2303_Driver_XP2KV2041

2、02,這是下載線用到的USB串口驅(qū)動(dòng),以前機(jī)器上裝過PL2303驅(qū)動(dòng)的,建議改用這個(gè),否則可能會(huì)有藍(lán)屏的問題。2、開發(fā)環(huán)境建立過程:新建一個(gè)目錄,英文的好了,否則有些工具不認(rèn)識(shí)中文路徑,這里以E:MTK_P1300為例說明,下面我用文字和圖片簡(jiǎn)單說明下安裝過程,更詳細(xì)的安裝過程可以看壓縮文件“手機(jī)開發(fā)板C語言開發(fā)視頻.rar”中的Flash文件“P1300_Build_Env.swf”。1) 安裝ADS1.2解壓文件huayu109_ads1.2.rar到某個(gè)目錄,比如說解壓到“E:MTK_P1300”,解壓完后運(yùn)行“E:MTK_P1300ADS1.2Setup.exe”,一路按下一步,最后安

3、裝License時(shí)選定文件“E:MTK_P1300ADS1.2CRACKlicense.dat”,然后接著一路下一步直到安裝完。安裝完后刪掉目錄“”,節(jié)省磁盤空間。2) 安裝ADS補(bǔ)丁運(yùn)行huayu102_ADS12_Patch_Windows.rar壓縮文件中的ADS_Patch_Window.exe,這是個(gè)自解壓的壓縮文件,選Unzip解壓到上一步ADS的安裝目錄(缺省是C:ProgramFilesARMADSv1_2),解壓過程中如果問到是否覆蓋,全部選覆蓋好了。3) 安裝腳本解釋器Perl直接運(yùn)行壓縮包huayu106_perlzip.rar里面擴(kuò)展名為msi的安裝文件,缺省安裝就好,

4、一路Next,呵呵。上述幾步完成后,編譯環(huán)境基本建立,此時(shí)可以開一個(gè)dos窗(開始菜單-運(yùn)行-輸入cmd-確定)看一下,安裝正常應(yīng)該能順利執(zhí)行以下命令,如下圖:注意看版本號(hào),應(yīng)該是ADS1.2Build842,不是的話可能沒打補(bǔ)丁,或補(bǔ)丁打的位置不對(duì),請(qǐng)看第2步ADS補(bǔ)丁部分的說明并重新打一次,直到版本號(hào)對(duì)為止,哈哈。這是perl解釋器的運(yùn)行畫面。注1:上述安裝過程會(huì)自動(dòng)創(chuàng)建編譯環(huán)境所需的環(huán)境變量,如果發(fā)現(xiàn)編譯不正常了,可能是安裝了其他編譯工具導(dǎo)致沖突,這時(shí)建議查看下系統(tǒng)環(huán)境變量,把Perl和ADS的安裝目錄調(diào)到最前面,同時(shí)從path中去掉可能會(huì)產(chǎn)生沖突的編譯工具鏈的路徑側(cè)如winavr),如

5、下圖所示(我是安裝到D盤滴,缺省是C盤,不過我C盤幾乎被我塞滿了):系統(tǒng)展性廳岡環(huán)境變量計(jì)茸機(jī)君硬件系蛻還原自動(dòng)更新垂進(jìn)廳大條數(shù)改動(dòng),保必須作舟管理然蔓錄.莒規(guī)性能現(xiàn)覺效果處理船計(jì)劃,內(nèi)存使用"u圧虛擬內(nèi)存用戶配盍立件與愎登錄有關(guān)的貞面設(shè)置設(shè)逼(E)啟動(dòng)和觀陣恢當(dāng)系蜿啟動(dòng),丟舷啊調(diào)試信息幵境吏雖Q3J153d)時(shí)逞報(bào)告爼)hdniiusiralar的用戶蓋墾迪疽6DDKEDOTc:NTDDKincludeC:ProgranFilesNicrosoift.Vis.libC:SFrogranFilesVNicfVis.MSDtDirFilesNie¥4ii6ftVis.p生th

6、C:FrosranFilesl!icT4i4iftVis.mrarc-LiAEB.-Bpm3C*JL:系飯變呈盤)?X|值FAIE_PKKRAMSrADS_EDOTD:FjfdMMFi11sNtattffjir«phie.rathD.'iFsrlVbLftV.1'Fropr處FileiV.FATHEKT.COM;EKE:9XTCUB:.VBS;.VBE:parlinterp9;FrosrviFLlasMlantwrKphice“乂確定取消),還有一種辦法,就是改如果嫌改path麻煩(因?yàn)橐玫狡渌幾g工具鏈的時(shí)候還得改回去make.bat批處理,具體見注4中相關(guān)說明。

7、注2:如果安裝ADS時(shí),改變了默認(rèn)安裝路徑,需要修改源碼中的設(shè)置,源碼目錄樹解壓過程見模擬器編譯環(huán)節(jié)相關(guān)介紹。make'Option.makifeq($(strip$(COMPILER),ADS)DIR_ARM=c:progra1armadsv1_2#修改這里DIR_ARM:=$(strip$(DIR_ARM)DIR_TOOL=$(DIR_ARM)binDIR_ARMLIB=$(DIR_ARM)libDIR_ARMINC=$(DIR_ARM)ineludeendif比如改裝到D盤了,這里把紅色部分“c”改成“d”就好了4)代碼編輯環(huán)境運(yùn)行壓縮文件huayu108_SourceInsig

8、ht3.5.rar中的安裝文件安裝即可。至于編輯器,這個(gè)看個(gè)人喜好了,不過SourceInside看代碼蠻方便的。5)PC機(jī)模擬器模擬器MTKPCSimulator是用來在PC上仿真調(diào)試用的,要安裝VC6SP6(同時(shí)要安裝Uuicode靜態(tài)和動(dòng)態(tài)庫,沒有裝Unicode庫的可以用“huayu103_MTK模擬器DLL補(bǔ)丁.zip”中的庫,拷到系統(tǒng)目錄“windir%system32”下即可)。我機(jī)器上的VC是有裝Unicode庫的,沒裝過Unicode庫的如果在模擬器編譯或運(yùn)行中出現(xiàn)問題,建議重裝下VC6,安裝時(shí)勾選Unicode庫,并打上相關(guān)補(bǔ)丁到SP6。模擬器能模擬真機(jī)的大部分行為,這樣能

9、給調(diào)試帶來很大便利,不需要每次改動(dòng)都要燒錄。模擬器要從源碼編譯,解壓壓縮包“huayu201_P1300_V1.7_Release.rar”里面的文件“HUAYU_P1300_V1.7_Release.rar”至U目錄“E:MTK_P1300”,此時(shí)會(huì)出現(xiàn)目錄“E:MTK_P1300P1300_V1.7_Release”,這就是P1300的代碼目錄樹了;接著打上最新的補(bǔ)丁,解壓壓縮包“huayu203_P1300_V1.7_Release_patch.rar”里面的壓縮文件“HUAYU_P1300_V1.7_Release_patch.rar”到目錄“E:MTK_P1300P1300_V1.7

10、_Release”,解壓時(shí)選擇全覆蓋以替換被修改過的文件,打補(bǔ)丁之前對(duì)目錄樹里面的文件進(jìn)行修改過的,需要手動(dòng)再加上去。編譯PC仿真器之前需要先把剛才上面得到的目錄樹build一次,開一個(gè)dos窗,盤符和目錄轉(zhuǎn)到代碼目錄樹對(duì)應(yīng)的盤符和目錄,例如:E:cdE:MTK_P1300P1300_V1.7_Releasemakenew注3:第一次make的時(shí)候要用"makenew”,makenew的時(shí)間比較長(zhǎng)(慢的機(jī)器搞不好要2小時(shí)以上),編譯過程中間會(huì)出現(xiàn)一些文件找不到的信息,只要編譯過程沒意外終止,那些信息可以忽略。編譯日志文件位置:,要查看編譯過程有啥問題就看這個(gè)目錄下的文件了;生成的bi

11、n文件位置:buildNEOTEL25_06B*.bin,下載燒錄就是燒bin文件。這里順帶介紹下build的命令格式:makenew清除后重新編譯整個(gè)項(xiàng)目makeresgen重新生成資源makeremake重新編譯鏈接項(xiàng)目makeviewlogxxx查看模塊xxx的編譯日志make查看可以用make選項(xiàng)幫助信息注4:如果機(jī)器上裝了其他gcc編譯工具鏈(比如winavr之類)的話可能要手動(dòng)改下Path,否則編譯會(huì)出錯(cuò),修改Path的方法見注1,也可以修改批處理文件“E:MTK_P1300P1300_V1.7_Releasemake.bat",在“perlmake2.pl%*”之前加上

12、下面兩句:setPERL5LIB=D:perllibsetPATH=D:perlbin;d:progra1armadsv1_2bin;E:MTK_P1300P1300_V1.7_Releasetools;c:windows'system32;c:windows;c:windows'system注意,上面的路徑是我機(jī)器上的,不是缺省安裝路徑,要根據(jù)自己的實(shí)際安裝路徑做修改。下面開始編譯PC仿真器了,用VC6打開工程文件“E:MTK_P1300P1300_V1.7_ReleaseplutommimmiPC_Simulator.dsw”,然后開始編譯,編譯時(shí)間比較長(zhǎng),具體看機(jī)器配置了

13、,這時(shí)又可以干點(diǎn)別的啥了,呵呵。因?yàn)榉抡嫫鞴こ躺婕拔募^多,編譯費(fèi)時(shí),建議編譯過程中電腦上少開窗口,特別是網(wǎng)絡(luò)類的,如QQ,有時(shí)會(huì)發(fā)現(xiàn)開QQ后,編譯過程中VC會(huì)掛死,呵呵。有可能是開QQ后防火墻過濾網(wǎng)絡(luò)數(shù)據(jù)占用較多系統(tǒng)資源,如果發(fā)現(xiàn)VC編譯特別慢或干脆掛死,可以重啟動(dòng)一下電腦,只開必要的窗口,然后開始編譯。如果編譯過程中發(fā)現(xiàn)怪異的問題,如:incomingstringiddef.h(120):errorC2059:syntaxerror:'constant'或者errorC2065:'STR_CM_REDIAL':undeclaredidentifier之類這個(gè)

14、時(shí)侯你可能需要看一下你VC相關(guān)路徑的設(shè)置順序,如下圖:把VC原本的頭文件路徑調(diào)整到最前面,我剛開始編譯的時(shí)候SDK的頭文件在前面,編譯總是通不過,改一下就好了,庫也一樣都調(diào)整下比較保險(xiǎn),呵呵。6)Tracer跟蹤工具解壓文件P1300_Build_Guide.rar至UE:MTK_P1300,然后在文件管理器進(jìn)入目錄“E:MTK_P1300P1300_Build_Guide”,接著解壓Catcher_L1_v3.10.01.zip到當(dāng)前目錄下的Catcher_L1_v3.10.01子目錄,進(jìn)入子目錄Catcher_L1_v3.10.01,發(fā)送一個(gè)Catcher.exe的快捷方式到桌面。在需要用

15、到TRACE的時(shí)候,在代碼中使用函數(shù)voidkal_prompt_trace(module_typemodd,constkal_char*fmt,.);打印需要查看的信息,使用Catcher跟蹤查看。這個(gè)有點(diǎn)類似Linux的KernelDebug工具,具體使用方法見文檔cather使用手冊(cè).doc,這個(gè)文檔可在壓縮包"huayu101_p1300軟件使用工具及開發(fā)指南.rar”里面找到。7) 燒錄工具解壓文件“E:MTK_P1300P1300_Build_GuideFlashTool_UI_exe_v3.1.05.zip”到當(dāng)前目錄,然后進(jìn)入目錄“E:MTK_P1300P1300_B

16、uild_GuideFlashTool_v3.1.05”,發(fā)送一個(gè)Flash_tool.exe的快捷方式到桌面好了。還有個(gè)下載工具FlashTool_v3.0844.00.rar,也是不用安裝,解壓后直接用的,據(jù)說燒錄速度比上面那個(gè)快。具體使用方法見文檔flash_tool_MT平臺(tái)使用教程.doc,這個(gè)文檔可在壓縮包“huayu101_p1300軟件使用工具及開發(fā)指南.rar”里面找到。USB串口下載線驅(qū)動(dòng)運(yùn)行壓縮文件“E:MTK_P1300P1300_Build_GuidePL2303_Driver_XP2K_v204102.zip”里面的可執(zhí)行文件進(jìn)行安裝,一路下一步,這里不再贅述。He

17、lloWorld上面一節(jié)我們建立好了開發(fā)環(huán)境,現(xiàn)在是時(shí)候?qū)崙?zhàn)一把了,在進(jìn)行實(shí)質(zhì)性的項(xiàng)目開發(fā)之前,我們先來了解下P1300上寫程序的一般性做法。從“HelloWorld”開始吧,有句笑話講:“會(huì)編程就是會(huì)HelloWorld,編程高手就是會(huì)寫很多個(gè)HelloWorld”,雖然是句笑話,但是細(xì)想也是有道理的,麻雀雖小五臟俱全嘛,掌握了框架,剩下的就無非是些編程技巧的問題了。這和建房子一個(gè)道理,地基打的深不深,框架建的是否合理,決定房屋總體質(zhì)量好不好,其他就是裝修的功夫了,當(dāng)然還有水電線路的鋪設(shè),這涉及到習(xí)慣和技巧了,設(shè)計(jì)不好會(huì)漏水漏電,哈哈。扯遠(yuǎn)了,下面開始HelloWorld。下面為描述上的方便

18、,我們將HelloWorld稱為一個(gè)模塊。首先建立新的模塊目錄,之后把模塊相關(guān)文件都放到這個(gè)目錄下統(tǒng)一進(jìn)行管理,新的模塊一般放到plutommi'MMI下面,這里我們新建一個(gè)目錄“HelloWorld”,然后在模塊目錄“HelloWorld”下再建三個(gè)子目錄:“Inc”、“Src”和“Res”,分別用來存放模塊的頭文件、源文件和資源文件,目錄結(jié)構(gòu)如下圖所示:接著我們?cè)贗nc下創(chuàng)建幾個(gè)頭文件:HelloWorldGprot.h,HelloWorldProt.h,HelloWorldTypes.h,HelloWorldDefs.h,再在Src下創(chuàng)建一個(gè)源文件:HelloWorld.c,關(guān)于

19、文件名和函數(shù)名等的命名標(biāo)準(zhǔn)每個(gè)公司及個(gè)人各有不同,統(tǒng)一就好,否則在進(jìn)行大的項(xiàng)目開發(fā)時(shí)彼此協(xié)同會(huì)遇到問題,有時(shí)候弄不好光這些問題就能折騰你半天甚至數(shù)日或數(shù)月,呵呵。上面幾個(gè)文件的作用我大致講下:HelloWorldGprot.h放這里了HelloWorldProt.hHelloWorldTypes.hHelloWorldDefs.hHelloWorld.c模塊對(duì)外接口,供模塊外部調(diào)用的函數(shù)原型在此申明,模塊內(nèi)部接口就不要模塊內(nèi)部接口,供模塊內(nèi)部調(diào)用的函數(shù)原型在此申明本模塊用到的一些常量、自定義數(shù)據(jù)類型、結(jié)構(gòu)的定義本模塊用到的資源ID定義模塊功能函數(shù)的實(shí)現(xiàn)部分頭文件HelloWorldGprot.

20、h的內(nèi)容大致如下:*#ifndef_HELLOWORLD_GPROT_H#define_HELLOWORLD_GPROT_H#include"PixtelDataTypes.h"#include"HelloWorldTypes.h"externvoidmmi_HelloWorld_entry(void);/*模塊入口,理解成dos程序的main好了*/#endif/*_HELLOWORLD_GPROT_H_*/*頭文件HelloWorldProt.h的內(nèi)容的大致如下:/*#ifndef#define_HELLOWORLD_PROT_H_HELLOWORL

21、D_PROT_H_#include"HelloWorldGprot.h"externvoidmmi_HelloWorld_entry(void);/*本模塊主界面入口例程*/externvoidmmi_HelloWorld_exit(void);/*本模塊主界面退出例程*/#endif/*_HELLOWORLD_PROT_H_*/*/其他幾個(gè)文件的內(nèi)容因模塊功能而異,這里先略過,后面再講。緊接著,我們要修改的相關(guān)系統(tǒng)文件,使這個(gè)模塊成為整個(gè)項(xiàng)目的一部分,需要修改的系統(tǒng)文件如下:makeplutommiplutommi.incmakeplutommiplutommi.pthm

22、akeplutommiplutommi.lis所有mmi部分的頭文件所在目錄的相對(duì)路徑列表所有mmi部分的源文件所在目錄的相對(duì)路徑列表所有mmi部分的源文件(相對(duì)路徑)列表在上述3個(gè)文件里面分別加上我們模塊的對(duì)應(yīng)內(nèi)容,就現(xiàn)在講的HelloWorld而言,所加內(nèi)容如下:makeplutommiplutommi.inc文件追加一行“plutommimmiHelloWorldInc”makeplutommiplutommi.pth文件追加一行“plutommimmiHelloWorldSrc”makeplutommiplutommi.lis文件追加一行“plutommimmiHelloWorldSr

23、cHelloWorld.c”再接著,我們需要增加一個(gè)開關(guān),以決定這個(gè)模塊是否成為最終發(fā)布版本的一部分,這實(shí)際上是一個(gè)編譯開關(guān),需要修改系統(tǒng)文件及相關(guān)的模塊源文件,需要修改的系統(tǒng)文件包括:plutommiCustomerCustResourcePLUTO_MMIMMI_featuresPLUTO.h,這里我們用名字為“_MMI_HELLOWORLD_ENABLED_”這個(gè)開關(guān)好了,在這個(gè)文件里面追加一行:#define_MMI_HELLOWORLD_ENABLED_,同時(shí)在相關(guān)源文件里面用:#ifdef_MMI_HELLOWORLD_ENABLED_#endif來框住相關(guān)代碼行就OK了,當(dāng)不打算

24、將這個(gè)模塊發(fā)布的時(shí)候,注釋掉“#define_MMI_HELLOWORLD_ENABLED_”這一句重新make一次就好了。下面講具體實(shí)現(xiàn)的部分,為了簡(jiǎn)化描述,我們暫時(shí)先將我們的模塊入口掛接到主菜單入口處(后面講到資源的部分可將入口移到某個(gè)新建的子菜單下),修改下文件“plutommimmimainmenumainmenusrcMainMenu.c”中的goto_main_menu函數(shù),如下所示紅色字體部分:voidgoto_main_menu(void)#ifdef_MMI_HELLOWORLD_ENABLED_mmi_HelloWorld_entry();return;#else/此處為之

25、前goto_main_menu的代碼#endif同時(shí)我們需要在文件MainMenu.c中包含頭文件HelloWorldGprot.h,所以再在這個(gè)文件的頭文件包面是HelloWorld.c的內(nèi)容:/*/#include"stdC.h"#include"MMI_Features.h"/*編譯開關(guān)會(huì)出現(xiàn)在這個(gè)由makeupdate生成的文件里面*/#include"L4Dr.h"#include"L4Dr1.h"#include"AllAppGprot.h"#include"Framewo

26、rkStruct.h"#include"GlobalConstants.h"#include"EventsGprot.h"#include"mmiappfnptrs.h"#include"HistoryGprot.h"#include"HelloWorldProt.h"#include"HelloWorldTypes.h"#include"HelloWorldDefs.h"#include"MainMenuDef.h"#inc

27、lude"wgui_categories.h"#include"Unicodexdcl.h"/*模塊入口*/voidmmi_HelloWorld_entry(void)#ifdef_MMI_HELLOWORLD_ENABLED_/*強(qiáng)制退出當(dāng)前屏幕,之后進(jìn)入到我們的模塊了*/*上電缺省是idle屏幕,現(xiàn)進(jìn)入MAIN_MENU_SCREENID屏*/*注意看第二個(gè)參數(shù),這個(gè)是當(dāng)我們模塊被強(qiáng)制退出時(shí)執(zhí)行的一些操作*/EntryNewScreen(MAIN_MENU_SCREENID,mmi_HelloWorld_exit,NULL,NULL);/*關(guān)掉屏幕頂

28、部的狀態(tài)條,我們要用整個(gè)屏幕*/entry_full_screen();/*擦除當(dāng)前背景*/clear_screen();/*移動(dòng)文本輸出光標(biāo)*/gui_move_text_cursor(50,100);/*設(shè)置字體顏色*/gui_set_text_color(UI_COLOR_RED);/*輸出文本到顯示緩沖,注意是Unicode編碼*/gui_print_text(L"Hello,World");/*刷新屏幕顯示,MMI用的是雙緩沖繪圖方式,而且需要顯式刷新*/gui_BLT_double_buffer(0,0,UI_device_width-1,UI_device_h

29、eight-1);/*注冊(cè)一個(gè)按鍵處理,右軟鍵彈起時(shí)返回到之前被我們強(qiáng)制退出的模塊*/SetKeyHandler(GoBackHistory,KEY_RSK,KEY_EVENT_UP);#endif/*模塊出口*當(dāng)我們的模塊被其他模塊強(qiáng)制退出時(shí)會(huì)執(zhí)行這個(gè)函數(shù),*這個(gè)函數(shù)的常見寫法,包括:*1、模塊已申請(qǐng)資源的釋放(如果需要的話),這一步可選*2、手動(dòng)把自己壓棧到窗口(實(shí)際是整個(gè)屏)堆棧里面,*便于強(qiáng)制我們退出的模塊執(zhí)行完后重新把我們叫出來*不像Window的窗口管理是自動(dòng)壓棧的,PlutoMMI需要手動(dòng)壓棧*3、其他一些清理動(dòng)作*/voidmmi_HelloWorld_exit(void)#i

30、fdef_MMI_HELLOWORLD_ENABLED_historycurrHistory;S16nHistory=0;currHistory.scrnID=MAIN_MENU_SCREENID;currHistory.entryFuncPtr=mmi_HelloWorld_entry;pfnUnicodeStrcpy(S8*)currHistory.inputBuffer,(S8*)&nHistory);AddHistory(currHistory);#endif/*/編碼的部分基本上就是這些了,然后我們開始make,這次要用"makeupdate”,基于上述對(duì)相關(guān)系統(tǒng)文

31、件的改動(dòng),makeupdate會(huì)自動(dòng)將剛才的模塊加入到整個(gè)項(xiàng)目中去,同時(shí)也會(huì)更新仿真器VC工程文件,如下圖所示,HelloWorld模塊的相關(guān)文件已經(jīng)被自動(dòng)加入到MMI庫里面了:-勻plutommi+Customer+VendorApp-miniL+lATHandler+£jAsyncEvents;E-口Audio;I+1-I2JBIDI:M®UCPHS+CallManagemEnt飛口Calls;fflOChatApp+_JCodingTemplate+CommonScreens+匚JDataAccounti+ODateTime+_|DebugLevels+Diction

32、ary+EbookReader-E-QEditorPen+_|EmailAppj|用口Extra+CjFramework+LJFunAndGames:E-GUI-曰HelloWbrld!日臼Inc_gHelloWorldDefs.h哥HelloWDrldGprDthjHelloWoddProthSiHelloWorldTypes.hi自曰SrcSHelloWorld.c后續(xù)的make,如果是不涉及到系統(tǒng)相關(guān)文件的修改,用"makeremake”就可以了,以節(jié)省編譯時(shí)間,因?yàn)閙ake次太耗時(shí)間了。注意:對(duì)于仿真程序的編譯,“makeupdate”似乎缺少一些處理,導(dǎo)致可能還需要手工在文

33、件“plutommimmiGlobalSimulatorPathDef”中追加一行,以便模塊的頭文件能被順利找到,如下所示:/I".HelloWorldlnc"好,現(xiàn)在編譯仿真程序開始看下效果,編譯(makeupdate會(huì)清除掉仿真程序之前編譯的中間文件,這樣仿真程序會(huì)整個(gè)重新編譯)完后運(yùn)行仿真器程序,如下圖所示,點(diǎn)選File->NetworkSimulator啟動(dòng)仿真,啟動(dòng)后手機(jī)模擬器進(jìn)入Idle畫面,點(diǎn)選手機(jī)模擬畫面上的“菜單”,就進(jìn)入到我們的HelloWorld了,而不是之前的主菜單,然后點(diǎn)右按鈕,畫面回到Idle畫面。FileToolsHelpfxHTKSim

34、ulatorSaveWindowPositionNetworkSimulatorExit1)g)至此,HelloWorld基本完成,這是一個(gè)相對(duì)完整的模塊框架,在此基礎(chǔ)之上我們可以逐步開始進(jìn)入真正有意義的項(xiàng)目開發(fā)了。三、使用資源我們知道,很多時(shí)候我們需要應(yīng)付來自不同國(guó)家和地區(qū)客戶的需求,他們使用的語言編碼不一樣,但實(shí)際上對(duì)產(chǎn)品功能的要求是基本相同的;此外即便是同一種語言,客戶的個(gè)性化需求(例如外觀換皮膚)也要求我們有相應(yīng)手段來處理和產(chǎn)品業(yè)務(wù)邏輯關(guān)系不是很密切的產(chǎn)品表現(xiàn)手段,大多數(shù)時(shí)候,這些東西涉及到:字符串、圖標(biāo)、圖片、菜單、字庫、主題、聲音等,也就是我們常說的資源,做過多語言版本軟件的朋友應(yīng)

35、該對(duì)此深有體會(huì)。一般來講VC使用資源動(dòng)態(tài)庫來解決這個(gè)問題,那么在MTK平臺(tái)上一般是怎么解決的呢,我們一起來看下。1、資源ID在進(jìn)入實(shí)際編碼前,讓我們先來看看MTK平臺(tái)是如何管理資源的。MTK平臺(tái)大致將資源分為以下幾類:字符串、菜單、圖片、字庫、主題、聲音、屏幕,所有資源統(tǒng)一編碼管理,對(duì)于同一類型的資源,每個(gè)資源有全系統(tǒng)唯一的編號(hào),也就是資源ID,字符串資源和其他資源稍有不同,同一個(gè)語義的不同語言版本字符串共用同一個(gè)字符串資源ID,系統(tǒng)自動(dòng)根據(jù)當(dāng)前語言設(shè)定提取對(duì)應(yīng)語言版本的字串。此外,屏幕是一種平常我們Windows開發(fā)中不多見的一種資源,這里我們可以簡(jiǎn)單的理解成Windows的窗口句柄好了。為

36、了不讓系統(tǒng)各個(gè)模塊的資源ID彼此重疊從而導(dǎo)致混亂,系統(tǒng)提供專門的宏來處理,并將相關(guān)的定義統(tǒng)一放到同一個(gè)文件里面便于管理。具體來講,這個(gè)文件是"plutommimmilnc'MMIDataType.h”,在開始添加實(shí)際資源之前,我們需要大致估計(jì)一個(gè)安全值,這個(gè)值代表我們可能用到的資源最大數(shù),注意這個(gè)最大數(shù)并不是我們用到的所有資源的總數(shù),而是某一類資源,因?yàn)椴煌愋偷馁Y源其資源ID是允許重復(fù)的,比如說我們總共要用到20個(gè)字符串,10張圖片,1個(gè)菜單項(xiàng),那么這個(gè)最大數(shù)是20,一般會(huì)再留一些可擴(kuò)展的空間,就HelloWorld模塊而言,最大數(shù)取100足夠了(當(dāng)然了,這個(gè)數(shù)后面還可以再

37、改的)。最大值取好后,我們就可以著手向系統(tǒng)申報(bào)我們的資源ID空間了,修改文件“plutommimmiIncMMIDataType.h”如下所示紅色字體部分,這樣系統(tǒng)就預(yù)留了100個(gè)全系統(tǒng)唯一的資源ID給我們了,注意,是每一種資源都有100個(gè)可用的資源ID。typedefenumRESOURCE_BASE_RANGE(MAIN_MENU,600),RESOURCE_BASE_RANGE(HELLOWORLD,100),RESOURCE_BASE_ENUM;/*MainMenu*/#defineMAIN_MENU_BASE(U16)RESOURCE_BASE_MAIN_MENU)#defineMA

38、IN_MENU_BASE_MAX(U16)RESOURCE_BASE_MAIN_MENU_END)RESOURCE_BASE_TABLE_ITEM(MAIN_MENU)/*HelloWorld*/#defineHELLOWORLD_BASE(U16)RESOURCE_BASE_HELLOWORLD)#defineHELLOWORLD_BASE_MAX(U16)RESOURCE_BASE_HELLOWORLD_END)RESOURCE_BASE_TABLE_ITEM(HELLOWORLD)好,現(xiàn)在我們有自己的資源ID空間了,之前我們有暫借MAIN_MENU的屏幕ID資源,現(xiàn)在用回我們自己的,增加

39、相關(guān)定義到HelloWorldDefs.h,現(xiàn)在HelloWorldDefs.h看起是這樣:/*/#ifndef_HELLOWORLD_DEFS_H_#define_HELLOWORLD_DEFS_H_typedefenumSCR_HELLOWORLD=HELLOWORLD_BASE+1,SCREENID_LIST_HELLOWORLD;#endif/*_HELLOWORLD_DEFS_H_*/*/接著修改模塊入口函數(shù)mmi_HelloWorld_entry,見紅色字體部分,如下所示:EntryNewScreen(SCR_HELLOWORLD,mmi_HelloWorld_exit,NULL,

40、NULL);屏幕ID資源是一種最簡(jiǎn)單的資源,就是一個(gè)數(shù)值,定義完就可以使用了,其他資源相對(duì)復(fù)雜,需要有一個(gè)生成的過程,下面我們接著看資源的生成。2、資源的生成限于篇幅,這里我們主要講常用的3種資源:字符串、圖片和菜單。首先,我們來看這些資源是如何被生成的,后面我們?cè)僦v如何使用這些資源。MTK平臺(tái)的資源是通過一個(gè)叫mtk_resgenerator.exe的程序生成的,這個(gè)程序位于目錄plutommiCustomerResGenerator下,是個(gè)臨時(shí)生成的可執(zhí)行文件,每次項(xiàng)目相關(guān)資源被修改,該程序都要重新編譯,實(shí)際上這個(gè)程序是由一系列需要自有資源的模塊根據(jù)一定的資源生成規(guī)則將各自的資源生成代碼組

41、合而成的。資源生成相關(guān)的代碼統(tǒng)一放在同一個(gè)目錄下面,因此我們要給自己的模塊添加資源,只需要在這個(gè)目錄下建立自己的資源生成.c文件,并按照指定的生成規(guī)則編寫代碼即可。具體來講,這個(gè)目錄就是plutommiCustomerCustResourcePLUTO_MMIRes_MMI。注意,這個(gè)目錄下不要放其他不相關(guān)的.c或.cpp源文件,因?yàn)榫幾g腳本會(huì)自動(dòng)將這個(gè)目錄下的所有源文件作為mtk_resgenerator.exe的一部分來處理。好,下面開始資源生成相關(guān)的編碼。我們繼續(xù)接著在HelloWorld模塊上講好了,首先在上面說的目錄下面創(chuàng)建一個(gè)文件:Res_HelloWorld.c,這個(gè)文件的內(nèi)容大

42、致框架如下:/*/#include"StdC.h"#ifdefDEVELOPER_BUILD_FIRST_PASS/注意,后面資源生成相關(guān)代碼要用這個(gè)編譯開關(guān)框住#include"PopulateRes.h"#include"MMI_features.h"#include"GlobalMenuItems.h"#include"HelloWorldDefs.h"voidPopulateHelloWorldRes(void)#ifdef_MMI_HELLOWORLD_ENABLED_/這里是資源生成

43、部分的代碼,基本上都是些宏,后面講到具體資源的時(shí)候我們?cè)僦v#endif#endif/*DEVELOPER_BUILD_FIRST_PASS*/*/接著,我們還需要修改系統(tǒng)文件plutommiCustomerResGeneratorMakefile,以便編譯系統(tǒng)能順利找到我們定義資源ID的頭文件"HelloWorldDefs.h",在PLUTO_INC=這一項(xiàng)里面追加一行:-I"././MMI/HelloWorld/Inc",注意,追加新行的時(shí)候別忘了在上一行尾部添上續(xù)行符號(hào)“”。再接著,我們要把我們的資源生成函數(shù)“PopulateHelloWorldRe

44、s”放到合適的地方調(diào)用,這樣才能生成我們要的資源,這里我們需要修改另外一個(gè)系統(tǒng).c源文件:"plutommimmiResourcePopulateRes.c”需要修改的見紅色字體部分,如下所示:externvoidPopulateMmiapiRes(void);externvoidPopulateHelloWorldRes(void);voidPopulateResData(void)#ifdefDOWNLOAD_MCU/*Added,20071218*/PRINT_INFORMATION("PopulatingMCUDownloadResourcen");Pop

45、ulate_MCUDownload();#endif#ifdef_MMI_HELLOWORLD_ENABLED_PRINT_INFORMATION("PopulatingHelloWorldResourcen");PopulateHelloWorldRes();#endif對(duì)于字符串資源的生成,我們還需要修改另外一個(gè)系統(tǒng).c源文件,這個(gè)文件是“plutommiCustomerResGeneratorreadexcel.c”,這個(gè)文件是專門用來處理字符串資源的,mtk_resgenerator.exe會(huì)調(diào)用這個(gè)部分來單獨(dú)處理字符串相關(guān)的部分。需要修改的見紅色字體部分,如下所示

46、:#include"SettingDefs.h"#ifdef_MMI_HELLOWORLD_ENABLED#include"HelloWorldDefs.h"#endif只加上面3句就好,主要是讓字串資源生成程序能根據(jù)我們的資源ID定義頭文件“HelloWorldDefs.h”辨識(shí)到我們的字符串資源。1) 字符串資源的生成首先在我們的資源ID定義頭文件"HelloWorldDefs.h"里面加入字符串ID的定義,如下所示紅色字體部分:typedefenumSTR_HELLOWORLD_HELLO=HELLOWORLD_BASE+1,S

47、TRINGID_LIST_HELLOWORLD;好,現(xiàn)在我們有一個(gè)全系統(tǒng)唯一的字符串資源ID了,讓我們給這個(gè)字符串資源ID設(shè)定具體的文本內(nèi)容,這需要修改到一個(gè)系統(tǒng)文本文件:“plutommiCustomerCustResourcePLUTO_MMIref_list.txt”,注意,這個(gè)文本文件是Unicode編碼的,可以用UltraEdit打開,不過最好用Excel打開,這樣便于編輯修改,這個(gè)文件的格式如下:第一列:字符串資源ID,這里我們只加了一個(gè),也就是我們上面定義的“STR_HELLOWORLD_HELLO”;第二列:字符串資源所屬模塊,這個(gè)是便于設(shè)計(jì)者辨識(shí)資源歸屬的,資源生成程序并沒用

48、到,最好和當(dāng)前的模塊號(hào)同名,便于識(shí)別和管理;第三列:該字串的最大長(zhǎng)度,取所有語言中文本長(zhǎng)度最長(zhǎng)的一個(gè)第四列:字串描述,這一列可以隨意第五列及以后各列分別對(duì)應(yīng)各個(gè)不用語言的字串按照上述格式,我們?cè)黾幼芳右粭l,如下紅色字體所示:STR_HELLOWORLD_HELLOHelloWorld20HelloWorld"Hello,World"你好,世界你好,世界接著,我們要在我們的資源生成函數(shù)PopulateHelloWorldRes中增加一行,這樣才能將上面的資源真正變成最終系統(tǒng)資源的一部分,一條宏指令就搞定了,如下紅色字體所示:ADD_APPLICATI0N_STRING2(ST

49、R_HELL0W0RLD_HELL0,Hello,WorldII,HelloWorldI);這個(gè)宏的第一個(gè)參數(shù)是字符串ID,第二個(gè)參數(shù)是當(dāng)前系統(tǒng)語種對(duì)應(yīng)的字串內(nèi)容為空的時(shí)候的替代值,第三個(gè)參數(shù)是串的描述,可以隨意。好,至此我們就成功的向系統(tǒng)中添加了一個(gè)字符串資源,而且是包含多語種支持的。2) 圖片資源的生成同樣,第一步我們向資源ID定義頭文件"HelloWorldDefs.h"里面加入圖片ID的定義,如下所示紅色字體部分:typedefenumIMG_HELLOWORLD=HELLOWORLD_BASE+1,IMAGEID_LIST_HELLOWORLD;接著我們把設(shè)計(jì)好的

50、圖片放到系統(tǒng)約定的目錄,一般來講系統(tǒng)是按照屏幕分辨率來分類存放圖片資源的,對(duì)于P1300320*240的屏幕分辨率來講,這個(gè)目錄是“plutommiCustomerlmagesPLUTO240X320MainLCD”,在這個(gè)目錄下我們建一個(gè)名字為“HelloWorld”的子目錄,之后把我們模塊要用到的圖片通通都放到這個(gè)子目錄下以便于管理。我們?cè)黾右粋€(gè)小圖片HelloWorld.bmp到這個(gè)子目錄下,后面我們將這個(gè)小圖片作為菜單項(xiàng)的圖標(biāo),如下所示:再接著,同樣我們需要在資源生成函數(shù)PopulateHelloWorldRes中增加一行,這也是一個(gè)宏,如下所示紅色字體部分:ADD_APPLICATI

51、ONMAGE2(IMG_HELLOWORLD,CUST_IMG_PATH"MainLCDWWHelloWorldWWHelloWorld.bmp","HelloWorld");這個(gè)宏第一個(gè)參數(shù)是圖片資源ID,第二個(gè)參數(shù)是圖片存儲(chǔ)路徑(CUST_IMG_PATH對(duì)應(yīng)“plutommiCustomerImagesPLUTO240X320”),第三個(gè)參數(shù)是資源描述,這樣一個(gè)圖片資源就加好了,下面接著看菜單資源的添加,這一部分稍稍繁瑣一點(diǎn)(主要是相對(duì)應(yīng)的宏參數(shù)比較多)。注意:HelloWorld子目錄以及相關(guān)文件實(shí)際上是要加入到壓縮文件“plutommiCust

52、omerImagesPLUTO240X320image.zip”中(放至UMainLCD目錄下),“plutommiCustomerImagesPLUTO240X320MainLCD”這個(gè)目錄是由image.zip生成的臨時(shí)目錄。菜單資源的生成我們都知道,菜單是一種樹形的結(jié)構(gòu),一個(gè)菜單項(xiàng)一般有以下幾個(gè)要素:1、父菜單項(xiàng)2、子菜單項(xiàng)3、菜單項(xiàng)的文本提示4、菜單項(xiàng)文本提示前面的小圖標(biāo)5、菜單項(xiàng)對(duì)應(yīng)的動(dòng)作第5個(gè)涉及到菜單資源的使用,我們放到后面再講,下面就前面幾項(xiàng)講講如何向添加一個(gè)新的菜單項(xiàng)。首先確定我們新的菜單項(xiàng)的位置,我們放到工具菜單下好了,就是主菜單進(jìn)去后那個(gè)小推車對(duì)應(yīng)的菜單。第一步:我們要定

53、義一個(gè)全系統(tǒng)唯一的菜單ID,這需要在系統(tǒng)文件“plutommimmilnc'GlobalMenultems.h”中名字為GLOBALMENUITEMSID的枚舉型定義里面增加一行,如下紅色字體所示:enumGLOBALMENUITEMSIDIDLE_SCREEN_MENU_ID=1,MENU_ID_HELLOWORLD,/*Addnewmenuitemsdefinitionsbeforehere*/*AddAllMenusdefinesaboveMAX_MENU_ITEMS_VALUEOnly*/從上面我們可以看出,菜單ID并沒有用到我們之前提到的HELLOWORLD_BASE到HEL

54、LOWORLD_BASE_MAX之間的數(shù)值,而是重新啟用另外一套數(shù)值空間,沒關(guān)系,只要能保證同一種資源每一個(gè)都有全系統(tǒng)唯一編號(hào)就好了。第二步:找到工具菜單的定義部分,將MENU_ID_HELLOWORLD作為其中的一部分,這實(shí)際上是要修改主菜單的相關(guān)資源,主菜單的資源定義文件是“plutommiCustomerCustResourcePLUTO_MMIRes_MMIRes_MainMenu.c”,打開這個(gè)文件,找到OrganizerMenu的定義部分,增加我們的相關(guān)定義,如下所示紅色部分:typedefenum#ifdefined(_MMI_EBOOK_READER_)ENUM_EBOOK,#endif#ifdefined(_MMI_HELLOWORLD_ENABLED_)ENUM_ID_HELLOWORLD,#endifORG_ENUM_TOTALOrganizerMenu;對(duì)于OrganizerMenu這個(gè)定義的修改,主要意義在于ORG_ENUM_TOTAL,這個(gè)值實(shí)際上是對(duì)應(yīng)菜單的子菜單數(shù),系統(tǒng)會(huì)引用到這個(gè)值,我們往枚舉定義OrganizerMenu里面增加一項(xiàng),這個(gè)值自動(dòng)加1,也就是對(duì)應(yīng)菜單的子菜單數(shù)比以前大1。第三步:把我們的菜單ID作為工具箱菜單的一個(gè)子菜單,在對(duì)應(yīng)位置插入一行,如下紅色字體所示:#ifdefined(_MMI_VERSION_2_)/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論