这是MTK编译出现的错误解决方法: 在日常的MTK工程代码编译中,总会遇到一些奇奇怪的报错信息,第一次碰到的话,肯定会很头疼。下面列出了3个出现几率较大的几个异常。 1,non ELF 类似于 Error:L6850E:Archive non ELF Object app_url.obj 之类的错误,一般是由于分布式编译异常中断引起的,可以用checkobj 这个指令来清除异常的obj文件。再remake即可。 2,Image$$ZI$$Limit 这个问题基本都是由于在自己的代码中MTK端宏里面,使用了C的标准输出函数printf、,malloc,free等。 3,Couldn't reserve space for cygwin's heap 这种情况,基本是执行 sys-1.0.dll 时除了问题,可cmd定位到该工程目录,输入命令,rebase -b 0x76000000 ./tools/MSYS/bin/msys-1.0.dll 然后重新编译即可。 ERROR1 :non ELF Object 在编译某模块时,在new时出现了下面的错误: LENOVO53_09A_GEMINI_PHOENIX310\log\mmi_app.log(2):Error: L6850E: Archive contains non ELF Object phonebookstubstoothers.obj cause:可能是分布式编译中断造成的部分生成文件有误,Object phonebookstubstoothers.obj文件大小为0 解决: 删除该文件 重新remake下 可以解决。 ERROR2 :Free clusters are NOT enough 问题: :Free clusters are NOT enough . Check ckSysDrv.log for detail ! 分析: 这可能是在项目中的mak文件中开了一些不必要的宏,造成nvram空间不够,看文件中下面分析: Cluster Size (Bytes) 512 Free Space (Clusters) 870 Folders and Applications Requirement (Clusters) 1008 RESULT: FAIL! Shortage: 138 clusters (138 Sectors = 69.0 KB = 0.07 MB) 1) Shrink FS First Drive Size to enlarge system drive size (Shrink at least 138 sectors). 2) Enlarge FS Region Size. 3) Disable some features to shrink quota requirement. 4) Replace flash device with another bigger one (Custom release projects only). cluster(簇)的概念: ERROR3 :MTK cksysdrv has errors. Delete the binary file. 删除log中的ckSysDrv.log 文件 重新r下即可. ERROR3 :FLASHTOOL ERROR FROM UI 解决 :关闭catcher即可 ERROR4 :MTK Output CustENFBImgMap.c... done 在新加了联系人的备份功能后,在new的时候 在编译时候 出现了这样编译信息后一直 不动 原因是在res.txt文件中多了一空行。 1.【*** [xgc_all_libs_2] Error 1】这个错误解决方案是找到MTK的make目录,找到Gsm2.mak文件,打开 件,点收索,STOPONERRORS,查找下一个,把找到的/STOPONERRORS删掉,有两个; /STOPONERRORS这个错误是遇到问题停下,但是没有制定是那个文件出错。这个是模块出错了,就停下了。删掉这个。模块里边的文件出错有提示,并且还会继续编完模块。/STOPONERRORS 起的的作用是终止模块编译,但没提示错误。 2.【make[1]:Entering directory 'E:/T210_VIDEOCON/Trunk' Error:L6850E:Archive contains non ELF Object gui_ems_input.obj make[1]:***[build/T210_VIDEO_09B/gprs/MT6253o/lib/mmi_framework.lib] Error1 make[1]:Leaving directory 'E:/T210_VIDEOCON/Trunk' 】这个错误的解决方案是:删除掉gui_ems_input.obj,重新【remake】;如果仍然报错,那么就执行【make clean】清理一下,清理完成后,执行【make custom=项目名称 gprs New】 3.【Error: L6850E: Archive contains non ELF Object AGPSSUPLOTAP.obj make[2]: *** [build/MTK53_09A_GEMINI/gprs/MT6253o/lib/mmi_app.lib] Error 1】找到AGPSSUPLOTAP.obj删掉就可以了。 【../../../custom/app/MTK53_09A_GEMINI_BB/nvram_user_config.c:399: error: incompatible types in initialization ../../../custom/app/MTK53_09A_GEMINI_BB/nvram_user_config.c:399: error: initializer element is not constant ../../../custom/app/MTK53_09A_GEMINI_BB/nvram_user_config.c:399: error: (near initialization for `logical_data_item_table_cust[2].description') ../../../custom/app/MTK53_09A_GEMINI_BB/nvram_user_config.c:399: error: initializer element is not constant ../../../custom/app/MTK53_09A_GEMINI_BB/nvram_user_config.c:399: error: (near initialization for `logical_data_item_table_cust[2]') ../../../custom/app/MTK53_09A_GEMINI_BB/nvram_user_config.c:403: error: initializer element is not constant ../../../custom/app/MTK53_09A_GEMINI_BB/nvram_user_config.c:403: error: (near initialization for `logical_data_item_table_cust[3]') make[1]: *** [nvram_user_config.o] Error 1 NVRAM_AUTO_GEN_ERROR_2 】 解决方案是:找到nvram_user_config.c文件,找到399行,把NVRAM_EF_ZERO_DEFAULT,改成NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT)。 4.和资源有关的,而且new过之后,那么改资源了就用这个命令:zhu.bat resgen ,完成后执行zhu.bat remake mmiresource resgen生成的是字符串,图片之类的资源,mmiresource里边则是一些menuID,和resgen息息相关。 5.flash_tool使用教程: 1.打开flash_tool.exe 2.配置Dowmload Agel,点击打开个对话框,选择MTK_AllInOne_DA.bin文件。 3.配置scantter-loading,点击打开对话框,选择scatMTK53_09A_GEMINI.txt。 4.要是你是数据线连接的用户,那么选择Option/USB Download/Readback. 5.点击download 6.连接手机 6.项目总宏可以加在proj_name.mak和option.mak其中一个,到底加哪个看客户需求。 7.修改.mak文件后,必须new 8.如新加了#include...后发现很多在一起的变量没定义,可以把该句移到其他#include背后。 9.make[2]: *** No rule to make target `hdm_public.obj', needed by `build/MTK53_09A_GEMINI/gprs/MT6253o/lib/mmi_app.lib'. Stop.这个错误的原因是没有hdm_public.c文件,但是 是却在mmi_app.lis里边加了路劲。导致编译时无法生成.obj文件。解决方法:到mmi_app.lis文件中搜索hdm_public.c,找到后注释掉(注释不行就删掉)mmi_app.lis加的路径. plutommi\mmi\Hdm\hdm_public.c plutommi\mmi\Hdm\hdm_comm.c 找到这个文件mmi_app.pth,搜索hdm,删掉。这个文件mmi_app.inc,也一样搜索hdm删掉。 10.makefile文件路径里边不允许有空格。 11. make[1]: Entering directory `E:/MTK6225_08A_DRAGON30_RAW' Error: L6850E: Archive contains non ELF Object wmaControl.obj make[1]: *** [build/LENOVO25_08A/gprs/MT6225o/lib/jblendia.lib] Error 1 make[1]: Leaving directory `E:/MTK6225_08A_DRAGON30_RAW' 原因:就是make的时候,强制被关掉,导致生成wmaControl.obj的字节为0 解:将wmaControl.obj 删除后再remake ,ok! 12. "plutommi\mmi\jt_mdl\src\GodUtil.c", line 3482: Error: C2456E: undeclared name, inventing 'extern int NVRAM_GOD_NTF_INFO' "plutommi\mmi\jt_mdl\src\GodUtil.c", line 3566: Error: C2456E: undeclared name, inventing 'extern int NVRAM_GOD_APP_INFO' 13.D:/WORK/MTK/6253_09A_A200/plutommi/Customer/ResGenerator/../../MMI/Resource/PopulateRes.c:2592: undefined reference to `populate_R2Gmusic_res' 主要是没有将移植包中的porting \res_R2Gmusic.c文件放到plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI目录下导致出错的。 14.平台不能多开,否则会报意想不到的错误。 15. 1、mtk_resgenerator.exe不能正常运行。可能是ResGenerator文件夹中的某些文件有错误。一个原因是在ResGenerator文件夹中缺少temp.rgb这个文件,并且不能自动生成。 2、240X320屏的Font_res.c文件的错误,因为打开了中文字体的编译开关,只需要将mmi_featurespluto.h文件中__MMI_LANG_SM_CHINESE__的编译开关关闭即可。 3、出现以下错误,"plutommi\mmi\FunAndGames\FunAndGamesSrc\Game.c", line 349: Error: C2455E: array [0] found "plutommi\mmi\FunAndGames\FunAndGamesSrc\Game.c", line 350: Error: C2455E: array [0] found 因为默认的240X320屏幕打开的关于游戏的编译开关下没有游戏,所以需要打开mmi_featurespluto.h文件中的__MMI_GAME_VSMJ_240x320__编译开关。 4、现象:mmiresource模块生成错误: "plutommi\Customer\custresource\custimgmapext.c", line 31: Error: C2456E: undeclared name, inventing 'extern int MAX_IMAGE_IDS' "plutommi\Customer\custresource\custimgmapext.c", line 31: Serious error: C2958E: illegal in constant expression: non constant 'MAX_IMAGE_IDS' plutommi\Customer\custresource\custimgmapext.c: 0 warnings, 1 error, 1 serious error 原因:改变了屏幕大小后,128X160目录下的图片资源有问题。 解决办法:更换128X160目录下的图片资源,重新编译此模块。 5、现象:Free clusters are NOT enough . Check ckSysDrv.log for detail ! Tools\make.exe: *** [cksysdrv] Error 1 解决办法:删除掉\custom\system\CCDH26_05C_BB目录下的 custom_EMI.c custom_EMI.h flash_opt.h 三个文件。 6、现象:在新加模块的.c文件中引用一个b.h,产生b.h中的aaa变量没有定义的错误,具体错误如下: 原因:没有包含定义aaa变量的头文件a.h。 解决办法:在include b.h之前include a.h 7、现象:"plutommi\Customer\custresource\CustImgDataHW.h", line 19361: Serious error: C2934E: duplicate definition of '________CUSTOMER__IMAGES__EMPTYIMAGE_BMP' 原因: 解决办法:删掉CustImgDataHW.h这个文件重新编译 Serious error: C2337E: Misplaced '{' at top level - ignoring block这个问题是你把自己的代码,加到了方法外面去。 8、现象:在链接bin文件时,出现以下错误: Error: L6218E: Undefined symbol custom_setAdvEMI (referred from bootarm.obj). 原因:custominfo.pl文件没有修改,默认只打开CCDH26_05C_GPRS.mak一个文件,并不打开其它定义编译开关的文件,导致custom模块中的有些文件没有编译,所以一些变量在最后链接时显示未定义。 解决办法:修改custominfo.pl文件。 8、现象:编译某个模块,出现错误: Error: L6218E: Error: C2933E: type disagreement for 'mmi_phb_info_entry_list' 原因:调用mmi_phb_info_entry_list函数时传递的参数不正确,或者是函数mmi_phb_info_entry_list在调用时还未定义。 解决办法:修改custominfo.pl文件。 9、现象:编译时出现字符串未定义的错误, enum_list.h:2046: error: `STR_ENTERTAINMENT_EXPLAIN_WOMANKNOWLEDGE' undeclareere (not in a function) 原因:可能是编译开关没打开,或者是正在使用excel表,readexcel.c中没有添加相关的头文件。 还有一种可能是在使用这个字符串ID的模块的make底下的.inc文件中没有将定义这个字符串的头文件路径加上。还要注意防止头文件引用的宏定义是不是重复。 Such as : compile block ----Con_app Error:make[1]: *** No rule to make target `Hai_Extern.obj', needed by `build/GXQ26_07B/gprs/MT6226o/lib/conn_app.lib'. Stop. Reason: 1.在make文件中添加了 Hai_Extern.c文件的编译,但在对应的文件目录下找不到对应的.c文件。 2.在make文件中没添加生成Hai_Extern.obj目标文件的源文件.c或.h. Compile block ----mmi_app Error: "plutommi\mmi\ebookreader\ebookinc\EbookProt.h", line 29: Error: C2456E: undeclared name, inventing 'extern int GUI_SHARED_BYTES' "plutommi\mmi\ebookreader\ebookinc\EbookProt.h", line 29: Serious error: C2958E: illegal in constant expression_r_r: non constant 'GUI_SHARED_BYTES': Solve mothed:查找GUI_SHARED_BYTES 是否有定义,没有定义则需要添加定义,以及定义为constant是否正确。 Compile block ----mmi_framework Error: "plutommi\mmi\ebookreader\ebookinc\EbookProt.h", line 173: Warning: C2816W: Unbalanced #if/#ifdef/#ifndef/#endif in file Solve mothed: check Number of #endif and #if Compile block--- custom Error: "custom\system\GXQ26_07B_BB\custom_sap.h", line 68: Serious error: C2933E: type disagreement for 'MSG_ID_CUSTOM1_CUSTOM2' "custom\system\GXQ26_07B_BB\custom_sap.h", line 68: Serious error: C2934E: duplicate definition of 'MSG_ID_CUSTOM1_CUSTOM2' "custom\system\GXQ26_07B_BB\custom_sap.h", line 69: Serious error: C2933E: type disagreement for 'MSG_ID_CUSTOM2_CUSTOM1' "custom\system\GXQ26_07B_BB\custom_sap.h", line 69: Error: C2991E: linkage disagreement for 'MSG_ID_CUSTOM2_CUSTOM1' - treated as 'extern' "custom\system\GXQ26_07B_BB\custom_sap.h", line 71: Serious error: C2933E: type disagreement for 'MSG_ID_TTSPLAYER_SERVICEOPEN' "custom\system\GXQ26_07B_BB\custom_sap.h", line 71: Error: C2991E: linkage disagreement for 'MSG_ID_TTSPLAYER_SERVICEOPEN' - treated as 'extern' Solve mothed: 检查编译文件是否重复包含custom_sap.h文件 Error: 在生成database BPLGU文件出错原因 可能是因为缺少 以下三个文件:造成。 BPLGUInfoCustomApp_MT6226_S01_MAUI_07B_W08_16_MP_V2 BPLGUInfoCustomApp_MT6226M_S01_MAUI_07B_W08_16_MP_V2 BPLGUInfoCustomApp_MT6227_S01_MAUI_07B_W08_16_MP_V2 还有其他原因造成,则需要查build\log下log文件根据提示的错误信息来更改工程文件。 Error: 编译某个文件时提示 can not open XXX.h文件 Solve mothed: 1. 在make 文件中修改对应的XXXinc文件,添加对.h文件的编译 2. 在.h文件中包含的字符、变量、函数等,用extern 对其进行定义。 Error: L6218E: Undefined symbol Image$$ZI$$Limit (referred from sys_stackheap.o). Not enough information to produce a SYMDEFs file. Finished: 1 information, 36 warning and 1 error messages. 错误原因: 这个问题我们之前是有遇到过的,我记得是以为nativeInterface.c文件中以下三个函数写为空函数,即可编译通过。 void printfString(const char* message,const nano_u2* buffer,nano_s4 iLength) void printfByteArray(const char* message,const nano_u1* buffer,nano_s4 iLength) void printfShortArray(const char* message,const nano_u2* buffer,nano_s4 iLength) 这个问题是由于代码或者Lib中调用了 C Lib的malloc或者类似于strdup,printf 这样的会调用malloc的C Lib function 引起的。MTK Platform不支持 C lib的malloc,而用 Ctrl Buffer机制代替了malloc,以便于调试memory leak问题。 ERROR: "LCMMI\MMI\FUNCTIONCONTROL\INC\FunctionControl.h", line 22: Serious error: C2933E: type disagreement for 'NANO_NORMAL_STATE' "LCMMI\MMI\FUNCTIONCONTROL\INC\FunctionControl.h", line 22: Serious error: C2934E: duplicate definition of 'NANO_NORMAL_STATE' "LCMMI\MMI\FUNCTIONCONTROL\INC\FunctionControl.h", line 23: Serious error: C2933E: type disagreement for 'NANO_NEW_MSG_STATE' "LCMMI\MMI\FUNCTIONCONTROL\INC\FunctionControl.h", line 23: Serious error: C2934E: duplicate definition of 'NANO_NEW_MSG_STATE' "LCMMI\MMI\FUNCTIONCONTROL\INC\FunctionControl.h", line 24: Serious error: C2933E: type disagreement for 'NANO_GET_MSG_STATE' "LCMMI\MMI\FUNCTIONCONTROL\INC\FunctionControl.h", line 24: Serious error: C2934E: duplicate definition of 'NANO_GET_MSG_STATE' "LCMMI\MMI\FUNCTIONCONTROL\INC\FunctionControl.h", line 26: Serious error: C2933E: type disagreement for 'NANO_DEL_MSG_STATE' "LCMMI\MMI\FUNCTIONCONTROL\INC\FunctionControl.h", line 26: Serious error: C2934E: duplicate definition of 'NANO_DEL_MSG_STATE' "LCMMI\MMI\FUNCTIONCONTROL\INC\FunctionControl.h", line 26: Serious error: C2933E: type disagreement for 'NANO_MSG_STATE' 错误原因:重复包含 FunctionControl.h 文件,导致在.h文件中定义的struct 在其他文件调用时一直出错。注意:.h文件一定不能重复包含,否则编译通不过。 1564519681: 2009-08-03 14:24:56 ERROR: Compiling plutommi/mmi/miscframework/miscframeworksrc/pwroncharger.c ... "custom\drv\LCD\GXQ23_08B_LCM\lcd_sw_inc.h", line 105: Warning: C2220W: Superfluous ',' in 'enum' declaration "plutommi\mmi\GPS\GPSInc\GPS.h", line 291: Warning: C2220W: Superfluous ',' in 'enum' declaration "plutommi\mmi\miscframework\miscframeworksrc\pwroncharger.c", line 993: Warning: C2207W: inventing 'extern int GPIO_WriteIO();' "plutommi\mmi\miscframework\miscframeworksrc\pwroncharger.c", line 1010: Warning: C2207W: inventing 'extern int pmu_set_gled();' "plutommi\mmi\miscframework\miscframeworksrc\pwroncharger.c", line 1318: Warning: C2870W: variable 'Error' declared but not used "plutommi\mmi\miscframework\miscframeworksrc\pwroncharger.c", line 1604: Error: C2933E: type disagreement for 'CHECK_MO_ALLOW' "plutommi\mmi\miscframework\miscframeworksrc\pwroncharger.c", line 1635: Error: C2933E: type disagreement for 'IS_LOW_BATTERY' "plutommi\mmi\miscframework\miscframeworksrc\pwroncharger.c", line 2032: Warning: C2207W: inventing 'extern int gps_pwdown_contol();' plutommi\mmi\miscframework\miscframeworksrc\pwroncharger.c: 6 warnings, 2 errors, 0 serious errors 错误原因: 在 FunctionControl.h中定义的 #define BOOL char 和系统中其他文件定义的 #define BOOL unsigned char 不一致导致 ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 编译模拟器常用的几个命令: new_modis: 是全新构建整个工程的PC模拟版,其调用VC的编译器和链接器得到一个可以在windows上运行的PC模拟版。 MMI应用软件工程师可以在没有硬件板的情况下在PC上检查和调试自己写好的应用。 gen_modis: 产生vc工程文件。常用。 remake_modis:重新编译整个工程的PC版。 ---------------------------------------------------------------------------------------------------------------------------------------------------------------- L4是MMI/AT和协议栈的适配层。 ATCI是AT命令解析器。 UEM是用于抽象如键盘、LED、通用输入/输出等基本设备,是用户设备模块。 PHB就是电话本。 SMU是安全管理单元(SIM、STK)。 CSM是呼叫服务管理。 RAC是登记访问控制。 SMSAL是SMS应用层。 内核服务包括定时器、任务管理和进程间通信、资源和内存管理、日志和异常处理。OSL是封装OS API的层,而KAL则是封装内核的层,应当在OSL以上来开发。 数据类型定义(VRE的头会比MTK更乱吗?) * 基本数据类型:kal_non_specific_general_types.h。 * KAL相关的定义:kal_release.h。(好变态的名字,对不对啊?) * MMI任务中和OSL相关的数据类型定义:PixtelDataTypes.h。 任务之间的通信是通过SEND_ILM来完成的,从实现来看是通过一个消息队列来完成的,关注struct ilm_struct定义,SAP是业务访问点。发送消息之前,首先要把本地参数缓冲区分配出来,然后赋值发送请求。 Highlight事件是用户通过键盘触发的事件,与提示信息关联。 SetProtocolEventHandler实际上就是MMI FRAMEWORK提供的回调函数注册工具,与MMI相关的所有事件都可以通过这个函数登记——包括网络。 按键码需要注意的几个特殊键:KEY_END是挂机键、KEY_SEND是摘机键。 MMI字符串资源的加入: 1)在ref_list.txt中加入字符串。 2)把字符串ID加入到ID枚举中。 3)使用ADD_APPLICATION_STRING2来加入字符串。 4)使用GetString()获得字符串。 5)使用APP_BASE来保证字符串ID的唯一性。 图片资源的加入: 1)把图片加入应用程序目录。 2)把图片ID加入枚举类型中。 3)使用ADD_APPLICATION_IMAGE2来加入图片资源。 4)绘图时就可以直接使用图片ID来绘制了。 5)使用APP_BASE来保证图片ID的唯一性。 MMI各模块对应的目录: Idle Screen:plutommi\mmi\IdleScreen Main Menu:plutommi\mmi\MainMenu Phone Book:plutommi\mmi\PhoneBook Messages:plutommi\mmi\Messages Call History:plutommi\mmi\Calls Call Management:plutommi\mmi\CallManagement Setting:plutommi\mmi\Setting File Manager:plutommi\mtkapp\FileMgr Fun &Games:plutommi\mmi\FunAndGames User Profiles:plutommi\mmi\PROFILES Organizer:plutommi\mmi\Organizer Services:plutommi\mmi\SAT Shortcuts:plutommi\mmi\Shortcuts Audio Player:plutommi\mtkapp\AudioPlayer Camera:plutommi\mtkapp\Camera FMRadio:plutommi\mtkapp\FMRadio Photo Editor:plutommi\mtkapp\PhotoEditor Sound Recorder:plutommi\mtkapp\SoundRecorder MMI特性定义文件在mcu\plutommi\Customer\CustResource\MMI_features[PROJ].h。 菜单的定义在GlobalMenuItems.h中。 ---------------------------------------------------------------------- MTK平台入门 1 简介 1.1 目的及其应用范围 本文档介绍了mtk平台的一些基础应用和实现,适用于刚参加mtk软件开发人员 1.2 术语定义 MMI – Man-machine interface,人机界面 FMI – Feature rich MMI 1.3 参考资料 [1] MMI High level design specification, pixtel 2 平台安装: 2.1 安装ads1.2 2.2 安装perl 2.3 安装usb 驱动,用于下载 3 编译命令: 通过 new, update, remake, clean all, clean modules, codegen. 来动作生成bin file (二进字文件) 类如: 假设项目是gsm项目,项目名称为m720,则有这些命令: make custom=m720 gsm resgen(修改了资源时用这个命令生成新资源) make custom=m720 gsm remake(用于生成bin档即可烧录到手机的文件) make custom=m720 gsm clean custom(把custom模块生成的obj文件删除) make custom=m720 gsm update custom(update custom 模块) make custom=m720 gsm new(等于执行了前三个步骤,即clean、resgen、remake) make custom=m720 gsm update mmiresource(更新了资源但不会更新代码) 4 添加一个字符串: 首先给该字符串起一个名字,即ID:如STR_GLOBAL_OK,这个即是一个字串的id也就是名字,而这个字串的具体内容(比如STR_GLOBAL_OK的内容是“Ok”),可以用下面的语句来添加, ADD_APPLICATION_STRING2(STR_GLOBAL_OK, "Ok","Global String- OK"); 如果有对应的中文字符,则应在ref_list.txt中按照固定的格式添加中文字串。如: STR_GLOBAL_OK GLOBAL 6 Global String- OK Ok 確定 确定 5 添加一个菜单: 首先给这个菜单起一个名字,即ID:如ORGANIZER_CALENDER_MENU,这个即是一个菜单的id也就是名字,但要把这个菜单加入到某个父菜单之下,则须指定其父菜单,方式可以参照:ORGANIZER_CALENDER_MENU这个菜单的方法,在res_mainmenu.c里, ADD_APPLICATION_MENUITEM((MAIN_MENU_ORGANIZER_MENUID,IDLE_SCREEN_MENU_ID,ORG_ENUM_TOTAL, #if defined(__MMI_CALENDAR__) ORGANIZER_CALENDER_MENU, #endif #if defined(__MMI_TODOLIST__) ORGANIZER_TODOLIST_MENU, #endif ORGANIZER_ALARM_MENU, #if defined (__MMI_WORLD_CLOCK__) ORGANIZER_WORLDCLOCK_MENU, #endif #ifdef __MMI_MESSAGES_CLUB__ MAIN_MENU_SHORTCUTS_MENUID, #endif #ifdef __SLT_LONG_DISTANCE_DDD__ MENU_LONG_DISTANCE_DDD, #endif SHOW,MOVEABLEACROSSPARENT,DISP_LIST, MAIN_MENU_ORGANIZER_TEXT,MAIN_MENU_ORGANIZER_ICON)); 这个语句说明菜单ORGANIZER_CALENDER_MENU是菜单MAIN_MENU_ORGANIZER_MENUID的子菜单。而在res_organizer.c里, ADD_APPLICATION_MENUITEM((ORGANIZER_CALENDER_MENU,MAIN_MENU_ORGANIZER_MENUID, 3, MENU_GOTO_TASK_CAL, MENU_ID_CLNDR_JUMP_TO_DATE, MENU_CAL_TYPE, SHOW, MOVEABLETOSHORTCUT,DISP_LIST, ORGANIZER_MENU_CALENDER_STRINGID,ORGANIZER_MENU_CALENDER_IMAGEID)); 这个语句则声明了ORGANIZER_CALENDER_MENU菜单所拥有的子菜单。 1. 关于宏ADD_APPLICATION_STRING2()、ADD_APPLICATION_MENUITEM()可以参考文件Writing Applications Using Pixtel MMI Platform.pdf 更深入的了解可以查看文件夹Document\MMI Design Documents\Pixtel下的文件。 6 下载程序: 在当前工程build文件夹中找到对应的项目,打开项目文件夹,里面有*.bin文件就是我们要下载的文件。 7 编译错误信息查看: 如果在编译中某一模块编译不通过,我们可以在build\项目名称\log 中查看log信息 8 模拟器运行: 首先安装好VC,然后直接运行工程目录下的PLUTOMMI\mmi\PixtelMMI.dsw文件,先编译资源文件,然后执行运行就可以了。 9 修改铃声资源: 一般项目开发修改的铃声资源主要是来电铃声,开关机铃声,翻合盖提示音,信息提示音 9.1.修改来电闹钟铃声资源: 修改的文件是custpack_audio.c中 const custpack_audio_header custpack_audio = { 15, { {Y300Mid01_mp3, sizeof(Y300Mid01_mp3), 5}, {Y300Mid02_mid, sizeof(Y300Mid02_mid), 17}, {Y300Mid03_mid, sizeof(Y300Mid03_mid), 17}, {Y300Mid04_mid, sizeof(Y300Mid04_mid), 17}, {Y300Mid05_mid, sizeof(Y300Mid05_mid), 17}, {Y300Mid06_mid, sizeof(Y300Mid06_mid), 17}, {Y300Mid07_mid, sizeof(Y300Mid07_mid), 17}, {Y300Mid08_mid, sizeof(Y300Mid08_mid), 17}, {Y300Mid09_mid, sizeof(Y300Mid09_mid), 17}, {Y300Mid10_mid, sizeof(Y300Mid10_mid), 17}, {Y300Mid11_mid, sizeof(Y300Mid11_mid), 17}, {Y300Mid12_mid, sizeof(Y300Mid12_mid), 17}, {Y300Mid13_mid, sizeof(Y300Mid13_mid), 17}, {Y300Mid14_mid, sizeof(Y300Mid14_mid), 17}, {Y300Mid15_mp3, sizeof(Y300Mid15_mp3), 5}, } custpack_audio 数组 第一个参数是铃声总数 第二个参数是铃声list ,其中包含铃声数据,大小,类型, 铃声数据可以用MCT 这个工具转换,然后代替各个数组的数据,提示最好不要修改数组名称 类型可以在mdi_audio.h 中查找,类如 这里的5 代表mp3,17代表mid 9.2修改开关机铃声,翻合盖提示音,信息提示音 resource_audio.c---------------------开关机铃声,翻合盖提示音,信息提示音 开关机铃声和翻合盖提示音对应的数组是一样的 const audio_resource_struct mtk_resource_sounds[]={ {resource01_mid, sizeof(resource01_mid), 17}, {resource02_mid, sizeof(resource02_mid), 17}, {resource03_mid, sizeof(resource03_mid), 17}, {resource04_mid, sizeof(resource04_mid), 17}, {resource05_mid, sizeof(resource05_mid), 17}, {resource06_mid, sizeof(resource06_mid), 17}, {resource07_mid, sizeof(resource07_mid), 17}, {resource08_mid, sizeof(resource08_mid), 17}, }; 信息提示音对应的数组是: const audio_resource_struct mtk_resource_message_sounds[]={ {message01_mp3, sizeof(message01_mp3), 5}, {message02_mp3, sizeof(message02_mp3), 5}, {message03_mid, sizeof(message03_mid), 17}, {message04_mid, sizeof(message04_mid), 17}, {message05_mid, sizeof(message05_mid), 17}, {message06_mid, sizeof(message06_mid), 17}, {message07_mid, sizeof(message07_mid), 17}, {message08_mid, sizeof(message08_mid), 17}, {message09_mid, sizeof(message09_mid), 17}, {message10_mid, sizeof(message10_mid), 17}, }; 9.3 调整铃声总数和id resource_audio.h--------------------设置铃声id 和总数 铃声ID大小不需要调整,只是根据铃声总数变了,增加或者减少ID 10 修改图片资源: 添加图片资源一般用这个函数:ADD_APPLICATION_IMAGE2,它的参数分别是:图片ID,图片放置路径,图片用途描述。类如: ADD_APPLICATION_IMAGE2( MAIN_MENU_SYSTEM_ICON , CUST_IMG_PATH"\\\\MainLCD\\\\MainMenu\\\\BI_DEGREE\\\\MM_ITEM.gif" , "Icon used for system in mainmenu" ); 图片资源的修改主要分几种情况: 10.1 直接替换图片资源,不需要调整座标:类如开关机动画,墙纸,开关机mp4等,这种修改资源很简单,但是修改时要注意图片来名称和类型与代码中是否匹配。 10.2 修改需要调整座标的图片:如日历,计算器等,这些图片修改需要ID给出座标,然后我们在代码中修改。 10.3 修改用tools生成座标的图片:主要是MP3 ,MP4 ,FM,世界时钟,座标调整可以用mct tools 来做。关于这个工具的使用 10.4 主题的修改也可以mct tools 来做 commands commence before first target makefile时常遇到这样的问题 1. 上一行换行符号 \ 后面有空格 2. 本行前面的空白有非法字符 |
|