|
发表于 2012-4-4 22:53:00
|
显示全部楼层
以下是引用wangzhengh在2010-1-22 13:36:00的发言:
展讯的代码烂也就算了,开放的东西还比MTK少。
特别是模拟器和LCD这块。自以为有什么很核心的技术,但是给开发者带来的麻烦不是一点两点。
这几天我跟我朋友研究了一下展讯的库,发现某些东西实际上是开源代码来的,不过展讯是做了二次开发,比如lzma.a,应该很容易就把它反向工程了.
展讯的代码,mikal在08年以前作6600D应该还不是mocor平台,那个时候是用codeworrior IDE,用mcp工程文件去组织整个编译控制的,那个时候的特征是编译非常快(直接mcp调用arm cc与link),Bin code的ROM空间很优化,动态消息窗口判断的机制,都是在RAM中执行,很少静态的结构体,代码比较容易阅读,上手比较快;缺点是MMI执行比较慢,比MTK那种静态结构体组织的MMI模块模块方式要慢的多,同样ARM7 78Mhz下效率不如MTK.
在08年以后,特别是到10年,展讯在ARM7平台上的代码进入了一个完善阶段,平台换成MOCOR,利用perl解析make文件控制编译的方式,已经非常接近MTK的开发方式了,优点是各模块编译控制灵活,缺点是编译速度变慢,perl语言解释执行还是不如ADS的IDE上.mcp工程设置.但用make file控制编译宏,用perl脚本控制编译参数与调用编译/开发工具是大趋势,随着工程代码的增加,项目的扩展,你必须用这种组织工程开发模式.当时展讯的代码非常好上手,MTK的软件工程湿去转展讯平台都很容易.
在11年以后,展讯6620代码释放后,软件版本质量又走下坡路了,倒不是因为BUG,而是整个工程代码的控制,由于展讯一直对库比较封锁,所以必须出很多套库来对应各种make模板,由于不开源,导致了版本内部错误的增加,每一个子模块make file的宏不同,所产生的库是不同的,由于这种问题带来的版本维护与二次开发中导致的冲突增多.但其实这种情况是可以避免的,出版本的人也许根本不了解一些API的调用与工程组织结构,如果定义一套完整的API接口,所有工程模板都可以调用,只不过小功能版是全功能版本的子集(如6610_3216<6610_6416<6620_3232<6620_6432<6620_128_32).这限制了平台上二次开发的门槛,因为库封装的原因,有时候你必须逆向工程恢复出原始代码并统一成尽可能少的库函数调用.
PS:我们现在已经把6620的09A_W11.16_P13版本改成了只有两套库(一套对应6610的16Mb RAM,一套对应6620的32Mb RAM)的lib结构,并且恢复了一些展讯原本disable掉的宏功能(我相信展讯是因为版本ROM/RAM size超标的原因而关闭)在小版本6610上开放出来(我们当然逆向工程了库,并且尽可能多地还原成sourcecode,并不会对编译后的代码以及系统有任何不良负作用,有且仅有功能的提升).有想技术切磋的我可以专门开一个专题探讨研究. |
|