1

我正在研究 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 代码时,我看到了这个奇怪的问题。所以我试着让一切变得简单,但就是不明白问题出在哪里?谁能帮我解决这个问题?任何帮助表示赞赏。谢谢。

4

0 回答 0