


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、開發(fā)環(huán)境設(shè)立1、開發(fā)主機要求及所需工具:操作系統(tǒng):Windows2000,WinXP.推薦Windows2000withSP2orlater.編譯器:ADS(ArmDeveloperSuite)v1.2Build842Perl解析:ActivePerl,推薦使用ActivePerl5.6.1版本仿真工具:MTKPCSimulator跟蹤工具:Catcher_L1v3.10.01,從串口輸出調(diào)試信息,只做普通UI應(yīng)用的話,大致不會用到,用PC仿真工具就好了燒錄工具:FlashTool_UIv3.1.05或FlashTool_v3.0844.00其他:PL2303_Driver_XP2KV2041
2、02,這是下載線用到的USB串口驅(qū)動,以前機器上裝過PL2303驅(qū)動的,建議改用這個,否則可能會有藍屏的問題。2、開發(fā)環(huán)境建立過程:新建一個目錄,英文的好了,否則有些工具不認識中文路徑,這里以E:MTK_P1300為例說明,下面我用文字和圖片簡單說明下安裝過程,更詳細的安裝過程可以看壓縮文件“手機開發(fā)板C語言開發(fā)視頻.rar”中的Flash文件“P1300_Build_Env.swf”。1) 安裝ADS1.2解壓文件huayu109_ads1.2.rar到某個目錄,比如說解壓到“E:MTK_P1300”,解壓完后運行“E:MTK_P1300ADS1.2Setup.exe”,一路按下一步,最后安
3、裝License時選定文件“E:MTK_P1300ADS1.2CRACKlicense.dat”,然后接著一路下一步直到安裝完。安裝完后刪掉目錄“”,節(jié)省磁盤空間。2) 安裝ADS補丁運行huayu102_ADS12_Patch_Windows.rar壓縮文件中的ADS_Patch_Window.exe,這是個自解壓的壓縮文件,選Unzip解壓到上一步ADS的安裝目錄(缺省是C:ProgramFilesARMADSv1_2),解壓過程中如果問到是否覆蓋,全部選覆蓋好了。3) 安裝腳本解釋器Perl直接運行壓縮包huayu106_perlzip.rar里面擴展名為msi的安裝文件,缺省安裝就好,
4、一路Next,呵呵。上述幾步完成后,編譯環(huán)境基本建立,此時可以開一個dos窗(開始菜單-運行-輸入cmd-確定)看一下,安裝正常應(yīng)該能順利執(zhí)行以下命令,如下圖:注意看版本號,應(yīng)該是ADS1.2Build842,不是的話可能沒打補丁,或補丁打的位置不對,請看第2步ADS補丁部分的說明并重新打一次,直到版本號對為止,哈哈。這是perl解釋器的運行畫面。注1:上述安裝過程會自動創(chuàng)建編譯環(huán)境所需的環(huán)境變量,如果發(fā)現(xiàn)編譯不正常了,可能是安裝了其他編譯工具導(dǎo)致沖突,這時建議查看下系統(tǒng)環(huán)境變量,把Perl和ADS的安裝目錄調(diào)到最前面,同時從path中去掉可能會產(chǎn)生沖突的編譯工具鏈的路徑側(cè)如winavr),如
5、下圖所示(我是安裝到D盤滴,缺省是C盤,不過我C盤幾乎被我塞滿了):系統(tǒng)展性廳岡環(huán)境變量計茸機君硬件系蛻還原自動更新垂進廳大條數(shù)改動,保必須作舟管理然蔓錄.莒規(guī)性能現(xiàn)覺效果處理船計劃,內(nèi)存使用"u圧虛擬內(nèi)存用戶配盍立件與愎登錄有關(guān)的貞面設(shè)置設(shè)逼(E)啟動和觀陣恢當系蜿啟動,丟舷啊調(diào)試信息幵境吏雖Q3J153d)時逞報告爼)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麻煩(因為要用到其他編譯工具鏈的時候還得改回去make.bat批處理,具體見注4中相關(guān)說明。
7、注2:如果安裝ADS時,改變了默認安裝路徑,需要修改源碼中的設(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)境運行壓縮文件huayu108_SourceInsig
8、ht3.5.rar中的安裝文件安裝即可。至于編輯器,這個看個人喜好了,不過SourceInside看代碼蠻方便的。5)PC機模擬器模擬器MTKPCSimulator是用來在PC上仿真調(diào)試用的,要安裝VC6SP6(同時要安裝Uuicode靜態(tài)和動態(tài)庫,沒有裝Unicode庫的可以用“huayu103_MTK模擬器DLL補丁.zip”中的庫,拷到系統(tǒng)目錄“windir%system32”下即可)。我機器上的VC是有裝Unicode庫的,沒裝過Unicode庫的如果在模擬器編譯或運行中出現(xiàn)問題,建議重裝下VC6,安裝時勾選Unicode庫,并打上相關(guān)補丁到SP6。模擬器能模擬真機的大部分行為,這樣能
9、給調(diào)試帶來很大便利,不需要每次改動都要燒錄。模擬器要從源碼編譯,解壓壓縮包“huayu201_P1300_V1.7_Release.rar”里面的文件“HUAYU_P1300_V1.7_Release.rar”至U目錄“E:MTK_P1300”,此時會出現(xiàn)目錄“E:MTK_P1300P1300_V1.7_Release”,這就是P1300的代碼目錄樹了;接著打上最新的補丁,解壓壓縮包“huayu203_P1300_V1.7_Release_patch.rar”里面的壓縮文件“HUAYU_P1300_V1.7_Release_patch.rar”到目錄“E:MTK_P1300P1300_V1.7
10、_Release”,解壓時選擇全覆蓋以替換被修改過的文件,打補丁之前對目錄樹里面的文件進行修改過的,需要手動再加上去。編譯PC仿真器之前需要先把剛才上面得到的目錄樹build一次,開一個dos窗,盤符和目錄轉(zhuǎn)到代碼目錄樹對應(yīng)的盤符和目錄,例如:E:cdE:MTK_P1300P1300_V1.7_Releasemakenew注3:第一次make的時候要用"makenew”,makenew的時間比較長(慢的機器搞不好要2小時以上),編譯過程中間會出現(xiàn)一些文件找不到的信息,只要編譯過程沒意外終止,那些信息可以忽略。編譯日志文件位置:,要查看編譯過程有啥問題就看這個目錄下的文件了;生成的bi
11、n文件位置:buildNEOTEL25_06B*.bin,下載燒錄就是燒bin文件。這里順帶介紹下build的命令格式:makenew清除后重新編譯整個項目makeresgen重新生成資源makeremake重新編譯鏈接項目makeviewlogxxx查看模塊xxx的編譯日志make查看可以用make選項幫助信息注4:如果機器上裝了其他gcc編譯工具鏈(比如winavr之類)的話可能要手動改下Path,否則編譯會出錯,修改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ù)自己的實際安裝路徑做修改。下面開始編譯PC仿真器了,用VC6打開工程文件“E:MTK_P1300P1300_V1.7_ReleaseplutommimmiPC_Simulator.dsw”,然后開始編譯,編譯時間比較長,具體看機器配置了
13、,這時又可以干點別的啥了,呵呵。因為仿真器工程涉及文件較多,編譯費時,建議編譯過程中電腦上少開窗口,特別是網(wǎng)絡(luò)類的,如QQ,有時會發(fā)現(xiàn)開QQ后,編譯過程中VC會掛死,呵呵。有可能是開QQ后防火墻過濾網(wǎng)絡(luò)數(shù)據(jù)占用較多系統(tǒng)資源,如果發(fā)現(xiàn)VC編譯特別慢或干脆掛死,可以重啟動一下電腦,只開必要的窗口,然后開始編譯。如果編譯過程中發(fā)現(xiàn)怪異的問題,如:incomingstringiddef.h(120):errorC2059:syntaxerror:'constant'或者errorC2065:'STR_CM_REDIAL':undeclaredidentifier之類這個
14、時侯你可能需要看一下你VC相關(guān)路徑的設(shè)置順序,如下圖:把VC原本的頭文件路徑調(diào)整到最前面,我剛開始編譯的時候SDK的頭文件在前面,編譯總是通不過,改一下就好了,庫也一樣都調(diào)整下比較保險,呵呵。6)Tracer跟蹤工具解壓文件P1300_Build_Guide.rar至UE:MTK_P1300,然后在文件管理器進入目錄“E:MTK_P1300P1300_Build_Guide”,接著解壓Catcher_L1_v3.10.01.zip到當前目錄下的Catcher_L1_v3.10.01子目錄,進入子目錄Catcher_L1_v3.10.01,發(fā)送一個Catcher.exe的快捷方式到桌面。在需要用
15、到TRACE的時候,在代碼中使用函數(shù)voidkal_prompt_trace(module_typemodd,constkal_char*fmt,.);打印需要查看的信息,使用Catcher跟蹤查看。這個有點類似Linux的KernelDebug工具,具體使用方法見文檔cather使用手冊.doc,這個文檔可在壓縮包"huayu101_p1300軟件使用工具及開發(fā)指南.rar”里面找到。7) 燒錄工具解壓文件“E:MTK_P1300P1300_Build_GuideFlashTool_UI_exe_v3.1.05.zip”到當前目錄,然后進入目錄“E:MTK_P1300P1300_B
16、uild_GuideFlashTool_v3.1.05”,發(fā)送一個Flash_tool.exe的快捷方式到桌面好了。還有個下載工具FlashTool_v3.0844.00.rar,也是不用安裝,解壓后直接用的,據(jù)說燒錄速度比上面那個快。具體使用方法見文檔flash_tool_MT平臺使用教程.doc,這個文檔可在壓縮包“huayu101_p1300軟件使用工具及開發(fā)指南.rar”里面找到。USB串口下載線驅(qū)動運行壓縮文件“E:MTK_P1300P1300_Build_GuidePL2303_Driver_XP2K_v204102.zip”里面的可執(zhí)行文件進行安裝,一路下一步,這里不再贅述。He
17、lloWorld上面一節(jié)我們建立好了開發(fā)環(huán)境,現(xiàn)在是時候?qū)崙?zhàn)一把了,在進行實質(zhì)性的項目開發(fā)之前,我們先來了解下P1300上寫程序的一般性做法。從“HelloWorld”開始吧,有句笑話講:“會編程就是會HelloWorld,編程高手就是會寫很多個HelloWorld”,雖然是句笑話,但是細想也是有道理的,麻雀雖小五臟俱全嘛,掌握了框架,剩下的就無非是些編程技巧的問題了。這和建房子一個道理,地基打的深不深,框架建的是否合理,決定房屋總體質(zhì)量好不好,其他就是裝修的功夫了,當然還有水電線路的鋪設(shè),這涉及到習慣和技巧了,設(shè)計不好會漏水漏電,哈哈。扯遠了,下面開始HelloWorld。下面為描述上的方便
18、,我們將HelloWorld稱為一個模塊。首先建立新的模塊目錄,之后把模塊相關(guān)文件都放到這個目錄下統(tǒng)一進行管理,新的模塊一般放到plutommi'MMI下面,這里我們新建一個目錄“HelloWorld”,然后在模塊目錄“HelloWorld”下再建三個子目錄:“Inc”、“Src”和“Res”,分別用來存放模塊的頭文件、源文件和資源文件,目錄結(jié)構(gòu)如下圖所示:接著我們在Inc下創(chuàng)建幾個頭文件:HelloWorldGprot.h,HelloWorldProt.h,HelloWorldTypes.h,HelloWorldDefs.h,再在Src下創(chuàng)建一個源文件:HelloWorld.c,關(guān)于
19、文件名和函數(shù)名等的命名標準每個公司及個人各有不同,統(tǒng)一就好,否則在進行大的項目開發(fā)時彼此協(xié)同會遇到問題,有時候弄不好光這些問題就能折騰你半天甚至數(shù)日或數(shù)月,呵呵。上面幾個文件的作用我大致講下:HelloWorldGprot.h放這里了HelloWorldProt.hHelloWorldTypes.hHelloWorldDefs.hHelloWorld.c模塊對外接口,供模塊外部調(diào)用的函數(shù)原型在此申明,模塊內(nèi)部接口就不要模塊內(nèi)部接口,供模塊內(nèi)部調(diào)用的函數(shù)原型在此申明本模塊用到的一些常量、自定義數(shù)據(jù)類型、結(jié)構(gòu)的定義本模塊用到的資源ID定義模塊功能函數(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_*/*/其他幾個文件的內(nèi)容因模塊功能而異,這里先略過,后面再講。緊接著,我們要修改的相關(guān)系統(tǒng)文件,使這個模塊成為整個項目的一部分,需要修改的系統(tǒng)文件如下:makeplutommiplutommi.incmakeplutommiplutommi.pthm
22、akeplutommiplutommi.lis所有mmi部分的頭文件所在目錄的相對路徑列表所有mmi部分的源文件所在目錄的相對路徑列表所有mmi部分的源文件(相對路徑)列表在上述3個文件里面分別加上我們模塊的對應(yīng)內(nèi)容,就現(xiàn)在講的HelloWorld而言,所加內(nèi)容如下:makeplutommiplutommi.inc文件追加一行“plutommimmiHelloWorldInc”makeplutommiplutommi.pth文件追加一行“plutommimmiHelloWorldSrc”makeplutommiplutommi.lis文件追加一行“plutommimmiHelloWorldSr
23、cHelloWorld.c”再接著,我們需要增加一個開關(guān),以決定這個模塊是否成為最終發(fā)布版本的一部分,這實際上是一個編譯開關(guān),需要修改系統(tǒng)文件及相關(guān)的模塊源文件,需要修改的系統(tǒng)文件包括:plutommiCustomerCustResourcePLUTO_MMIMMI_featuresPLUTO.h,這里我們用名字為“_MMI_HELLOWORLD_ENABLED_”這個開關(guān)好了,在這個文件里面追加一行:#define_MMI_HELLOWORLD_ENABLED_,同時在相關(guān)源文件里面用:#ifdef_MMI_HELLOWORLD_ENABLED_#endif來框住相關(guān)代碼行就OK了,當不打算
24、將這個模塊發(fā)布的時候,注釋掉“#define_MMI_HELLOWORLD_ENABLED_”這一句重新make一次就好了。下面講具體實現(xiàn)的部分,為了簡化描述,我們暫時先將我們的模塊入口掛接到主菜單入口處(后面講到資源的部分可將入口移到某個新建的子菜單下),修改下文件“plutommimmimainmenumainmenusrcMainMenu.c”中的goto_main_menu函數(shù),如下所示紅色字體部分:voidgoto_main_menu(void)#ifdef_MMI_HELLOWORLD_ENABLED_mmi_HelloWorld_entry();return;#else/此處為之
25、前goto_main_menu的代碼#endif同時我們需要在文件MainMenu.c中包含頭文件HelloWorldGprot.h,所以再在這個文件的頭文件包面是HelloWorld.c的內(nèi)容:/*/#include"stdC.h"#include"MMI_Features.h"/*編譯開關(guān)會出現(xiàn)在這個由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_/*強制退出當前屏幕,之后進入到我們的模塊了*/*上電缺省是idle屏幕,現(xiàn)進入MAIN_MENU_SCREENID屏*/*注意看第二個參數(shù),這個是當我們模塊被強制退出時執(zhí)行的一些操作*/EntryNewScreen(MAIN_MENU_SCREENID,mmi_HelloWorld_exit,NULL,NULL);/*關(guān)掉屏幕頂
28、部的狀態(tài)條,我們要用整個屏幕*/entry_full_screen();/*擦除當前背景*/clear_screen();/*移動文本輸出光標*/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);/*注冊一個按鍵處理,右軟鍵彈起時返回到之前被我們強制退出的模塊*/SetKeyHandler(GoBackHistory,KEY_RSK,KEY_EVENT_UP);#endif/*模塊出口*當我們的模塊被其他模塊強制退出時會執(zhí)行這個函數(shù),*這個函數(shù)的常見寫法,包括:*1、模塊已申請資源的釋放(如果需要的話),這一步可選*2、手動把自己壓棧到窗口(實際是整個屏)堆棧里面,*便于強制我們退出的模塊執(zhí)行完后重新把我們叫出來*不像Window的窗口管理是自動壓棧的,PlutoMMI需要手動壓棧*3、其他一些清理動作*/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”,基于上述對相關(guān)系統(tǒng)文
31、件的改動,makeupdate會自動將剛才的模塊加入到整個項目中去,同時也會更新仿真器VC工程文件,如下圖所示,HelloWorld模塊的相關(guān)文件已經(jī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é)省編譯時間,因為make次太耗時間了。注意:對于仿真程序的編譯,“makeupdate”似乎缺少一些處理,導(dǎo)致可能還需要手工在文
33、件“plutommimmiGlobalSimulatorPathDef”中追加一行,以便模塊的頭文件能被順利找到,如下所示:/I".HelloWorldlnc"好,現(xiàn)在編譯仿真程序開始看下效果,編譯(makeupdate會清除掉仿真程序之前編譯的中間文件,這樣仿真程序會整個重新編譯)完后運行仿真器程序,如下圖所示,點選File->NetworkSimulator啟動仿真,啟動后手機模擬器進入Idle畫面,點選手機模擬畫面上的“菜單”,就進入到我們的HelloWorld了,而不是之前的主菜單,然后點右按鈕,畫面回到Idle畫面。FileToolsHelpfxHTKSim
34、ulatorSaveWindowPositionNetworkSimulatorExit1)g)至此,HelloWorld基本完成,這是一個相對完整的模塊框架,在此基礎(chǔ)之上我們可以逐步開始進入真正有意義的項目開發(fā)了。三、使用資源我們知道,很多時候我們需要應(yīng)付來自不同國家和地區(qū)客戶的需求,他們使用的語言編碼不一樣,但實際上對產(chǎn)品功能的要求是基本相同的;此外即便是同一種語言,客戶的個性化需求(例如外觀換皮膚)也要求我們有相應(yīng)手段來處理和產(chǎn)品業(yè)務(wù)邏輯關(guān)系不是很密切的產(chǎn)品表現(xiàn)手段,大多數(shù)時候,這些東西涉及到:字符串、圖標、圖片、菜單、字庫、主題、聲音等,也就是我們常說的資源,做過多語言版本軟件的朋友應(yīng)
35、該對此深有體會。一般來講VC使用資源動態(tài)庫來解決這個問題,那么在MTK平臺上一般是怎么解決的呢,我們一起來看下。1、資源ID在進入實際編碼前,讓我們先來看看MTK平臺是如何管理資源的。MTK平臺大致將資源分為以下幾類:字符串、菜單、圖片、字庫、主題、聲音、屏幕,所有資源統(tǒng)一編碼管理,對于同一類型的資源,每個資源有全系統(tǒng)唯一的編號,也就是資源ID,字符串資源和其他資源稍有不同,同一個語義的不同語言版本字符串共用同一個字符串資源ID,系統(tǒng)自動根據(jù)當前語言設(shè)定提取對應(yīng)語言版本的字串。此外,屏幕是一種平常我們Windows開發(fā)中不多見的一種資源,這里我們可以簡單的理解成Windows的窗口句柄好了。為
36、了不讓系統(tǒng)各個模塊的資源ID彼此重疊從而導(dǎo)致混亂,系統(tǒng)提供專門的宏來處理,并將相關(guān)的定義統(tǒng)一放到同一個文件里面便于管理。具體來講,這個文件是"plutommimmilnc'MMIDataType.h”,在開始添加實際資源之前,我們需要大致估計一個安全值,這個值代表我們可能用到的資源最大數(shù),注意這個最大數(shù)并不是我們用到的所有資源的總數(shù),而是某一類資源,因為不同類型的資源其資源ID是允許重復(fù)的,比如說我們總共要用到20個字符串,10張圖片,1個菜單項,那么這個最大數(shù)是20,一般會再留一些可擴展的空間,就HelloWorld模塊而言,最大數(shù)取100足夠了(當然了,這個數(shù)后面還可以再
37、改的)。最大值取好后,我們就可以著手向系統(tǒng)申報我們的資源ID空間了,修改文件“plutommimmiIncMMIDataType.h”如下所示紅色字體部分,這樣系統(tǒng)就預(yù)留了100個全系統(tǒng)唯一的資源ID給我們了,注意,是每一種資源都有100個可用的資源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資源是一種最簡單的資源,就是一個數(shù)值,定義完就可以使用了,其他資源相對復(fù)雜,需要有一個生成的過程,下面我們接著看資源的生成。2、資源的生成限于篇幅,這里我們主要講常用的3種資源:字符串、圖片和菜單。首先,我們來看這些資源是如何被生成的,后面我們再講如何使用這些資源。MTK平臺的資源是通過一個叫mtk_resgenerator.exe的程序生成的,這個程序位于目錄plutommiCustomerResGenerator下,是個臨時生成的可執(zhí)行文件,每次項目相關(guān)資源被修改,該程序都要重新編譯,實際上這個程序是由一系列需要自有資源的模塊根據(jù)一定的資源生成規(guī)則將各自的資源生成代碼組
41、合而成的。資源生成相關(guān)的代碼統(tǒng)一放在同一個目錄下面,因此我們要給自己的模塊添加資源,只需要在這個目錄下建立自己的資源生成.c文件,并按照指定的生成規(guī)則編寫代碼即可。具體來講,這個目錄就是plutommiCustomerCustResourcePLUTO_MMIRes_MMI。注意,這個目錄下不要放其他不相關(guān)的.c或.cpp源文件,因為編譯腳本會自動將這個目錄下的所有源文件作為mtk_resgenerator.exe的一部分來處理。好,下面開始資源生成相關(guān)的編碼。我們繼續(xù)接著在HelloWorld模塊上講好了,首先在上面說的目錄下面創(chuàng)建一個文件:Res_HelloWorld.c,這個文件的內(nèi)容大
42、致框架如下:/*/#include"StdC.h"#ifdefDEVELOPER_BUILD_FIRST_PASS/注意,后面資源生成相關(guān)代碼要用這個編譯開關(guān)框住#include"PopulateRes.h"#include"MMI_features.h"#include"GlobalMenuItems.h"#include"HelloWorldDefs.h"voidPopulateHelloWorldRes(void)#ifdef_MMI_HELLOWORLD_ENABLED_/這里是資源生成
43、部分的代碼,基本上都是些宏,后面講到具體資源的時候我們再講#endif#endif/*DEVELOPER_BUILD_FIRST_PASS*/*/接著,我們還需要修改系統(tǒng)文件plutommiCustomerResGeneratorMakefile,以便編譯系統(tǒng)能順利找到我們定義資源ID的頭文件"HelloWorldDefs.h",在PLUTO_INC=這一項里面追加一行:-I"././MMI/HelloWorld/Inc",注意,追加新行的時候別忘了在上一行尾部添上續(xù)行符號“”。再接著,我們要把我們的資源生成函數(shù)“PopulateHelloWorldRe
44、s”放到合適的地方調(diào)用,這樣才能生成我們要的資源,這里我們需要修改另外一個系統(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對于字符串資源的生成,我們還需要修改另外一個系統(tǒng).c源文件,這個文件是“plutommiCustomerResGeneratorreadexcel.c”,這個文件是專門用來處理字符串資源的,mtk_resgenerator.exe會調(diào)用這個部分來單獨處理字符串相關(guān)的部分。需要修改的見紅色字體部分,如下所示
46、:#include"SettingDefs.h"#ifdef_MMI_HELLOWORLD_ENABLED#include"HelloWorldDefs.h"#endif只加上面3句就好,主要是讓字串資源生成程序能根據(jù)我們的資源ID定義頭文件“HelloWorldDefs.h”辨識到我們的字符串資源。1) 字符串資源的生成首先在我們的資源ID定義頭文件"HelloWorldDefs.h"里面加入字符串ID的定義,如下所示紅色字體部分:typedefenumSTR_HELLOWORLD_HELLO=HELLOWORLD_BASE+1,S
47、TRINGID_LIST_HELLOWORLD;好,現(xiàn)在我們有一個全系統(tǒng)唯一的字符串資源ID了,讓我們給這個字符串資源ID設(shè)定具體的文本內(nèi)容,這需要修改到一個系統(tǒng)文本文件:“plutommiCustomerCustResourcePLUTO_MMIref_list.txt”,注意,這個文本文件是Unicode編碼的,可以用UltraEdit打開,不過最好用Excel打開,這樣便于編輯修改,這個文件的格式如下:第一列:字符串資源ID,這里我們只加了一個,也就是我們上面定義的“STR_HELLOWORLD_HELLO”;第二列:字符串資源所屬模塊,這個是便于設(shè)計者辨識資源歸屬的,資源生成程序并沒用
48、到,最好和當前的模塊號同名,便于識別和管理;第三列:該字串的最大長度,取所有語言中文本長度最長的一個第四列:字串描述,這一列可以隨意第五列及以后各列分別對應(yīng)各個不用語言的字串按照上述格式,我們增加追加一條,如下紅色字體所示:STR_HELLOWORLD_HELLOHelloWorld20HelloWorld"Hello,World"你好,世界你好,世界接著,我們要在我們的資源生成函數(shù)PopulateHelloWorldRes中增加一行,這樣才能將上面的資源真正變成最終系統(tǒng)資源的一部分,一條宏指令就搞定了,如下紅色字體所示:ADD_APPLICATI0N_STRING2(ST
49、R_HELL0W0RLD_HELL0,Hello,WorldII,HelloWorldI);這個宏的第一個參數(shù)是字符串ID,第二個參數(shù)是當前系統(tǒng)語種對應(yīng)的字串內(nèi)容為空的時候的替代值,第三個參數(shù)是串的描述,可以隨意。好,至此我們就成功的向系統(tǒng)中添加了一個字符串資源,而且是包含多語種支持的。2) 圖片資源的生成同樣,第一步我們向資源ID定義頭文件"HelloWorldDefs.h"里面加入圖片ID的定義,如下所示紅色字體部分:typedefenumIMG_HELLOWORLD=HELLOWORLD_BASE+1,IMAGEID_LIST_HELLOWORLD;接著我們把設(shè)計好的
50、圖片放到系統(tǒng)約定的目錄,一般來講系統(tǒng)是按照屏幕分辨率來分類存放圖片資源的,對于P1300320*240的屏幕分辨率來講,這個目錄是“plutommiCustomerlmagesPLUTO240X320MainLCD”,在這個目錄下我們建一個名字為“HelloWorld”的子目錄,之后把我們模塊要用到的圖片通通都放到這個子目錄下以便于管理。我們增加一個小圖片HelloWorld.bmp到這個子目錄下,后面我們將這個小圖片作為菜單項的圖標,如下所示:再接著,同樣我們需要在資源生成函數(shù)PopulateHelloWorldRes中增加一行,這也是一個宏,如下所示紅色字體部分:ADD_APPLICATI
51、ONMAGE2(IMG_HELLOWORLD,CUST_IMG_PATH"MainLCDWWHelloWorldWWHelloWorld.bmp","HelloWorld");這個宏第一個參數(shù)是圖片資源ID,第二個參數(shù)是圖片存儲路徑(CUST_IMG_PATH對應(yīng)“plutommiCustomerImagesPLUTO240X320”),第三個參數(shù)是資源描述,這樣一個圖片資源就加好了,下面接著看菜單資源的添加,這一部分稍稍繁瑣一點(主要是相對應(yīng)的宏參數(shù)比較多)。注意:HelloWorld子目錄以及相關(guān)文件實際上是要加入到壓縮文件“plutommiCust
52、omerImagesPLUTO240X320image.zip”中(放至UMainLCD目錄下),“plutommiCustomerImagesPLUTO240X320MainLCD”這個目錄是由image.zip生成的臨時目錄。菜單資源的生成我們都知道,菜單是一種樹形的結(jié)構(gòu),一個菜單項一般有以下幾個要素:1、父菜單項2、子菜單項3、菜單項的文本提示4、菜單項文本提示前面的小圖標5、菜單項對應(yīng)的動作第5個涉及到菜單資源的使用,我們放到后面再講,下面就前面幾項講講如何向添加一個新的菜單項。首先確定我們新的菜單項的位置,我們放到工具菜單下好了,就是主菜單進去后那個小推車對應(yīng)的菜單。第一步:我們要定
53、義一個全系統(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)系,只要能保證同一種資源每一個都有全系統(tǒng)唯一編號就好了。第二步:找到工具菜單的定義部分,將MENU_ID_HELLOWORLD作為其中的一部分,這實際上是要修改主菜單的相關(guān)資源,主菜單的資源定義文件是“plutommiCustomerCustResourcePLUTO_MMIRes_MMIRes_MainMenu.c”,打開這個文件,找到OrganizerMenu的定義部分,增加我們的相關(guān)定義,如下所示紅色部分:typedefenum#ifdefined(_MMI_EBOOK_READER_)ENUM_EBOOK,#endif#ifdefined(_MMI_HELLOWORLD_ENABLED_)ENUM_ID_HELLOWORLD,#endifORG_ENUM_TOTALOrganizerMenu;對于OrganizerMenu這個定義的修改,主要意義在于ORG_ENUM_TOTAL,這個值實際上是對應(yīng)菜單的子菜單數(shù),系統(tǒng)會引用到這個值,我們往枚舉定義OrganizerMenu里面增加一項,這個值自動加1,也就是對應(yīng)菜單的子菜單數(shù)比以前大1。第三步:把我們的菜單ID作為工具箱菜單的一個子菜單,在對應(yīng)位置插入一行,如下紅色字體所示:#ifdefined(_MMI_VERSION_2_)/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 某某市抗旱應(yīng)急預(yù)案
- 內(nèi)分泌學(醫(yī)學高級):腎上腺疾病考試答案(題庫版)
- 2025年會計職稱考試《初級會計實務(wù)》內(nèi)部控制與審計解題技巧與真題分析含答案
- 硫酸氨基葡萄糖膠囊對皮膚衰老的改善作用
- 老年人-可學習彈鋼琴等
- 魯科版普通高中課程標準實驗教科書
- 2025年天津國科匯康健康體檢中心招聘考試筆試試題(含答案)
- 2025年內(nèi)蒙古興安銀鉛冶煉有限公司招聘考試筆試試題(含答案)
- 海洋防波堤修建要點
- 老師職業(yè)心態(tài)培訓(xùn)課件
- 中外航海文化知到課后答案智慧樹章節(jié)測試答案2025年春中國人民解放軍海軍大連艦艇學院
- 人工智能引論智慧樹知到課后章節(jié)答案2023年下浙江大學
- 自愿放棄財產(chǎn)協(xié)議范本書
- 省級電子政務(wù)外網(wǎng)-統(tǒng)一云平臺建設(shè)方案
- Soul app用戶體驗分析市場調(diào)研分析報告PPT模板
- 柯南偵探原理詳解之3柯南與干冰(專業(yè)應(yīng)用)
- JIS G4304-2021 熱軋不銹鋼板材、薄板材和帶材
- 大氣海洋數(shù)據(jù)分析與同化考試復(fù)習題
- 高中生物校本教材
- 園林綠化工程竣工驗收資料表格-綠化工程竣工驗收單
- 甲級寫字樓服務(wù)標準
評論
0/150
提交評論