Mips fsbl代码不断重启

时间:2014-07-09 02:17:23

标签: embedded mips broadcom

我正在研究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代码时,我看到了这个奇怪的问题。所以我试着让一切变得简单,但却无法理解问题是什么?任何人都可以帮我解决这个问题吗?任何帮助表示赞赏。感谢。

0 个答案:

没有答案