Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101541
  • 博文数量: 14
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 206
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-28 09:37
个人简介

记录我自己的成长....

文章分类

全部博文(14)

文章存档

2014年(2)

2013年(12)

我的朋友

分类: 嵌入式

2014-10-23 15:16:26

   一直以来,我在写arm程序的时候,都是避免使用malloc函数。这一次要用yaffs文件系统,没有办法只好研究一下malloc函数。
   要用malloc函数需要指定堆栈的位置和大小,我的硬件环境中有SDRAM,所以我想让malloc函数在sdram中分配空间,首先要指定堆栈的开始地址。在keil中打开系统的sct文件,在我硬件环境中时Emc_Yaffs.sct,其内容如下:

LR_IROM1 0x00000000 0x00080000  {    ; load region size_region
  ER_IROM1 0x00000000 0x00080000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x10000000 0x00010000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x20004000 0x00004000  {
   .ANY (+RW +ZI)
  }
}
ARM_LIB_HEAP 0xA0000000 0x200000 { ;
  RW_HEAP 0xA0000000 0x200000  {
   .ANY (HEAP)
  }                                            
}

在文件的最后部分,ARM_LIB_HEAP 0xA0000000 0x200000  {  //指定堆栈区的大小
            RW_HEAP 0xA0000000 0x200000 {   
                .ANY(HEAP)
            }
}  指定了堆栈区的大小,其中0xA0000000 是堆栈的开始地址,0x200000 指定了堆栈区的最大范围。

通过修改这部分的的内容可以变更堆栈的开始地址。

之后就是在启动文件中 变更堆栈大小的定义。使其在刚才指定的大小之内。
阅读(4044) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~