2014-03-26 55 views
1

我正在使用Keil MDK-ARM编译器开发嵌入式项目。我尝试访问外部存储器堆,但是当我下载我的程序在我的微型(微是lpc1788)完成下载后崩溃(没有启动主函数)在startup.c文件,虽然我可以访问外部存储器(在增加堆部分之前)。如何作为堆访问外部存储器

现在任何人都可以提供一个小样本项目如何配置uVision,使用外部RAM作为堆?我想配置uVision在内部FLASH中使用STACK和HEAP的内部和外部RAM来执行程序。

回答

3

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

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

编辑分散文件从而建立在外部RAM中的部分(例如):

RW_RAM1 0x60000000 UNINIT 0x00040000 { ; RW data 
    *(HEAP) ; external SRAM 
    } 

实际地址可能差异,一部分。如果你要使用堆所有外部RAM,如果你想允许链接放置其他数据在这个空间则足以,:

RW_RAM1 0x60000000 UNINIT 0x00040000 { ; RW data 
    *(HEAP) ; external SRAM 
    .ANY (+RW +ZI) 
    } 

检查映射文件的HEAP部分,以验证该空间按需要分配。

如果需要,您可以同样重新定位堆栈。但请注意,外部内存访问可能比内部慢,因此可能会影响性能。

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

+0

@aria nikan:我简化了我的解决方案。您不再需要修改启动文件。 – Clifford