AVR链接器脚本:为什么要在0x60启动数据存储器?

时间:2018-01-14 23:32:00

标签: linker ld avr atmega linker-scripts

我对链接器脚本没有多少经验,所以也许我只是在这里误解了一些东西。 ATmega32u4(avr5.x)的LD链接描述文件指定数据存储器(SRAM)从0x800060开始。我知道0x800000只是编译器用于SRAM指针的特殊偏移量,但为什么要使用0x60作为RAM的基础? ATmega32u4数据表显示0x60是外部I / O寄存器的开始,而SRAM实际上是从0x100开始的。这是不是意味着当.data部分复制到SRAM中时外部I / O寄存器会被破坏?

1 个答案:

答案 0 :(得分:0)

显然,如果你通过它调用avr-ld,这就是GCC所考虑的事情。 GCC会根据您传递给.data的内容覆盖-mmcu=部分的虚拟地址。如果您直接与avr-ld相关联,则.data部分为默认0x800060