首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将外部内存作为堆访问?

如何将外部内存作为堆访问?
EN

Stack Overflow用户
提问于 2014-03-26 13:10:37
回答 1查看 2.8K关注 0票数 1

我正在使用Keil MDK-ARM编译器进行嵌入式项目。我试着以堆的形式访问外部内存,但是当我下载完我的微程序(微程序是lpc1788)后,它在startup.c文件中崩溃(没有启动主功能),尽管我可以访问外部内存(在增加堆部分之前)。

现在,任何人都可以提供一个小的示例项目--如何使用外部RAM作为堆配置uVision?我想配置uVision,以便在内部闪存中使用堆栈和堆的内部和外部RAM来执行程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-27 10:01:19

首先,在项目目标设置对话框中为RAM1指定外部ram范围(例如),并确保所有其他设置都适合您的项目。

然后在“链接器设置”选项卡中,取消选中“从目标对话框中使用内存布局”选项。这将允许您手动编辑分散文件,该文件最初将反映目标设置中定义的布局。

编辑分散文件,以便在外部ram中创建一个节(例如):

代码语言:javascript
复制
  RW_RAM1 0x60000000 UNINIT 0x00040000  {  ; RW data
    *(HEAP)  ; external SRAM
  }

您的实际地址可能会有所不同。如果要将所有外部RAM用于足够的堆,则如果希望允许链接器将其他数据放置在此空间中,则:

代码语言:javascript
复制
  RW_RAM1 0x60000000 UNINIT 0x00040000  {  ; RW data
    *(HEAP)  ; external SRAM
    .ANY (+RW +ZI)
  }

检查堆部分的映射文件,以验证是否按需要分配了空间。

如果有必要,您也可以类似地重新定位堆栈。但请注意,外部内存访问可能比内部访问慢,这样做可能会影响性能。

当然,所有这些都假定您已经正确地初始化了外部RAM控制器以匹配外部RAM设备--这应该在system_lpc1788.c (或者您的启动代码的类似命名文件)中完成--我的经验是使用STM32,所以我不知道,也许是system_lpc17xx.c)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22662101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档