我有一个在程序集中编写的裸机ARM的启动代码,我试图理解它是如何工作的。该二进制文件被写入一些外部Flash中,并在启动时将其自身的一部分拷贝到RAM中。尽管我读到wikipedia entry,但我仍然没有完全明白这种情况下的搬迁概念。 RAM被映射到低地址窗口,并且闪存在高地址窗口中。有人可以向我解释为什么我们在这里测试链接寄存器的值吗?在程序集中的重新定位
/* Test if we are running from an address, we are not linked at */
bl check_position
check_position:
mov r0, lr
ldr r1, =check_position
cmp r0, r1 /* ; don't relocate during debug */
beq relocated_entry
谢谢你的两个很好的答案!我会接受这两个,因为我解释了代码的目标(JTAG程序加载器的假设是正确的),第二个是如何工作的。 – 2013-03-28 14:50:37