错误:Error: L6221E: Execution region DYNAMIC_CACHEABLE_EXTSRAM_DEFAULT_CACHEABLE overlaps with Execution region CACHED_DUMMY_END.
意思是DYNAMIC_CACHEABLE_EXTSRAM_DEFAULT_CACHEABLE区域超到CACHED_DUMMY_END区域的空间了。
根据*.lis文件中的数据,显示如下:
0xf036a0e8
Execution Region DYNAMIC_CACHEABLE_EXTSRAM_DEFAULT_CACHEABLE (Base: 0xf036cbd8, Size: 0x00092e9c, Max: 0xffffffff, ABSOLUTE)
Base Addr
0xf036cbd8
0xf037c2d4
0xf03c7514
Execution Region CACHED_DUMMY_END (Base: 0xf03fc000, Size: 0x00000004, Max: 0xffffffff, ABSOLUTE)
Base Addr
0xf03fc000
分析:
DYNAMIC_CACHEABLE_EXTSRAM_DEFAULT_CACHEABLE区域
0xf03c7514 + 0x00038560 = 0xf03ffa74
CACHED_DUMMY_END区域
Base: 0xf03fc000
比较:0xf03ffa74 - 0xf03fc000 = 3a74
大概 超了 14.6KB空间大小
===========================================================================================
Execution region DYNAMIC_CACHEABLE_EXTSRAM_DEFAULT_CACHEABLE overlaps with Execution region CACHED_DUMMY_END
修改如下:
Med_mem.h
#define MED_EXT_MEM_SIZE sizeof(med_ext_mem_union)
改为:
#define MED_EXT_MEM_SIZE (sizeof(med_ext_mem_union)-1024*500)
=========================================================================
关于MTK几个MEM文件
1.Med_MEM.h
media内存大小文件,修改med_ext_mem_union可以增加media内存大小。
例:
把media内存加到1000K
typedef union
{
U8 testsize[1000*1024];
}med_ext_mem_union;
2.ScrMemMgr.h
例:
把media内存加到500K
typedef union
{
U8 testsize[500*1024];
}screen_asm_pool_union;
Screen 内存大小文件,修改screen_asm_pool_union可以增加screen内存大小。
===================================================================
mtk 中,一次申请太大的内存,然后从文件中读这么大块的数据到内存中出现异常
buff_len = file_length;
do
{
zkp_malloc((char **)&pBuff,(unsigned int)buff_len);
if (pBuff == NULL)
buff_len = buff_len/2;
}while(pBuff == NULL);
ret = FS_Seek(fh,offset, FS_FILE_BEGIN);
for(;total_written<len;)
{
left_size = len - total_written;
if (left_size < buff_len)
buff_len = left_size;
read_ret = FS_Read(fh,pBuff,buff_len,(U32*)&readed);
write_ret = FS_Write(out_fh, pBuff, buff_len, (U32*)&writeed);
LOG(_Info, "SplitDataFromFile buff_len:%d total_written:%d readed:%d writeed:%d read_ret:%d ", buff_len,total_written,readed,writeed, read_ret,);
total_written+=buff_len;
}
先尝试是否能申请到整个文件大小那么大的空间,如果可以,就一次性从文件中读这么大的数据到申请的空间中,再一次性写入新文件。
碰到了异常的现象,就是虽然那么大的内存(100多K的,500多K的)能申请到,但读出,写入共计5个文件整个耗时很长,差不多10多秒钟,而且写入文件的数据有问题,100多 K的文件,只有前面64K是真实的数据,后面都是0,500多K的文件,只有200多K是正确 的,后面是0.
改为一次申请50K,分多次读文件,写文件后,耗时变为3秒。文件数据正常。