我正在分析TI X代码,以便更深入地了解omap皮层引导序列。
我从/cpu/omap3 3文件夹中的start.S文件开始。前几行如下:
#include <config.h>
#include <asm/arch/cpu.h>
.globl _start
_start:
b reset
ldr pc, _hang
ldr pc, _hang
ldr pc, _hang
ldr pc, _hang
ldr pc, _hang
ldr pc, _hang
ldr pc, _hang
_hang:
.word do_hang
.word 0x12345678
.word 0x12345678
.word 0x12345678
.word 0x12345678
.word 0x12345678
.word 0x12345678
.word 0x12345678 /* now 16*4=64 */l
.global _end_vect
_end_vect:异常向量(重置向量除外)将跳转到地址"_hang“。但是那里没有操作码,只有标签do_hang的地址(在后面的代码中找到,这是一个死循环函数)。我对.word的理解是,它将值(在本例中是do_hang地址)复制到二进制文件中的特定位置,在我们的例子中,复制到地址"_hang“。当PC装载_hang时,程序执行会跳转到address _hang,在那里它不会找到操作代码,而是找到一个地址(do_hang)值。
我的问题:
提前谢谢你的帮助。
马丁
发布于 2014-01-29 08:50:49
好的!我拿到了,
命令是LDR _hang!它不会跳转到_hang,但它会将_hang中的值加载到PC中。_hang中的值是死循环函数do_hang的地址。
还有一个问题:为什么不在每个向量中简单地"b do_hang“?我想我们永远也不会知道。
问候
马丁
https://stackoverflow.com/questions/21284580
复制相似问题