我正在分析TI X-Loader代码,以便更深入地了解omap皮质启动序列。
我从/ cpu / omap3文件夹中的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时,程序执行跳转到地址_hang,并且它没有找到操作码而是找到一个地址(do_hang)的值。
我的问题:
提前感谢您的帮助。
马丁
答案 0 :(得分:0)
确定!我知道了,
命令是LDR PC _hang! 它不会跳转到_hang但它会将_hang中的值加载到PC中。 _hang中的值是死循环函数do_hang的地址。
还有一个问题: 为什么不在每个向量中简单地使用“b do_hang”? 好吧,我想我们永远不会知道。
此致
马丁