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的规格都没有搞清楚就开始做。在这里留个记号,以后做事要认真点了!!!
  • 相关阅读:
    P1197 [JSOI2008]星球大战[并查集+图论]
    P1955 [NOI2015]程序自动分析[离散化+并查集]
    取模运算律[简单数学]
    P1462 通往奥格瑞玛的道路[最短路+二分+堆优化]
    P1330 封锁阳光大学[搜索+染色]
    P1168 中位数[堆 优先队列]
    P2661 信息传递[最小环+边带权并查集]
    P1080 【NOIP 2012】 国王游戏[贪心+高精度]
    P2085 最小函数值[优先队列]
    【转】priority_queue的用法
  • 原文地址:https://www.cnblogs.com/hengfeng/p/1528771.html
Copyright © 2011-2022 走看看