打印

关于启动文件的问题,请求高手给个详细的解答!谢谢

[复制链接]
1764|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zlg_arm|  楼主 | 2007-5-5 20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在zlg的实验板上看到这样的startup.s文件,就其中的一段代码有点不能理解,希望高手解答,这个文件和什么的开发板其实没有关系,主要就是和相关的分散加载机制有关!

程序代码如下,文件startup.s

       IMPORT |Image $$ RO $$ Limit|
       IMPORT |Image $$ RW $$ Base|
       IMPORT |Image $$ ZI $$ Base|
       IMPORT |Image $$ ZI $$ Limit|
       
       IMPORT Main                 ;声明C程序中的Main()函数,
       
       AREA START,CODE,READONLY    ;声明代码段START
       ENTRY                       ;标识程序入口
       CODE32                      ;声明32位ARM指令
RESET  LDR  SP,=0x40003F00         ;初始化C程序的运行环境
       LDR  R0,=|Image $$ RO $$ Limit|
       LDR  R1,=|Image $$ RW $$ Base|
       LDR  R3,=|Image $$ ZI $$ Base|
      
       CMP   R0,R1
       BEQ   LOOP1
LOOP0  CMP   R1,R3
       LDRCC R2,[R0],#4
       STRCC R2,[R1],#4
       BCC   LOOP0
       
LOOP1  LDR   R1,=|Image $$ ZI $$ Limit|
       MOV   R2,#0
LOOP2  CMP   R3,R1
       STRCC R2,[R3],#4
       BCC   LOOP2
       
       B     Main           ;跳转到C程序代码Main()函数
       
       END


!!!!!问题一!!!!!
其他的内容还是可以理解,但是这里一段实在是看不懂阿
       CMP   R0,R1
       BEQ   LOOP1
LOOP0  CMP   R1,R3
       LDRCC R2,[R0],#4
       STRCC R2,[R1],#4
       BCC   LOOP0

这段程序在干什么?有什么意义?请解释一下!!谢谢

!!!!!问题二!!!!!
还有就是
LOOP1  LDR   R1,=|Image $$ ZI $$ Limit|
       MOV   R2,#0
LOOP2  CMP   R3,R1
       STRCC R2,[R3],#4
       BCC   LOOP2

这一段是不是在给ZI段的内容清0?

就上面的这两个问题

相关帖子

沙发
jimsboy| | 2007-5-13 06:44 | 只看该作者

好像是这样

前一段先看看程序运行的地址是否和当前的地址一致.因为程序存在flash里边,如果你的程序是在SDRAM里执行,它就发现运行地址和当前所在的地址不一致,这时它就会把自己搬到预定的地方(一般是SDRAM所在的空间),然后再运行.这一段代码一般只会出现在程序在SDRAM里运行的那种.在 flash里运行的好象没有.
第二个分析正确
以上是我个人认识,如果有高手发现不对欢迎拍砖

使用特权

评论回复
板凳
luhuaren| | 2007-5-14 09:03 | 只看该作者

re

      CMP   R0,R1
       BEQ   LOOP1
LOOP0  CMP   R1,R3
       LDRCC R2,[R0],#4
       STRCC R2,[R1],#4
       BCC   LOOP0

用来判断RW的加载域和运行域是否相同,如果不同,则将RW段由加载域拷贝到运行域,如果相同,则跳过去。。  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

72

帖子

0

粉丝