您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > MTK手机平台中间件的设计与实现答辩稿
MTK手机平台中间件的设计与实现指导老师:汤彬姓名:王卡风专业:计算机软件与理论学号:7082202大纲提要•技术现状•功能手机中间件的关键技术•MTK平台手机中间件的具体设计•中间件性能分析及产品示例•总结与展望1.技术现状�1.1MTK手机平台及其应用程序开发现状MTK上的应用程序多数是基于人机交互界面层MMI来开发,常用两种开发设计方式:(1)直接调用开放代码层或核心适配层KAL的函数接口:(2)为开放代码层或核心适配层函数包含通用接口变成自有的统一开发接口:开源代码层(queue.c)KAL层(stack_ltlcom.obj)Nucleus层(quc.c)MTK软件架构层次1.2功能手机中间件开发现状一种是SUN主推的J2ME,以软件虚拟机来运行JAVA程序;第二种中间件是支持机器码动态装载的二进制兼容平台;1.3手机模拟器开发现状PC机器上不支持2个MIDI同时播放。而现在流行的应用程序——手机游戏的音效基本使用MIDI格式音乐,当需要混音效果时,需要同时播放至少两个MIDI音乐,这样现有最新的PC模拟器都无法满足需要,所以针对该功能的优化,将使模拟器更能满足应用程序开发需要2.功能手机中间件的关键技术�2.1ARM2.1ARM2.1ARM2.1ARM的位置无关程序设计原理用于构建高效率动态链接库。应用程序必须经过编译、汇编和链接后才变成可执行文件,在链接时,要对所有目标文件进行重定位,建立符号引用规则,同时为变量、函数等分配运行地址。当程序执行时,系统必须把代码加载到链接时所指定的地址空间,以保证程序在执行过程中对变量、函数等符号的正确引用,使程序正常运行。有操作系统是,重定位由操作系统自动完成。为实现其位置无关性,通常使用寄存器R9作为静态基址寄存器,使其指向该可读写段的首地址,并使用相对于基址寄存器的偏移量来对该段的变量进行寻址。2.2Nucleus中线程控制部件的实现方法从Nucleus的系统结构框图可以看出线程控制是整个内核的核心,通过邮箱、队列、管道来实现任务之间的通信,通过信号量、事件组和信号实现任务间的同步。图2.1Nucleus的系统结构图初始化线程控制(TC)通信模块(邮箱)(队列)(管道)同步模块(信号量)(事件组)(信号)I/O管理内存管理(动态内存)(分区内存)系统诊断(错误管理)(历史管理)2.3MTK手机平台内存复用技术flashmemoryROMROM2ROMn外部RAMROMRAMNVRAM内部RAM其他芯片RAMSystemmemoryMediamemory其他内存池ASMASMASMASMMTK的内存分布结构示意图MTK系统内存划分MTK系统为充分利用内存,对整个内存进行了划分,形成了以下八大内存池:应用程序共享内存ASM、多媒体块内存、多媒体内部内存、屏幕内存、控制缓存、系统内存池、调试内存池、开机之后大块的全零数据也称应用程序动态内存ADM,可以对其进行复用,但要保证不冲突。实际上,MTK软件已经分别做好了app_mem、ScrMemMgr和med_main三段内存池的管理。2.4嵌入式系统的自适应动态内存分配算法目前在很多嵌入式应用中,比较常用的动态内存分配和释放技术是最先匹配算法和伙伴算法。3.1MTK平台手机中间件的内核设计图3.1系统内核加载运行MPP的数据流图CandyCandyCandyCandy中间件MTK、展讯平台MPP文件01MTK、展讯手机BinbufferMPP文件02MPP文件03MPP文件04本地TTTT卡MPP文件01MPP文件02MPP文件03MPP文件04网络服务器下载3.1.1中间件系统架构图3.2中间件内核系统与手机平台及其应用程序架构图应用层(各类上层应用)适配层接口层GUIGDI触摸屏文件键盘接口多媒体其他API加载运行接口操作系统层(Nucleus、threadX等)硬件层(MTK、展讯等)3.1.2接口层与适配层对接接口层与适配层的对接时通过“接口虚拟表”来完成。接口层的工作,仅是对封装“接口虚拟表”内的函数调用,避免过多直接对函数指针操作,即每模块接口层保留的是指向该模块“接口虚拟表”的指针。3.1.3中间件环境初始化及其流程图图3.3中间件加载、运行应用程序流程图进入MPP入口函数,为各模块“接口虚拟表”指针赋值进入应用程序主函数读取MPP文件trueMPP认证true回调进入适配层,初始化各模块“接口虚拟表”truetruefalseCandy_Entryinit_pfuncCandy_Maintrue计算R9值,并为R9赋值,判断是否足够分配ZI段空间callbackfalse开始结束异常退出false3.2应用程序加载及其内存管理图3.4MPP文件格式…...LeveltableAppfile2…...Appfile1Mppheadertypedefstruct{…...U8acAppVersion[12];//U8acMiddlewareVersion[12];//S32bDisplayInPortal;//U8acAppName[36];//U8acMppUrl[128];//U8acAppDescription[128];//U32mpp_type;//MPP类型,决定怎么加载(见下面枚举值)S32level_table_offset;//分段表偏移(起始位置)U32level_table_num;//分段表数量(多少个BINorAPP文件)…...}T_MppFileContext图3.5MPP文件头部信息APP文件格式图3.6MPP中APP结构图MPP文件头APP文件数据MPP文件结构APP文件头(自定义资源)排列顺序如下:1.符号表索引2.符号表3.图片4.音频5.其他6.实体项列表APP文件结构3.2.1应用程序的加载与运行加载器虚拟屏幕栈底元素栈顶元素BIN(3)BIN0BIN2BIN3BIN0BIN1BIN4BIN5查找栈顶元素查找对应段信息加载运行Leveltable跳转到该段图3.7加载流程段间跳转图3.8段间跳转加载器虚拟屏幕段管理栈应用程序栈扫描栈出栈进栈扫描结果若栈非空,加载到对应的段3.3.2应用程序的内存管理图3.9共享内存示意图SHAREMEMORYBINFILE0BINFILE1BINFILE2BINFILE3…………BINBUFFER3.4基于分段加载的多任务中间件设计�3.4.13.4.13.4.13.4.1任务的创建及删除当MTK功能手机的工程文件编译成BIN文件并烧入手机后,静态任务的个数都已创建并永久保留,不能再创建和销毁。所以当需要创建新的任务的时候,只能突破MTK平台的核心适配层KAL,直接使用Nucleus操作系统上的任务创建和删除接口来实现。�3.4.23.4.23.4.23.4.2任务与内存管理MTK静态任务的创建是在编译整个MTK工程时就已经把所静态任务需要的内存空间分配在内存的ROM和ZI段。本文给新的动态任务分配内存都是采用自适应动态内存分配算法。3.4.4任务间的通信MTK平台的操作系统Nucleus的任务间通信方式有三种,mailboxs、queues和pipes,目前MTK平台上任务间通信只用到queues这种方式。MTK平台是通过开源代码层,KAL层直到Nucleus层这三个层次的调用来完成queues方式的任务间通信。图3.10MTK任务通信的三层结构开源代码层(queue.c)KAL层(stack_ltlcom.obj)Nucleus层(quc.c)任务间消息通信的基本模型MTK平台任务间通信是通过使用外部消息队列来实现的,该队列是一个双向循环链表,所以在要实现任务通信之前,先要创建该队列。图3.11任务通信基本原理图任务B、C、D……任务A发送消息接收消息接收消息发送消息任务A外部消息队列B、C或D外部消息队列消息队列及消息包结构基本消息包结构:typedefstructilm_struct{module_typesrc_mod_id;/*发送消息模块ID*/module_typedest_mod_id;/*接收消息模块ID*/msg_typemsg_id;/*发送的消息ID*/……}ilm_struct;QCBQCBQCBQCBQUD_Created_Queue_List图3.12消息队列双向循环链表动态、静态任务间通信图3.13动态任务与MMI任务通信图动态任务1MMI任务动态任务2发送消息接收消息发送消息接收消息发送消息接收消息发送消息动态任务1消息队列MMI任务消息队列动态任务2消息队列静态与静态任务通信动态与动态任务通信动态与静态任务通信3.4.5任务间通信的应用比如在一个棋牌游戏中,游戏主线程一般都是运行在MMI任务中,而当需要另外开启一个后台任务时,首先需要动态建立一个新任务,再从MMI主任务中发送消息给该新创建的任务来通知其工作3.5中间件移植到展讯平台的适配作为为上层应用程序提供统一开发编程接口的中间件,本项目需要解决移植到其他功能手机平台上的问题。由于接口层不变,所以MTK平台上的中间件移植到展讯平台上的所要解决主要问题是对适配层的修改,适配层是连接接口层与硬件层、操作系统层、KAL层和MMI层这四层的桥梁,而中间件内核的移植主要难度在接口层与展讯平台MMI层的过渡耦合,本问主要是比较MTK与展讯平台的MMI模块的实现差异,并就此基础来对适配层做修改。3.6中间件移植到模拟器的适配由于MMI静态库是MTK模拟器已有功能,其中包括了GUI,GDI,触摸屏,文件,键盘,多媒体等各个模块的功能。已有模拟器基本能满足应用程序的需要,但是该模拟器的多媒体功能无法支持游戏编程所用到的混音功能,特别是多个MIDI同时播放的混音效果无法实现。所以需要针对其专门制作适配。中间件模拟器系统架构图应用层(加载应用程序)win32APIMTK现有模拟器的MMI静态库适配层(Candy_DLL动态运行库)接口层GUIGDI启动触摸屏文件键盘MIDI混音其他多线程播放多MIDI多个MIDI同时播放,就必须要能够对多个MIDI文件在音乐合成器上用软波表合成音乐数据。而这种合成,一般都是独占设备的。图3.18多进程抢占音乐合成器图进程1播放MIDI音乐指令1进程2播放MIDI音乐指令2进程3播放MIDI音乐指令3音乐合成器多个MIDI音乐混音播放原理图实现同时播放多个MIDI音乐文件,最好的方法是在打开这个待播放的MIDI文件时,就把其音乐数据完全合成临时音乐数据,并装入一个容器,多个MIDI文件同时打开时,就可以分别装入各个容器,然后混音播放。声卡ROM混音临时音乐数据1临时音乐数据2临时音乐数据3播放混合的音乐MDII音乐指令3MIDI音乐指令2MIDI音乐指令1音乐合成器音乐合成器音乐合成器多MIDI播放流程图把多个MIDI文件数据分别装入微软DirectX8.0的DirectMusic提供的音乐段容器(CMusicSegment),然后针对该音乐容器来实现播放功能,能做到同时播放MIDI音乐。通过MIDI文件路径载入MIDI文件A和B到DirecMusic的CMusicManger,CMusicSegment的类对象中退出多MIDI播放模块进入多MIDI播放模块一个MIDI文件对应一对CMusicManager,CmusicSegment的类对象通过CMusicSegment对象的Play方法同时播放A,B文件通过CMusicSegment对的Stop方法关闭A,B文件音乐播放4.中间件内存分配及产品示例•4.14.14.14.1中间件的内存分配(1)用固定内存分配方法时,在中间件中定义一个10K的全局数组烧入手机ROM空间中,作为加载MPP文件内容的缓存区。供每一段程序使用。(2)用动态内存分配方法时,进入中间件时关闭MTK平台中全部的多媒体功能,使多媒体模块内存完全释放,中间件的应用程序所需空间从多媒体模块内存中分配,当退出中间件后,释放这块多媒体内存。4.2中间件平台产品示例以下用一个单机版游戏的下载、加载和运行来演示该中间件
本文标题:MTK手机平台中间件的设计与实现答辩稿
链接地址:https://www.777doc.com/doc-5942543 .html