[ARM奮闘記 AT91R40807]

★秋月 ARMボード添付開発環境付属のスタートアップコードのバグ

BSS領域のサイズが 0 の場合に、データの最後の方を 4byte ほど 0 で下記つぶしてしまうバグを発見しました。
特に標準ライブラリをリンクせずに使うような場合に、文字列データが変化したりする不都合が出ます。
次のように修正することで対処できます。

問題箇所
  mov r0, #0
  ldr r1, =_bss_start
  ldr r2, =_end
LC0:
  str r0, [r1], #4  @ r1==r2 でも必ず1度は実行されてしまう do{ }while的なコード
  cmp r1, r2
  blt LC0

↓修正

  mov r0, #0
  ldr r1, =_bss_start
  ldr r2, =_end
LC0:
  cmp r1, r2
  beq ExitLC0    @ while{ } 的なコードへ修正
  str r0, [r1], #4
  b LC0
ExitLC0:

★NJARM7 で使うことを前提にしたスタートアップコード

これまでの修正内容を全て含み、多少の改良を施したスタートアップコードを用意しました。
NJARM7 で RAM へダウンロードして使うための ram_crt0.s、ROM Writer(後述)で書き込んで使う ための rom_crt0.s の2つです。

ダウンロード

ボード付属開発環境のスタートアップコードとは多少ファイル名が異なりますので、ファイル名を 変更して使うなり、私の ArmDev で利用するなり、Makefile に記述するなりして使ってください。
また、割り込み禁止状態で main() を呼び出します。割り込みを使う場合は、適切な場所に割り込 み許可処理を追加する必要があります。


[前へ][▲上へ][次へ]