我有一個在程序集中編寫的裸機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