我对链接器脚本没有多少经验,所以也许我只是在这里误解了一些东西。 ATmega32u4(avr5.x)的LD链接描述文件指定数据存储器(SRAM)从0x800060
开始。我知道0x800000
只是编译器用于SRAM指针的特殊偏移量,但为什么要使用0x60
作为RAM的基础? ATmega32u4数据表显示0x60
是外部I / O寄存器的开始,而SRAM实际上是从0x100
开始的。这是不是意味着当.data
部分复制到SRAM中时外部I / O寄存器会被破坏?
答案 0 :(得分:0)
显然,如果你通过它调用avr-ld
,这就是GCC所考虑的事情。 GCC会根据您传递给.data
的内容覆盖-mmcu=
部分的虚拟地址。如果您直接与avr-ld
相关联,则.data
部分为默认0x800060
。