主题 : lowlevel_init.S中_TEXT_BASE的理解 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 110455
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
贡献值: 0 点
综合积分: 2 分
注册时间: 2014-11-25
最后登录: 2015-07-14
楼主  发表于: 2015-07-12 20:35

 lowlevel_init.S中_TEXT_BASE的理解

lowlevel_init.S中有一段代码:
ldr     r0, =SMRDATA
ldr r1, _TEXT_BASE
sub r0, r0, r1
ldr r1, =BWSCON /* Bus Width Status Controller */
add     r2, r0, #13*4
代码里  SMRDATA-_TEXT_BASE,网上说是获得 Steppingstone里面相对于地址0x00000000的放置的所在地方。但是我的理解是这个相减只是获得了相对于lowlevel_init的位置,但是
lowlevel_init并不是存储在flash的0x0000000位置啊!链接脚本的说明,第一段代码是start.o的,所以lowlevel_init代码不是存在0x00000000位置
SECTIONS
{
   . = 0x00000000    /*指明目标代码起始地址从0x0开始,"."代表当前位置*/
   . = ALIGN(4)     /*代码以4字节对齐*/
   .text :         /*指定代码段:必须将start.o文件放在代码段的开始位置,其它文件可任意放*/
   {
      cpu/arm920t/start.o (.text)  /*代码段第一部分,指明start.s是入口程序,被放到代码段开头*/
      *(.text)                 /*其它代码部分.其中,*表示其它任意文件*/
   }
}

另外一个,我在start.s里也看到有这个定义,为什么会有多个_TEXT_BASE定义呢?
_TEXT_BASE:
.word TEXT_BASE  //