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 //