我正在使用Keil MDK-ARM编译器开发嵌入式项目。我尝试访问外部存储器堆,但是当我下载我的程序在我的微型(微是lpc1788
)完成下载后崩溃(没有启动主函数)在startup.c文件,虽然我可以访问外部存储器(在增加堆部分之前)。如何作为堆访问外部存储器
现在任何人都可以提供一个小样本项目如何配置uVision,使用外部RAM作为堆?我想配置uVision在内部FLASH中使用STACK和HEAP的内部和外部RAM来执行程序。
我正在使用Keil MDK-ARM编译器开发嵌入式项目。我尝试访问外部存储器堆,但是当我下载我的程序在我的微型(微是lpc1788
)完成下载后崩溃(没有启动主函数)在startup.c文件,虽然我可以访问外部存储器(在增加堆部分之前)。如何作为堆访问外部存储器
现在任何人都可以提供一个小样本项目如何配置uVision,使用外部RAM作为堆?我想配置uVision在内部FLASH中使用STACK和HEAP的内部和外部RAM来执行程序。
首先在项目中指定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)
@aria nikan:我简化了我的解决方案。您不再需要修改启动文件。 – Clifford