Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

ADRL与LDR的区别

$
0
0
            调一些代码遇到的问题,总结一下。
            先铺垫一下,有这个一个问题:
            
            圈6如何找到圈8 ?
            答案a:找出圈8相对于圈6的位置,即圈6后边第二个。这个就是位置无关了。有一个神器就是“ADRL”,它能做到这一点。

            答案b: 找出圈8的绝对地址,即地址3。找的办法可以是这样的:位置=8 - 5。这样就可以找出绝对地址3了。这个可以先用"LDR"记下圈8的编号(即8),然后减去圈5的编号(即5)得到的就是地址3。

            上边只是理解,具体的体现答案a是在《嵌入式应用开发完全手册》光盘代码中用汇编对SDRAM初始化用到的。代码如下:
            

            b是在u-boot-2009.11中lowlevel_init.S用汇编对SDRAM进行初始化时出现的。代码如下:
            

            通过反汇编也可以看到区别:
            
             (adrl可以看出得到的就是一个相对地址)
            

            (ldr直接得到的是一个不正确的编号,再减去链接地址0x30000000,就可以是正确的绝对地址了)

            而我的问题是用了答案b,却不完整,没有对减去链接起始地址。导致出现了问题。不过也学到的东西。不过对于答案a答案b,我现在不能说哪个方法好一点,只是都能用,u-boot中为什么用看似复杂的方法应该有它的原因。
作者:kangear 发表于2013-4-11 17:16:57 原文链接
阅读:6 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>