• 【原创】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的规格都没有搞清楚就开始做。在这里留个记号,以后做事要认真点了!!!
  • 相关阅读:
    luogu P3239 [HNOI2015]亚瑟王
    android之软件键盘
    Eclipse输入智能提示设置
    防止反编译
    二进制数据读写
    数据类型转换
    类对象的读写文件
    Eclipse 快捷键
    修改IP
    Android eclipse 运行项目设置程序默认安装到SD卡
  • 原文地址:https://www.cnblogs.com/hengfeng/p/1528771.html
Copyright © 2020-2023  润新知