【原创】RAM空间不足造成的死机
这个星期在移植带数据功能的固定台项目,一开始傻傻地以为只要把固定台的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的规格都没有搞清楚就开始做。在这里留个记号,以后做事要认真点了!!!