u-boot中start.s中的一段代码不能理解。在这里求大神提醒一下!!万分感激!!!
#ifndefCONFIG_SKIP_LOWLEVEL_INITadrr0,_start/*r0<-currentpositionofcode*/ldrr1,_TEXT_...
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
blne cpu_init_crit
这段代码在start.s中。。。。希望有大神指点一下。。不能理解这里!!!!
_TEXT_BASE:
.word TEXT_BASE
这里的 _TEXT_BASE是标号。 还是变量名。
ldr r1, _TEXT_BASE 这个是取的 _TEXT_BASE 这个空间的地址。 还是这个空间里面的值TEXT_BASE ?????有点糊涂了 展开
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
blne cpu_init_crit
这段代码在start.s中。。。。希望有大神指点一下。。不能理解这里!!!!
_TEXT_BASE:
.word TEXT_BASE
这里的 _TEXT_BASE是标号。 还是变量名。
ldr r1, _TEXT_BASE 这个是取的 _TEXT_BASE 这个空间的地址。 还是这个空间里面的值TEXT_BASE ?????有点糊涂了 展开
1个回答
展开全部
您好,这样的:
/*
备注这几个由.word伪操作符定义变量的作用及其取值 _TEXT_BASE: .word TEXT_BASE
_TEXT_BASE:此处定义一汇编语言标签,更好的理解就是:告诉编译器,为_TEXT_BASE分配存储空间,该空间的名字就叫_TEXT_BASE,该空间中存储的值就是由.word后面确定的TEXT_BASEC(即0x33F80000),相当于C语言中 long _TEXT_BASE=TEXT_BASE; TEXT_BASE定义在board\smdk2410\config.mk文件中。该值的作用是告诉链接器,本程序运行的基地址为TEXT_BASE。U-boot编译后,烧在FLASH的第一个块中,CPU复位上电后,PC寄存器为0x0000。怎么会跑到TEXT_BASE处执行呢?
事实上,CPU上电后,从地址0x0000处执行,而U-BOOT的最起始代码,即本文件中从_start开始的代码是与地址不相关的,这段代码放在任何空间执睁念行的结果都是一样(当然不是绝对,假设u-boot代码段是100K,则放在TEXT_BASE-80K处,搬运时就会把u-boot代码后面20K部分悉御困覆盖为最前拆迅面的20K)。
/*
备注这几个由.word伪操作符定义变量的作用及其取值 _TEXT_BASE: .word TEXT_BASE
_TEXT_BASE:此处定义一汇编语言标签,更好的理解就是:告诉编译器,为_TEXT_BASE分配存储空间,该空间的名字就叫_TEXT_BASE,该空间中存储的值就是由.word后面确定的TEXT_BASEC(即0x33F80000),相当于C语言中 long _TEXT_BASE=TEXT_BASE; TEXT_BASE定义在board\smdk2410\config.mk文件中。该值的作用是告诉链接器,本程序运行的基地址为TEXT_BASE。U-boot编译后,烧在FLASH的第一个块中,CPU复位上电后,PC寄存器为0x0000。怎么会跑到TEXT_BASE处执行呢?
事实上,CPU上电后,从地址0x0000处执行,而U-BOOT的最起始代码,即本文件中从_start开始的代码是与地址不相关的,这段代码放在任何空间执睁念行的结果都是一样(当然不是绝对,假设u-boot代码段是100K,则放在TEXT_BASE-80K处,搬运时就会把u-boot代码后面20K部分悉御困覆盖为最前拆迅面的20K)。
追问
为什么是 _TEXT_BASE 和 _start 比较!! 我感觉应该是 TEXT_BASE(即0x33F80000)和 _start 比较啊!!!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
微测检测5.10
2023-05-10 广告
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询