MTK link 错误:“Error: L6221E: Execution region

错误信息:

Error: L6221E: Execution region EXTSRAM overlaps with Execution region WAP_SRAM.
Not enough information to produce a SYMDEFs file.

解决:

wap_mem.c文件中宏WAP_INT_GLOBAL_MEM_SIZE调小即可

-----------------------------------------------------------------------------------

错误“Error: L6221E: Execution region EXTSRAM overlaps with Execution region DUMMY_END.”

     今天第一次见到,咋一看,似乎是Sram超了,应该是静态内存区域超了。

 引起原因:

 unsigned char *wf_icon[] = {
  wf_icon_fine_day,
  wf_icon_fine_night,
  wf_icon_cloudy_day,
  wf_icon_cloudy_night,
  wf_icon_overcast,
  wf_icon_thunder,
  wf_icon_rain,
  wf_icon_snow,
  wf_icon_na
 };

此段代码,其中数组中每个成员均是unsigned char 数组。

解决方法:

 const unsigned char *wf_icon[] = {
  wf_icon_fine_day,
  wf_icon_fine_night,
  wf_icon_cloudy_day,
  wf_icon_cloudy_night,
  wf_icon_overcast,
  wf_icon_thunder,
  wf_icon_rain,
  wf_icon_snow,
  wf_icon_na
 };

修改成const 的,每个成员均是const unsigned char 数组。

修改后这些数组应该是放在了常量存储区。

问题解决,记下!

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/huangtaoyuan/archive/2010/01/07/5153077.aspx

-----------------------------------------------------------------------------------

1. Error: L6218E: Undefined symbol Image$$ZI$$Limit (referred from sys_stackheap.o).
    Not enough information to produce a SYMDEFs file.

昨天遇到一个十分麻烦的问题,我把MTK编译时遇到这样的错误:
Error : L6218E: Undefined symbol Image$$ZI$$Limit (referred from sys_stackheap.o).
Not enough information to produce a SYMDEFs file.
而没有这三个:
Not enough information to list image symbols.
Not enough information to list the image map.
Not enough information to list the image sizes and/or totals.
 
网上只有两种解释,是这样:
1. reimplement __user_initial_stackheap()
解决办法大概意思是重新装配__user_initial_stackheap()函数。
 
2.分配内存的时候,要分配内存的结构中使用了ARM不支持的数据类型.通常定义了结构体的指针,然后用malloc分配空间时为结构体类型指针,而ARM不支持这种数据类型,所以会有这种错误。解决办法:用typedef预定义这个结构类型,使得编译器识别这种类型。
 
第一种方法离我太远,应该不会涉及到;
第二种方法试过,没用,但我也大概知道方向是malloc函数的问题。
 
今天终于解决:
这个问题是由于代码或者Lib中调用了 C Lib的malloc或者类似于strdup,printf 这样的会调用malloc的C Lib function 引起的。MTK Platform不支持 C lib的malloc,而用 Ctrl Buffer机制代替了malloc,以便于调试memory leak问题。MTK中的Osl层有专门处理内存的函数,于是我想,我用malloc是跳过Osl层直接分配内存,这样没有经过系统处理,危险性大。所以我用系统自带的OslMalloc和OslMfree来处理内存空间,问题解决。
 
----------------------------------------------------------------------------------- 
2. Error: L6221E: Execution region EXTSRAM overlaps with Execution region DUMMY_END.
    Not enough information to produce a SYMDEFs file.
 
在程序中定义了过大的全局数组,其实跟EXTSRAM 、DUMMY_END关系不大

你可能感兴趣的:(移动开发)