查过资料后,大概理解了scatter文件,以及执行域,加载域的知识。但又出现了一个问题:
在scatter文件中,有
ROM_LOAD 0x7F000000 { ROM +0 { init.o (Init, +First) ...... } RAM 0x0 { vectors.o(Vect, +First) ...... }
}
另外,在init.s中需要完成flash和sdram的remap,remap后flash地址为0x7F000000,而sdram是0x0.在
remap之前,flash是0x0. 问题就来了,linker生成一个.bin的文件,这个文件的加载域从0x7F000000开始,而这个地址在开始运行
init.s之前又不是flash的地址.这中间似乎有一个是先有**还是先有蛋的问题!
即:在开始运行init.s后地址0x7F000000才有效,而在这之前,又需要这个地址来定位init.s生成的init.o
我应该是哪里没有理解清楚,多谢各位dx指点. |