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

下载本文档

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

文档简介

MTK程序分析,康勤 2005.9,程序整体结构,程序的封装性,导致能看到的进程不多,很多进程都是以库的形式出现 程序员可以通过MTK提供的模版自己新加线程。在custom_config.c中 在custom_config.c中,通过MTK提供的模版,我们可以推测的出程序其他进程的创建和实现,程序整体结构,可以看到custom_comp_config_tbl结构,从这个结构,我们可以看到跟进程创建有关的需要使用到的一些参数:比如进程创建的入口,进程的堆栈空间大小和地址。 这个是提供给程序员添加新模块时需要使用到的,从这里我们可以推测其他进程的创建也应该是采用通用的方式 以下将举一些可以看到代码的线程进行分析:,程序整体结构,分析FMT模块。 FMT模块和MMI中的MMI_FILEMANAGER有着对应的关系。 可以把FMT模块看成是MMI_FILEMANAGER的底层操作模块。 MMI_FILEMANAGER是FMT的上层MMI管理。,程序整体结构,FMT很简单,但麻雀虽小五脏具全,一个进程应该具有的,它都含有,所以很方便分析 FMT的开始是从fmt_create开始的,这个可以从刚才讲的结构custom_comp_config_tbl中得到结论。在这个结构中需要传入一个进程的入口函数。FMT进程估计就是把fmt_create函数地址给传进去的。,程序整体结构,这个 fmt_create主要作用还是传递入口函数地址:有如下几个函数: fmt_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_ext_q来实现的,这个函数没有给出具体原代码,大家有兴趣可以通过里面的参数来猜想它的实现方式。,程序整体结构,。设置当前活动模块stack_set_active_module_id。 。分发消息,通过消息号,找到对应的消息处理函数,同时传入的参数中可能包含一些需要的参数数据,有时可能是具体数值,有时是全局的数据指针。处理完后封一个消息,发完需要回复的模块(一般是消息发起者模块),程序整体结构,。释放返回消息数据内存区域free_ilm。 到这时一个完整进程执行过程。 这个是一个小的进程的执行过程,其实其他的进行执行过程应该也差不多,虽然表面看起来不同,但实质上应该是一样的 我们来看进程。 这个进程应该也像普通进程一样通过mmi_create来把入口传入进操作系统。,程序整体结构,这个入口也包含了一系列的入口函数地址,其中还是那个MMI_task最为关键,可以称之为心脏或消息泵。 在这个MMI_task里面,虽然看起来很复杂,而且整个结构跟刚才的看起来一点都不像,但如果再深入点去看看代码,去想想,应该发现这个的实质跟刚才那个简单的进程是一样的。 下面对其进行分析:,程序整体结构,。从消息队列中获取消息,用到的是OslReceiveMsgExtQ函数,其实那个只是#define OslReceiveMsgExtQ receive_msg_ext_q这样来的,无非是用了一个来把receive_msg_ext_q替换。这样做的好处:用到的是,这样使很通用,以后要用于别的程序,也很好的移植而不需要重写进程,程序整体结构,。设置当前活动模块,同上面说的一样,使用了OslStackSetActiveModuleID是stack_set_active_module_id的别名。 。分发消息。这里分发消息,有些是在开机前进行的,需要另外处理,比如长按键开机,插入,充电等。另外的一些消息分发处理都是通过ProtocolEventHandler来完成。这个ProtocolEventHandler其实质就是对不同的消息,执行相应的处理函数,只是把这些和处理函数用了一个统一的数据结构来记录和管理,通过一系列接口来供使用者调度,这样就不需要管它如何处理的。使用者只需要设置和其对应的入口函数地址就可以,它的管理程序会把这些都调度好。也是能很好的移植的。,程序整体结构,。释放内存OslFreeInterTaskMsg(不需要再进行解释了,和上面的都一样。 对ProtocolEventHandler,还想说一些,就是那些很多都是在协议中有规定的,类似的还有很多。比如模块,此模块所有的东西基本上都是在协议中规定了的。 从如上两个例子,我们可以看出程序的整体结构不复杂,而且很多时候,模块都是被封装好的,不能对其修改。我们在实际工作中需要用到的其实不多,在这里讲,主要是为了让大家对程序整个结构有个比较系统的了解,对程序的模块理解将有好处的。 如果有必要对多个模块同时修改,比如是需要增加一些消息,这时的工作就好像是在修改一个多线程的程序一样,很多时候都要非常注意变量的读写保护,以及同步互斥操作,相关, 首先要讲的是,这个东西在中可以说是随处可见,我们可以翻译为屏幕,显示页面,或是别的其它的。 不管在哪,凡是需要显示的时候都需要一个。所以在进入一个新页面时,通常都会使用EntryNewScreen函数。,相关,这个东西我们可以这样来理解,可以想象成一幅画的画框,或者是一部电影里面使用到的胶片。用来组织和管理一幅一幅的页面的 不管你画什么东西,都需要一个的支持,当你进入一个新的时,你可以把当前保存到历史记录中,在适当的时候,可以把历史记录中的弹出来,恢复成原来的页面。,相关,有一系列的相关操作。用来维护和管理队列。比如刚才说的EntryNewScreen(进入一个新的页面)。GoBackHistory(返回上一个页面),DeleteScreenIfPresent(删除在历史记录中存在的某个页面记录)等等。这些操作都是方便程序员使用,灵活的管理页面。如果想知道其实现方法,看看这些函数的代码就可以,不是很难。,相关,讲了就不得不讲Category了。 Category常常和连起来使用,就像电影胶片和胶片上的内容的关系。Category这个东西包含了很多东西,但目的就是一个,给程序员快速方便的使用一些常用界面组件。就像做程序时,开发工具中提供的各种不同对话框。,相关,有几百个不同类型的Category,有了这些Category,程序员可以不需要关注于程序界面上的一些事,直接对它进行使用就可以,只需要提供一些参数,比如标题名,左右软键的名字和图片,等。如果感觉不够用,还可以自己写Category,写Category 有统一的格式的,仔细看看,非常简单,十分的方便。,相关,Category 中有一类特殊的Category,里面包含可编辑组件。这些可编辑组件也是由系统提供的,就像编程工具提供的那些 , , 一样,包括:singleline_inputbox,multiline_inputbox, dialer_inputbox等,完全满足程序需要的输入要求,有相应的接口函数及使用流程,使用很方便,可参阅具体代码如函数ShowCategory57Screen。,相关,除了以上这些,相关的公共内容部分没有什么好讲的了。一些具体细节,可参照以前讲过的架构分析。,的,按的分类可以分为种:键盘事件,协议栈事件,计时器事件,高亮显示事件。 下面是一张与其它模块的交互图,的,的,以上这张图是没考虑到时的图,对比下面这张图,我们将很清晰的看出所起的作用,的,的,刚才讲的设置协议栈消息处理函数,的,协议栈消息处理,的,设置键盘消息处理函数,的,键盘中断消息处理,模块分析,下面,将对一个照相功能模块进行分析,来加深对上述内容的印象。因为此模块含有全部代码,便于分析。 首先是mmi_camera_hilight_app函数,此函数是用户选中照相机时执行的函数,在此函数中设置了左软键点击时执行的入口函数mmi_camera_entry_app_screen。 mmi_camera_entry_app_screen中可以看到EntryNewScreen(SCR_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

提交评论