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