位置无关代码

2013年12月28日 15:57    发布者:oychj
想用MDK生成位置无关的低码,但有个问题过不去                                                                                                                                 代码:LDR R0,__main
           BX   R0
对应反汇编代码:
           0x0800024C  LDR R0, ; @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)




网友评论

Hugo801122 2014年02月18日
单片机编程往往离不开汇编,说实话汇编很少用了看不懂啦。
pcbkey 2015年02月02日
新手,路过