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的规格都没有搞清楚就开始做。在这里留个记号,以后做事要认真点了!!!
  • 相关阅读:
    前端与算法 leetcode 344. 反转字符串
    JavaScript闭包使用姿势指南
    前端与算法 leetcode 48. 旋转图像
    前端与算法 leetcode 36. 有效的数独
    前端与算法 leetcode 1. 两数之和
    前端与算法 leetcode 283. 移动零
    前端与编译原理 用js去运行js代码 js2run
    前端与算法 leetcode 66. 加一
    前端与算法 leetcode 350. 两个数组的交集 II
    前端与算法 leetcode 26. 删除排序数组中的重复项
  • 原文地址:https://www.cnblogs.com/hengfeng/p/1528771.html
Copyright © 2011-2022 走看看