HengFeng

--博观而约取,厚积而薄发
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

【原创】RAM空间不足造成的死机

Posted on 2009-07-22 17:44  hengfeng  阅读(651)  评论(0编辑  收藏  举报
      
      这个星期在移植带数据功能的固定台项目,一开始傻傻地以为只要把固定台的UI移到数据卡上就OK了。
      说干就干,第一步修改固定台项目FLASH相关的一些FEATURE。包括single bus -> dual bus, ASYNC_TYPE -> BURST_TYPE  。
               第二步,重新定义FLASH,PSRAM,EFS的起始地址和大小。
               第三步,修改FLASH drvier,以及增加数据功能相关的FEATURE和代码。
               第四步,编译+链接 ----- (PS:其实有时候找编译产生的BUG也挺有趣的。^_^)
               
      最后用TRACE32烧代码,BOOT成功启动,但是在创建文件系统的时候系统就跑飞了,单步跟踪,发现程序“死”在了AEEHeap_Realloc()。难道是内存分配出了问题?? 我们的heap的起始地址定义:
                               oem_heap_start =   (dword) Image__ZI_REGION__ZI__Base  +
                                                            (dword) Image__ZI_REGION__ZI__Length; 

                                oem_dynamic_heap_pointer = (uint32 *) oem_heap_start;
                                oem_dynamic_heap_size    = T_RAM_BASE + T_RAM_SIZE - oem_heap_start;

就是说从ZI段之后的RAM都是动态分配的Heap。查看.map文件,发现ZI段的起始地址跟大小为:
                               Image$$ZI_REGION$$Base = 0x100179c0
                               Image$$ZI_REGION$$ZI$$Length = 0x001f2ee0
所以oem_heap_start  = 0x100179c0 + 0x001f2ee0 = 0x1020A8A0 

      所以我们的内存空间肯定需要大于2M的RAM,但是数据卡项目只有2M的RAM,内存肯定不够,死机也就是必然的了----怪只能怪自己一开始的时候想的太简单了,连MCP的规格都没有搞清楚就开始做。在这里留个记号,以后做事要认真点了!!!