找回密码
 注册
搜索
查看: 2628|回复: 13

[讨论] MTK的动态内存可用大小如何修改?

[复制链接]
发表于 2007-12-20 17:51:19 | 显示全部楼层 |阅读模式
MMI应用确实需要大内存的话,比如说,需要2M多的内存, 有没有办法通过修改底层的内存分配方式,使MMI得到更大的内存。
 楼主| 发表于 2007-12-20 17:52:28 | 显示全部楼层
请问这两个接口查询到的值是 什么?
kal_sys_mem_query_freesize();//这个有70多KBytes
kal_debug_mem_query_freesize();//这个有40多KBytes
点评回复

使用道具 举报

发表于 2007-12-21 11:03:58 | 显示全部楼层
不知道你想要的是不是这个:
GLOBAL_MEM_SIZE,修改的是堆大小,既是malloc空间。
点评回复

使用道具 举报

 楼主| 发表于 2007-12-21 18:03:52 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>gogogoing</I>在2007-12-21 11:03:58的发言:</B>
不知道你想要的是不是这个:
GLOBAL_MEM_SIZE,修改的是堆大小,既是malloc空间。</DIV>


我也不确定,因为我这里的定义是:
/* SysGen Template Type : GPRS Generic */
#if defined(__WIFI_SUPPORT__) && defined(__VOIP__)
        #define GLOBAL_MEM_SIZE         ( 420*1024)
        #define GLOBAL_DEBUG_MEM_SIZE   ( 110*1024)
#else /* __WIFI_SUPPORT__ && __VOIP__ */
        #define GLOBAL_MEM_SIZE         ( 280*1024)
        #define GLOBAL_DEBUG_MEM_SIZE   ( 100*1024)
#endif
500K都不够喔。
点评回复

使用道具 举报

发表于 2007-12-22 11:48:56 | 显示全部楼层
主要是GLOBAL_MEM_SIZE大小,应该没有定义WIFI_SUPPORT及VOIP吧,所以实际的GLOBAL_MEM_SIZE只是280k。
点评回复

使用道具 举报

发表于 2007-12-23 17:58:35 | 显示全部楼层
动态内存,指的是control buffer么?如果是,有专门修改的地方
点评回复

使用道具 举报

发表于 2007-12-24 13:43:04 | 显示全部楼层

请明示:

<DIV class=quote><B>以下是引用<I>snaileo</I>在2007-12-23 17:58:35的发言:</B>
动态内存,指的是control buffer么?如果是,有专门修改的地方</DIV>
点评回复

使用道具 举报

发表于 2007-12-24 20:57:17 | 显示全部楼层
ctrl_buff_pool.h

可以设置每一个BLOCK的数量
点评回复

使用道具 举报

发表于 2007-12-25 09:23:23 | 显示全部楼层
ctrl_buff   最大2K吧。

建议ADM方式。最好能和文件系统打交到。

能像邮件或者wap之类,将临时结果存入临时文件中。
点评回复

使用道具 举报

 楼主| 发表于 2007-12-25 21:21:44 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>aromar</I>在2007-12-25 9:23:23的发言:</B>
ctrl_buff   最大2K吧。

建议ADM方式。最好能和文件系统打交到。

能像邮件或者wap之类,将临时结果存入临时文件中。</DIV>


我用多媒体那块的内存,用真机试验,每次大概分配了500K左右的内存,手机就会assert重启了。
ADM方式?可否指引,MTK的代码中看到过这个东西,但没明白,文档也不见有说明。
点评回复

使用道具 举报

发表于 2007-12-26 13:54:03 | 显示全部楼层
adm是mtk提供的 应用程序动态内存。
其实是你自己定义一个全局的大数组作为内存池。自行申请分配释放的。
目的是为ctrl_buffer申请超过2K时候解决方法。

例如
static kal_uint8 my_pool[600*1024];
KAL_ADM_ID my_id;
kal_uint32 my_ptr;

my_id = kal_adm_create(my_pool,600*1024,NULL,KAL_FALSE);
if(my_id == NULL)
kal_print("my adm create failed");

my_ptr = (kal_uint32*)kal_adm_alloc(my_id,600*1024);
if(my_ptr == NULL)
kal_print("my adm alloc failed");

kal_adm_free(my_id,my_ptr);

if(kal_adm_delete(my_id)!=KAL_ADM_SUCCEED)
kal_print("delete my adm failed");

对于大内存如楼主所说,需要2000*1024. 可以定义这么大的数组测试一下。
RAM不够的话,建议复用或者利用文件系统。
不建议修改ctrl_buffer_pool中的值。
再说它最大的块也就
NUM_CTRL_BUFF_POOL_SIZE65536
即64K。

adm方式也和ctrl_buffer一样支持分块首适应算法。
楼主可以把数组分成大小不等的块。进行申请和释放。
点评回复

使用道具 举报

发表于 2007-12-26 19:54:20 | 显示全部楼层
不会吧,我把MAX_CAM_FILE_BUFFER_LEN放大到750k没出现问题[em01]
点评回复

使用道具 举报

 楼主| 发表于 2007-12-27 20:16:31 | 显示全部楼层
1、RAM不够的话,建议复用或者利用文件系统。
这是指利用Flash来当RAM吗?类似虚拟内存?会不会很慢啊?
点评回复

使用道具 举报

发表于 2015-5-11 00:00:44 | 显示全部楼层
本帖最后由 OmniWave 于 2015-5-11 00:01 编辑

不弄清楚分配的内存在哪里,用起来都悬乎,有高手总结下MTK各种动态内存分配方式所使用的区域么?
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-23 01:44 , Processed in 0.074689 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表