2011-12-15 ADM 使用

来源:互联网 发布:magic launcher 知乎 编辑:程序博客网 时间:2024/04/30 02:01

MTK adm buffer 使用:


首先在系统初始化时,会开辟一块内存区域,比如:g_abrepeat_app_mem_pool、g_applib_mem_ap_pool、g_barcodereader_cntx.app_mem_pool(其中此内存块也有可能是在g_applib_mem_ap_pool中划分:g_barcodereader_cntx.app_mem_pool = applib_mem_ap_alloc(g_bcr_cntx.memory.app_mem_pool_pAPPLIB_MEM_AP_ID_BARCODEREADER, BR_APP_TOTAL_SIZE);)、g_bcr_cntx.memory.app_mem_pool_p(applib_mem_ap_alloc_framebuffer(APPLIB_MEM_AP_ID_BCR, MMI_BCR_APP_TOTAL_SIZE);)、g_brw_memory_pool、cca_mempool_g、g_mmi_certman_context.mem_pool、cootek_ADM_pool、g_dictionary_cntx.app_mem_pool。

注:有一些pool是后来使用的时候分配的(从系统初始化memory pool中)

在使用的时候,step1:

通过kal_adm_create(pool,size,subsize(能划分的块的类型:(8、16、32、64……)),logging)创建出一个pool_id,即内存块的地址及相应的属性。

step2:

kal_adm_alloc(pool_id,size(使用的)),得到可以使用的内存地址。

ADM buffer的结构:

typedef struct
{
    kal_uint32 adm_id;    
    kal_uint16 bl_num;    
    kal_uint16 reserved;
    kal_uint32 left_size;  
    kal_uint8 islogging;
    kal_uint8 reserved2[3];
} ADM_CB;

ADM_BL struct //block list

{

size;

reserved;

previous;

next;

}


ADM的释放:

首先是对pool_id 进行释放,即将此id销毁掉。然后对系统后来创建的pool(非初始化创建)进行内存的释放:applib_mem_ap_free等函数。

原创粉丝点击