我正在使用Keil MDK-ARM编译器进行嵌入式项目。我试着以堆的形式访问外部内存,但是当我下载完我的微程序(微程序是lpc1788)后,它在startup.c文件中崩溃(没有启动主功能),尽管我可以访问外部内存(在增加堆部分之前)。
现在,任何人都可以提供一个小的示例项目--如何使用外部RAM作为堆配置uVision?我想配置uVision,以便在内部闪存中使用堆栈和堆的内部和外部RAM来执行程序。
发布于 2014-03-27 10:01:19
首先,在项目目标设置对话框中为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)
}检查堆部分的映射文件,以验证是否按需要分配了空间。
如果有必要,您也可以类似地重新定位堆栈。但请注意,外部内存访问可能比内部访问慢,这样做可能会影响性能。
当然,所有这些都假定您已经正确地初始化了外部RAM控制器以匹配外部RAM设备--这应该在system_lpc1788.c (或者您的启动代码的类似命名文件)中完成--我的经验是使用STM32,所以我不知道,也许是system_lpc17xx.c)。
https://stackoverflow.com/questions/22662101
复制相似问题