option文件配置arm
命令:armar.o文件或.obj文件做成lib
添加一个模块:
option文件里:
complist+=模块;
CUS_REL_MTK_COMP+=模块;
建文件夹,同样新建四个文件,参照mmi_app文件夹
宏控放在模块目录def文件的话只作用于当前模块
宏控放在option就作用于整个项目
手机默认是4个字节对齐的
手机和模拟器用的系统是不一样的
createModis.ini
模拟器生成不了的话,并且通过vc编译器发现有的模块没有加载进来,就看下createModis.ini,把没有加载进来的模块宏控放在[DISABLE_OPTION]里
项目的名字:custom/system/项目名字
手动make命令:make项目名字gprs//makegprs版本的项目
链接出错也写在log日志里,bulid目录下的MTK版本名的名字的log文件里
如果一直提示某个obj或者o文件有错误,就把bulid目录下对应的那个obj或者o文件删除掉重新编译即可
如果出现某个头文件找不到的错误,并且那个头文件确实加进去了,把dep文件删除有可能会好
libs文件加在modis目录下,有个libs文件,不要忘记加入vc6工程
有些时候可能碰到某些宏重定义或者函数重定义,可能是因为某些定义文件在工程中加入到了错误的模块中
有时可能出现win32的类型重复定义错误,原因可能是win32的头文件包含顺序有问题
system_inc.h文件里内容是手机开了哪些任务
gdi比较稳定,gui的代码可能被第三方改动过,所以做MMI开发最好多用gdi
customl_create.c文件中custom_main()是任务机制的例子
屏幕模板仅供参考,MMI控件一般都自己做
C语言函数一般都可以使用,但是可能会处理内存的函数就不能用
做MMI应用中用到的坐标类型数据不要写死,以便于以后换分辨率减少工作量,用宏定义
不建议用第三方或者系统的宏定义
项目开发的大致流程:
产品定义文档:
分析功能、定义操作流程
概要设计:
划分模块、数据定义
详细设计
接口定义(或直接写到头文件里头)
写代码
测试
单元测试代码(一般写到单独的文件夹里)
1.判断某个开关是否打开,不需要搜索该开关,只要在开关所控制的范围内输入非法语句,编译过则说明该开关是关闭的。
2.在remake之前,记得先编译资源。
3.模拟器上可以联网。
4.想强制编译某个文件可以把对应的obj文件删除掉。
5.资源文件名必须得Res_开头,同时要注意少用大写字母,否则会出问题。
6.makefile文件中不能使用空格,可以用Tab键代替。
7.当遇到菜单等显示不正常时,可以考虑new一次。
8.每天最好new一次,最好在真机上跑两次。
9.不能在for循环等进行trace操作,否则会显示不出来。
10.某个全局变量莫名其妙得被改变了,可能是数组越界访问到了该变量的内存空间。可以在定义该全局变量的语句处上下定义一些变量进行保护,以验证问题的原因。
11.修改*.lis文件,只需要remake。
12.加上一个.c文件后,只需要用gen_modis语句,生成模拟器后只需要build。
修改.mak文件一定要new,修改语言一定要new,所以一般情况下不要改.mak文件
烧机前要看bulid的bin文件修改日期是否正确
模拟器上运行的默认是有SIM卡的效果,如果烧机后发现效果没有显示出来就插上SIM卡试下,双卡双待的话插两个中的任意一个
模拟器上调试正常后烧机之前要先remake一下
编modis的时候,new到写第一个log的时候,就可以停下来new_modis了
然后在MakeModis到写第一个log的时候,就可以停下来用vc编了
移植流程:
先把项目整个放在MMI自己的模块里面,然后加入编译目录,然后运行看哪里有错误,如果错误解决不了,就要在原本的平台上,跑一次,看看框架流程是怎样关联起来的。具体的游戏逻辑不需要了解,但是之间的调用关系,要调试跟踪下看看。然后,在MTK上,把框架搭起来,在按照功能模块,一个一个的填充。
源代码能不动就不动~
MTK有自己的一套绘图,读写文件以及等等,这些是肯定要改得
先移植一些工具文件(例如Util.c),把里面的底层一些函数,都改成MTK下的
MMI模板ID定义是在wgui_categories_defs.h中,可以用来参考原有屏幕模板是怎么实现的
关闭某个模块:
在项目目录下make目录下项目名_GPRS.mak文件里
文件管理模块
filemgr.c,filemgrui.c
MMI_BOOL MMI_TRUE = 1 MMI_FALSE = 0
MBOOL FALSH TRUE
FALSE = 0 TRUE = 1
ST_SUCCESS 1 ST_FAILURE 0
typedef char S8;
typedef char *PS8;
typedef unsigned char U8;
typedef unsigned char *PU8;
typedef unsigned short pBOOL;
typedef short int S16;
typedef short int *PS16;
typedef unsigned short int U16;
typedef unsigned short int *PU16;
typedef int S32;
typedef int *PS32;
typedef unsigned int U32;
typedef unsigned int *PU32;
typedef float float32;
typedef unsigned __int64 U64;
typedef __int64 S64;
typedef unsigned int UINT;
typedef double DOUBLE;
typedef float FLOAT;