電子工程網(wǎng)

標題: 位置無(wú)關(guān)代碼 [打印本頁(yè)]

作者: oychj    時(shí)間: 2013-12-28 15:57
標題: 位置無(wú)關(guān)代碼
想用MDK生成位置無(wú)關(guān)的低碼,但有個(gè)問(wèn)題過(guò)不去                                                                                                                                 代碼: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處,運行正常。反匯編代碼變?yōu)椋?x0800025C  DCW 0x0431
LDR R0,__main后,R0被設成了0x08004131

我本來(lái)是想得到一個(gè)BIN文件,不管下載到FLASH哪個(gè)位置,它都能正常運行,可從上面看來(lái),在MDK中設置好IROM后,就只能下載到FLASH對應位置才能正常運行。

有誰(shuí)能說(shuō)說(shuō)應該怎么做才能得到一個(gè)真正的位置無(wú)關(guān)代碼?(在使用LDR的情況下,片子為Cortex-M3的STM32F103)





作者: Hugo801122    時(shí)間: 2014-2-18 22:19
單片機編程往往離不開(kāi)匯編,說(shuō)實(shí)話(huà)匯編很少用了看不懂啦。
作者: pcbkey    時(shí)間: 2015-2-2 11:30
新手,路過(guò)




歡迎光臨 電子工程網(wǎng) (http://selenalain.com/) Powered by Discuz! X3.4
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页