《MTK程序分析》ppt课件_第1页
《MTK程序分析》ppt课件_第2页
《MTK程序分析》ppt课件_第3页
《MTK程序分析》ppt课件_第4页
《MTK程序分析》ppt课件_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MTK程序分析程序整体构造程序的封装性,导致能看到的进程不多,很多进程都是以库的形式出现程序员可以通过MTK提供的模版自己新加线程。在custom_config.c中在custom_config.c中,通过MTK提供的模版,我们可以推测的出程序其他进程的创立和实现程序整体构造可以看到custom_comp_config_tbl构造,从这个构造,我们可以看到跟进程创立有关的需要使用到的一些参数:比方进程创立的入口,进程的堆栈空间大小和地址。这个是提供给程序员添加新模块时需要使用到的,从这里我们可以推测其他进程的创立也应该是采用通用的方式以下将举一些可以看到代码的线程进展分析:程序整体构造分析FM

2、T模块。FMT模块和MMI中的MMI_FILEMANAGER有着对应的关系。可以把FMT模块看成是MMI_FILEMANAGER的底层操作模块。 MMI_FILEMANAGER是FMT的上层MMI管理。程序整体构造FMT很简单,但麻雀虽小五脏具全,一个进程应该具有的,它都含有,所以很方便分析FMT的开场是从fmt_create开场的,这个可以从刚刚讲的构造custom_comp_config_tbl中得到结论。在这个构造中需要传入一个进程的入口函数。FMT进程估计就是把fmt_create函数地址给传进去的。程序整体构造这个fmt_create主要作用还是传递入口函数地址:有如下几个函数:fm

3、t_task_main,/* task entry function */fmt_init,/* task initialization function */NULL,/* task configuration function */fmt_reset,/* task reset handler */NULL,/* task termination handler */程序整体构造我们需要关注的是fmt_task_main函数。这个函数可以说是整个进程的心脏。它里面包含一个消息泵,就是一个无限循环,不停从消息队列中获取消息分发消息:。从消息队列中获取消息,通过函数receive_msg_ex

4、t_q来实现的,这个函数没有给出详细原代码,大家有兴趣可以通过里面的参数来猜测它的实现方式。程序整体构造。设置当前活动模块stack_set_active_module_id。分发消息,通过消息号,找到对应的消息处理函数,同时传入的参数中可能包含一些需要的参数数据,有时可能是详细数值,有时是全局的数据指针。处理完后封一个消息,发完需要回复的模块一般是消息发起者模块程序整体构造。释放返回消息数据内存区域free_ilm。到这时一个完好进程执行过程。这个是一个小的进程的执行过程,其实其他的进展执行过程应该也差不多,虽然外表看起来不同,但本质上应该是一样的我们来看进程。这个进程应该也像普通进程一样通

5、过mmi_create来把入口传入进操作系统。程序整体构造这个入口也包含了一系列的入口函数地址,其中还是那个MMI_task最为关键,可以称之为心脏或消息泵。在这个MMI_task里面,虽然看起来很复杂,而且整个构造跟刚刚的看起来一点都不像,但假如再深化点去看看代码,去想想,应该发现这个的本质跟刚刚那个简单的进程是一样的。下面对其进展分析:程序整体构造。从消息队列中获取消息,用到的是OslReceiveMsgExtQ函数,其实那个只是#define OslReceiveMsgExtQreceive_msg_ext_q这样来的,无非是用了一个来把receive_msg_ext_q交换。这样做的好

6、处:用到的是,这样使很通用,以后要用于别的程序,也很好的移植而不需要重写进程程序整体构造。设置当前活动模块,同上面说的一样,使用了OslStackSetActiveModuleID是stack_set_active_module_id的别名。分发消息。这里分发消息,有些是在开机前进展的,需要另外处理,比方长按键开机,插入,充电等。另外的一些消息分发处理都是通过ProtocolEventHandler来完成。这个ProtocolEventHandler其本质就是对不同的消息,执行相应的处理函数,只是把这些和处理函数用了一个统一的数据构造来记录和管理,通过一系列接口来供使用者调度,这样就不需要管它

