查看: 10501|回复: 2

[提问] 位置无关代码

[复制链接]
发表于 2013-12-28 15:57:41 | 显示全部楼层 |阅读模式
关键词: 位置无关代码 , LDR , PC
想用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)




发表于 2014-2-18 22:19:05 | 显示全部楼层
单片机编程往往离不开汇编,说实话汇编很少用了看不懂啦。
发表于 2015-2-2 11:30:47 | 显示全部楼层
新手,路过
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表