日期:2014-05-16  浏览次数:20733 次

arm启动代码疑问(boot.S)
.equ SOURCE, 0xDF003200
  .equ TARGET, 0xC0003200

  .global _start
_start:

  .word 0xE59FF000
  .word 0
  .word ( _start2 - 4 )
  .word 0
  .word ( _start2 - 4 )
_loop1: b _loop1
  nop
  nop
  nop
  nop
  nop
  nop
  nop

_start2:
  ldr r1,=0x10000000
  ldr r3,=0x00040304
  str r3,[r1]
   
  在_start: .word 0xE59FF000中的地址0xE59FF00是什么地址呀 为什么不是直接跳转到_start2:去执行呢?我在mx21 spec中没有找到0xE59FF00的含义 
  有谁知道 请指点!

------解决方案--------------------
这问题我不懂.
顶一哈。哈哈。 
你该知道我是谁!
------解决方案--------------------
.word 0xE59FF000 

不一定是地址阿,也可能是机器指令什么的阿
------解决方案--------------------
一点理解,不确定是否正确:

0xE59FF000 -- 根据ARM ARM中A5.2.2 Load and Store Word or Unsigned Byte - Immediate offset以及LDR指令的说明,应该就是
ldr pc, [pc, #0]
因为offset_12=0,在执行此指令时,用于赋值的PC实际上是 .word (_start2-4)处的地址(注意ARM上PC的值),因此上面的指令相当于将(_start2-4)赋值给PC,也即跳转到地址(_start2-4)处,_start2-4地址也即_start2前面的一个nop地址处,执行空指令后会继续执行_start2标号处开始的代码。

对i.MX21不了解,如果楼主方便用仿真器跟踪的话,看一看应该就很清楚了.
------解决方案--------------------
看上去像是调试器(ADS AXD?)用的格式,setmem的格式应该是:setmem addrexpr valexpr [memory]
简单的说是往某个地址(addrexpr)写入某个宽度([memory],应该只能为指定的size)的值(valexpr)。

comment的格式不太明白,不知是否: comment string,应该只是写到log中的信息。

最好查查所用的调试器的手册,应该在命令部分会有对应的介绍。