|
想用MDK生成位置無關(guān)的低碼,但有個問題過不去 代碼:LDR R0,__main
BX R0
對應(yīng)反匯編代碼:
0x0800024C LDR R0,[PC,#12] ; @0x0800025C
0x0800024E BX R0
。。。。
0x0800025C DCW 0x0131
.。。。。
MDK設(shè)置:MDK->read/only memory areas->on chip->IROM1 ->0x08000000
生成BIN文件后,下載到FLASH0x08000000處,運(yùn)行正常。
LDR R0,__main后,R0被設(shè)成了0x08000131
MDK設(shè)置:MDK->read/only memory areas->on chip->IROM1 ->0x08000000
生成BIN文件后,下載到FLASH0x08004000處,運(yùn)行就出錯了。
原因在于當(dāng)運(yùn)行到 LDR R0,__main后,R0仍被設(shè)成了0x08000131,而我想要的應(yīng)該是0x08004131
MDK設(shè)置:MDK->read/only memory areas->on chip->IROM1 ->0x08004000
生成BIN文件后,下載到FLASH0x08004000處,運(yùn)行正常。反匯編代碼變?yōu)椋?x0800025C DCW 0x0431
LDR R0,__main后,R0被設(shè)成了0x08004131
我本來是想得到一個BIN文件,不管下載到FLASH哪個位置,它都能正常運(yùn)行,可從上面看來,在MDK中設(shè)置好IROM后,就只能下載到FLASH對應(yīng)位置才能正常運(yùn)行。
有誰能說說應(yīng)該怎么做才能得到一個真正的位置無關(guān)代碼?(在使用LDR的情況下,片子為Cortex-M3的STM32F103)
|
|