关于44b0的bootloader的疑问

[复制链接]
2497|5
 楼主| bbs_cq 发表于 2007-11-8 10:35 | 显示全部楼层 |阅读模式
44BINIT.S中有一段程序是:<br /><br />;****************************************************<br />&nbsp;;计算拷贝程序在flash中的实际位置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;;****************************************************<br />&nbsp;ldr&nbsp;&nbsp;r2,&nbsp;=CopyProcBeg<br />&nbsp;sub&nbsp;&nbsp;r1,&nbsp;r2,&nbsp;r1<br />&nbsp;add&nbsp;&nbsp;r0,&nbsp;r0,&nbsp;r1&nbsp;<br />&nbsp;ldr&nbsp;&nbsp;r3,&nbsp;=CopyProcEnd<br />&nbsp;<br />&nbsp;;****************************************************<br />&nbsp;;将拷贝程序复制到ram中&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;;****************************************************<br />0&nbsp;<br />&nbsp;ldmia&nbsp;r0!,&nbsp;{r4-r7}<br />&nbsp;stmia&nbsp;r2!,&nbsp;{r4-r7}<br />&nbsp;cmp&nbsp;&nbsp;r2,&nbsp;r3<br />&nbsp;bcc&nbsp;&nbsp;%B0&nbsp;<br /><br /><br />&nbsp;&nbsp;运行这段程序的时候,程序应该是在FLASH里面,那么ldr&nbsp;&nbsp;r2,&nbsp;=CopyProcBeg&nbsp;应该是得到的是CopyProcBeg在FLASH里面的地址啊,但是看程序的功能,是得到CopyProcBeg在RO_BASE为起始ram中的地址?怎么回事呢?各位指点一下啊....
 楼主| bbs_cq 发表于 2007-11-8 15:12 | 显示全部楼层

??

没人知道吗?
阿南 发表于 2007-11-8 18:21 | 显示全部楼层

是RO_BASE为起始ram地址

你的程序要想正确运行,必须被复制到RO&nbsp;BASE开始处,具体解释可以参考链接器部分
 楼主| bbs_cq 发表于 2007-11-8 19:05 | 显示全部楼层

还是没有明白

我是在链接选项中设置了RO_BASE和RW_BASE的,但是按照程序执行的流程,在FLASH中的CopyProcBeg应该也是指向FLASH里面的某个地址啊.楼上能说明白点吗?
阿南 发表于 2007-11-8 19:19 | 显示全部楼层

首先您要明白RO、RW及ZI是什么、及其作用

您可以去精华区查看下面的帖子,或搜索以前的旧帖,祝您好运!<br /><br />一点小小心得,请各位大大鉴定&nbsp;<br />&nbsp;wishcom&nbsp;发表于&nbsp;10/16/2007&nbsp;7:32:17&nbsp;PM&nbsp;ARM&nbsp;论坛&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />自己的一点关于ARM可执行文件的生成规律总结。<br /><br /><br />https://bbs.21ic.com/upfiles/img/200710/20071016192946939.pdf<br />&nbsp;<br />&nbsp;<br />
 楼主| bbs_cq 发表于 2007-11-8 19:50 | 显示全部楼层

to 阿南

太感谢你了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部