主题 : 关于2440init.s的疑问~ 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 7288
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2009-07-09
最后登录: 2010-06-26
楼主  发表于: 2010-03-23 16:15

 关于2440init.s的疑问~

      最近看2440init.s时发现在设置内存控制器时用到了
;ldr    r0,=SMRDATA
adrl    r0, SMRDATA    ;be careful
也就是说之前是用ldr的,后来用adrl.请问这是为什么呢?我知道adrl是相对地址,但是为什么开始的时候又可以
ldr    r0,=WTCON       ;watch dog disable
ldr    r0,=INTMSK



另外为什么我反汇编的时候有很多andeq r0,r0,r0     作用是什么?为什么回产生,原本的指令为什么会变成andeq r0,r0,r0    

     希望大家帮我解答一下,谢谢了!
级别: 侠客
UID: 4843
精华: 0
发帖: 102
金钱: 810 两
威望: 554 点
贡献值: 0 点
综合积分: 204 分
注册时间: 2009-03-31
最后登录: 2012-11-14
1楼  发表于: 2010-03-23 19:42
WTCON、INTMSK都是控制寄存器,它们的地址当然是绝对的啦。

if (A==B)
{
    variable++;
}
级别: 新手上路
UID: 7288
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2009-07-09
最后登录: 2010-06-26
2楼  发表于: 2010-03-23 20:23
是不是这样理解~就是说为了兼容nandflash启动~在4k内部ram运行时,在还没有拷贝到sdram中时,用ldr绝对地址则寻找不到SMRDATA。因为编译器是设定在0x3000000为起始地址的。而如果直接在nor上执行则可以使用ldr.是这样的吗?
级别: 侠客
UID: 4843
精华: 0
发帖: 102
金钱: 810 两
威望: 554 点
贡献值: 0 点
综合积分: 204 分
注册时间: 2009-03-31
最后登录: 2012-11-14
3楼  发表于: 2010-03-23 20:51
看你编译地址和执行地址是不是一致,跟是不是在nor上运行无关。如果编译地址是0x30000000,在nor上0x00处执行也是不行的。
级别: 新手上路
UID: 7288
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2009-07-09
最后登录: 2010-06-26
4楼  发表于: 2010-03-23 22:09
恩~我明白了~谢谢!
级别: 新手上路
UID: 5952
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 14 分
注册时间: 2009-05-14
最后登录: 2012-03-02
5楼  发表于: 2010-03-27 21:36
我还没有弄明白呢,楼主能详细的说说吗?
我最近在SRAM上调试中断,一直不能成功,我想知道是不是跟启动代码有关系