zoukankan      html  css  js  c++  java
  • 【原创】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的规格都没有搞清楚就开始做。在这里留个记号,以后做事要认真点了!!!
  • 相关阅读:
    不测的秘密:精准测试之路----读书笔记(第二章)
    如何使用for循环连续的实例化多个对象!
    java如何在一个有序的数组类插入一个数!
    webstrom 常用快捷键
    如何使Label带有链接??此法感觉有点取巧!!!
    System.DateTime的一些格式
    如何解决”无法将类型为“System.DateTime”的对象强制转换为类型“System.String”。“
    如何解决“连接未关闭。 连接的当前状态为打开”问题
    c语言中 %p的含义
    什么情况下用递归?
  • 原文地址:https://www.cnblogs.com/hengfeng/p/1528771.html
Copyright © 2011-2022 走看看