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