[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() を呼び出します。割り込みを使う場合は、適切な場所に割り込
み許可処理を追加する必要があります。
[前へ][▲上へ][次へ]