|
想用MDK生成位置无关的低码,但有个问题过不去 代码:LDR R0,__main
BX R0
对应反汇编代码:
0x0800024C LDR R0,[PC,#12] ; @0x0800025C
0x0800024E BX R0
。。。。
0x0800025C DCW 0x0131
.。。。。
MDK设置:MDK->read/only memory areas->on chip->IROM1 ->0x08000000
生成BIN文件后,下载到FLASH0x08000000处,运行正常。
LDR R0,__main后,R0被设成了0x08000131
MDK设置:MDK->read/only memory areas->on chip->IROM1 ->0x08000000
生成BIN文件后,下载到FLASH0x08004000处,运行就出错了。
原因在于当运行到 LDR R0,__main后,R0仍被设成了0x08000131,而我想要的应该是0x08004131
MDK设置:MDK->read/only memory areas->on chip->IROM1 ->0x08004000
生成BIN文件后,下载到FLASH0x08004000处,运行正常。反汇编代码变为:0x0800025C DCW 0x0431
LDR R0,__main后,R0被设成了0x08004131
我本来是想得到一个BIN文件,不管下载到FLASH哪个位置,它都能正常运行,可从上面看来,在MDK中设置好IROM后,就只能下载到FLASH对应位置才能正常运行。
有谁能说说应该怎么做才能得到一个真正的位置无关代码?(在使用LDR的情况下,片子为Cortex-M3的STM32F103)
|
|