初学者对于ARM的内存映射问题真是不好理解,在使用全局数组的时候总是报错,我使用的IDE是ECLIPSE,在默认不使用链接脚本的时候,调试时程序被默认加载到0x8000这个地址,这个地址空间不是DDR空间地址,而且地址范围有限,导致全局数组定义越界而出错。那么,怎么才能将代码加载到DDR中去呢?一开始走了很多弯路,在网上查说是用分散加载技术才能把代码加载到指定的地方,但是大部分说的都是在ADS里怎么设置,而ECLIPSE中根本没有那些选项。后来查到用链接脚本也可以实现这个功能,试了一下,果然有效,现在终于可以将代码加载到任意的地方了,再大的数组都没问题,只要DDR够大就行,哈哈!
开发环境:
OS: Mac OS X
IDE:ECLIPSE + YAGARTO+ Zylin
设置方法:
在项目上点右键-->属性-->C/C++ Bulid-->Settings-->Tool Settings-->ARM Yagarto Mac OS X GCC C Linker-->General-->Script file-->选择你的脚本文件
重新编译一下,然后再调试即可。
最简单的链接脚本
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. =0x57000000;
.text :
{
*(.text)
}
.rodata : { *(.rodata) }
.data : { *(.data) }
.bss : { *(.bss) }
}