7、如何处理的。使用者只需要设置和其对应的入口函数地址就可以,它的管理程序会把这些都调度好。也是能很好的移植的。程序整体构造。释放内存OslFreeInterTaskMsg&Message;不需要再进展解释了,和上面的都一样。对ProtocolEventHandler,还想说一些,就是那些很多都是在协议中有规定的,类似的还有很多。比方模块,此模块所有的东西根本上都是在协议中规定了的。从如上两个例子,我们可以看出程序的整体构造不复杂,而且很多时候,模块都是被封装好的,不能对其修改。我们在实际工作中需要用到的其实不多,在这里讲,主要是为了让大家对程序整个构造有个比较系统的理解,对程序的模块理解将有好处

8、的。假如有必要对多个模块同时修改,比方是需要增加一些消息,这时的工作就好似是在修改一个多线程的程序一样,很多时候都要非常注意变量的读写保护,以及同步互斥操作相关首先要讲的是,这个东西在中可以说是随处可见,我们可以翻译为屏幕,显示页面,或是别的其它的。不管在哪,但凡需要显示的时候都需要一个。所以在进入一个新页面时,通常都会使用EntryNewScreen函数。相关这个东西我们可以这样来理解,可以想象成一幅画的画框,或者是一部电影里面使用到的胶片。用来组织和管理一幅一幅的页面的不管你画什么东西,都需要一个的支持,当你进入一个新的时,你可以把当前保存到历史记录中,在适当的时候,可以把历史记录中的弹出

9、来,恢复成原来的页面。相关有一系列的相关操作。用来维护和管理队列。比方刚刚说的EntryNewScreen进入一个新的页面。GoBackHistory返回上一个页面,DeleteScreenIfPresent删除在历史记录中存在的某个页面记录等等。这些操作都是方便程序员使用,灵敏的管理页面。假如想知道其实现方法,看看这些函数的代码就可以,不是很难。相关讲了就不得不讲Category了。Category常常和连起来使用,就像电影胶片和胶片上的内容的关系。Category这个东西包含了很多东西,但目的就是一个,给程序员快速方便的使用一些常用界面组件。就像做程序时,开发工具中提供的各种不同对话框。相

10、关有几百个不同类型的Category,有了这些Category,程序员可以不需要关注于程序界面上的一些事,直接对它进展使用就可以,只需要提供一些参数,比方标题名,左右软键的名字和图片,等。假如感觉不够用,还可以自己写Category,写Category 有统一的格式的,仔细看看,非常简单,非常的方便。相关Category 中有一类特殊的Category,里面包含可编辑组件。这些可编辑组件也是由系统提供的,就像编程工具提供的那些,一样,包括:singleline_inputbox,multiline_inputbox, dialer_inputbox等,完全满足程序需要的输入要求,有相应的接口函

11、数及使用流程,使用很方便,可参阅详细代码如函数ShowCategory57Screen。相关除了以上这些,相关的公共内容部分没有什么好讲的了。一些详细细节,可参照以前讲过的架构分析。的按的分类可以分为种:键盘事件,协议栈事件,计时器事件,高亮显示事件。下面是一张与其它模块的交互图的的以上这张图是没考虑到时的图,比照下面这张图,我们将很明晰的看出所起的作用的的刚刚讲的设置协议栈消息处理函数的协议栈消息处理的设置键盘消息处理函数的键盘中断消息处理模块分析下面,将对一个照相功能模块进展分析,来加深对上述内容的印象。因为此模块含有全部代码,便于分析。首先是mmi_camera_hilight_app函

12、数,此函数是用户选中照相机时执行的函数,在此函数中设置了左软键点击时执行的入口函数mmi_camera_entry_app_screen。mmi_camera_entry_app_screen中可以看到EntryNewScreenSCR_ID_CAMERA_APP。在这个函数中初始化相关的东西,为下面图像显示做准备。并进展状态检测,假如没问题,那么进入状态。这里要说的CAMERA_ENTER_STATE函数,进入到不同的状态使用不同的参数。模块分析进入到状态实际上是执行到了mmi_camera_entry_preview_state函数。这这里,设置好按键处理程序,mmi_camera_preview_startmdi_camera_preview_startmdi_camera_preview_start_internalmedia_cam_preview到了media_cam_preview里,模块发消息给模块。并且把线呈挂起,阻塞在那,只有等有消息回应才继续执行模块分析我们可以看到med_main函数,这个函数是模块的消息泵,此时消息恳求进入cam_preview_req_hdlr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论