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等函数。