网站大量收购独家精品文档,联系QQ:2885784924

MTK平台内存使用总结.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MTK平台内存使用总结

MTK平台内存使用总结: 物理内存: 物理内存不止一块。 外部RAM 最大的那一块了,如果不做设置,代码中使用的内存空间被放在这里。 为了降低成本,绝大多数方案目前使用4MB内存,少数使用8MB。 内部RAM(或称为 紧密耦合内存、TCM) 这块内存在不同硬件平台中大小不同,常见的6225上为72KB。 速度应该快些,系统中将软解码各种格式图片时使用到的栈空间放到这里。 其他芯片内存。 例如常见的25平台上有一块称为“INTSRAM_MULTIMEDIA”的内存,48K大小。 这块内存在23、35上没有。(当然23、35上也有25所没有的内存) 系统对于内存的管理: MTK平台上的内存动态分配均是对已分配内存的“复用”。 要深入的理解并使用好内存,有必要看一下SCAT文件。 (SCAT文件,ARM分散链接文件,描述ROM、RAM大致分配情况) EXTSRAM_LARGEPOOL_NORMAL 0 { ; For MT6228, MT6229 projects, app-based ASM always at first due to Java FBBR app_mem.obj (LARGEPOOL_FIRST_ZI) ScrMemMgr.obj (LARGEPOOL_ZI) //一般方案不做java支持,下面的这个内存池是无效的 j2me_custom_resource.obj (LARGEPOOL_ZI) med_main.obj (LARGEPOOL_ZI) } 这部分内容描述了内存中的几大内存池。 其中: 0上文中所说的外部RAM的起始地址。 ZI:无初始值内存数据,就是零。 LARGEPOOL:内存池,开机之后大块的全零数据,可以对其进行复用,但要保证不冲突。实际上,MTK软件已经分别做好了app_mem、med_main两段内存池的管理。 ASM: Application shared memory 这块内存是实质是个数组,大小由一个共用体决定。 在头文件app_mem.h中,我们可以手动的设定其大小。 详细使用步骤: 在app_mem.h中,注册程序ID。 在app_mem.h中,定义程序使用的内存大小,并设置公用体(06B以及之前的版本没有用共用体,仅用宏来限制最终数组大小,设置繁琐了些)。 在程序初始化时,应使用系统函数注册程序,给出程序的退出函数。 applib_mem_ap_register 申请,applib_mem_ap_alloc 释放,释放动作应在上文注册程序时给出的退出函数中。applib_mem_ap_free 其他说明:这块内存总大小在300K左右(基线版本默认大小)。 多媒体块内存 使用简单,应用的较为广泛分配方法。 使用方法: 申请:med_alloc_ext_mem 释放:med_free_ext_mem 说明: 多媒体模块内存池较大,一般在800K~1MB之间。 对于申请的大小,没有特殊限制,可以一次申请大块空间。 申请和释放时,在cather中可以看出相关信息,包括申请、释放大小,当前总活动个数。Cather模块为MOD_MED。 多媒体内部内存 此块内存一般不放在外部RAM上,为了保证其高速性(多用于多媒体模块内部消息的处理),这块内存一般被放到内部RAM说是其他高速内存上。 常见的25平台,这块内存被放置在一块称为“INTSRAM_MULTIMEDIA”的内存中,这块内存为芯片内存,不属于内部RAM。 但不管硬件上怎样安排,软件中使用这块内存的方法是一样的。 使用方法: 申请:med_alloc_int_mem 释放:med_free_int_mem 说明: 除管理的大小不同外(最大值在40K左右),使用起来和多媒体块内存没有区别,系统也会在cather中给出相关信息。 ctrl_buff 在custom_config.c中,有块称为System_Mem_Pool的内存池,其中存放着Tasks stack, external queue, control buffer. 该块内存大小在400K左右。 control buffer被用于模拟C lib的malloc,但大小受限制,一次申请的最大值为2KB。 使用方法: 申请: OslMalloc 释放:OslMfree 测试时,在8号机上,连续申请了 64*20 + 128*20 + 256*20 + 512*20 + 1024*10 + 2048*10 = 52 KB的内存,每一次结果都是成功的。 其他说明: Control buff 是一块被格式化的内存,分配的内存块,以及每种大

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档