我正在研究Mips R4380芯片及其Broadcom 7xxx平台的嵌入式系统。我有这样的代码:
.globl print_forever;
.ent print_forever;
.set noreorder
loop:
PRINT_CHAR('0')
nop
b loop
nop
.set reorder
.end print_forever
启动代码:
__start:
b __rom_init
nop
__rom_init:
.set noreorder
bal init_uart
nop
PRINT_CHAR('S')
nop
bal print_forever
nop
所有代码都放在闪存上,__ start位于0xBFC00000,这是上电后的第一个指令位置。如果print_forever与启动代码(大约在0xBFC01380)放在同一个.s文件中,那么一切都很好,我可以看到它永远打印。但是如果将print_forever放在一个不同的.s文件中(大约在0xBFC07C00处),那么系统会在每次打印数百个零后继续重启(我可以在数百个0之后看到'S')。
print_forever所在的代码地址应位于有效的引导代码区域(<32KB)。代码不使用任何RAM(除了写入寄存器来打印字符)并且未缓存,因此缓存和内存应该不是问题。我也尝试过另一块电路板但结果相同,所以闪光灯应该没问题。
我在启动代码开发方面没有经验。当我试图修改fsbl代码时,我看到了这个奇怪的问题。所以我试着让一切变得简单,但却无法理解问题是什么?任何人都可以帮我解决这个问题吗?任何帮助表示赞赏。感谢。