0

ゼロ初期化されたデータがいくつかあります。

スキャッタファイルに実行領域を割り当てました。

Some_Execution_Region +0
{
    stuff.o (+RO, +RW, +RI)
}

しかし、fromelf を使用して axf ファイルから変換した後、結果のバイナリにゼロ初期化データのセグメントが表示されません。

バイナリ ファイルは、ゼロ初期化データが開始する直前で停止します。

問題は、バイナリ ファイル内のゼロ初期化データに対して fromelf に空の領域を生成させる方法です。

私はARMサイトを調べましたが、うまくいきませんでした。ゼロの初期化データを無効にするオプションを見つけただけです。(これは、そのオプションを使用していないため、バイナリでゼロ初期化データを取得する必要があるという意味ではありませんか?)

私は現在fromelf.exe --bin --output=binary.bin elffile.axf、ゼロデータを生成しないを実行しています。

4

1 に答える 1

1

実際にすべてのゼロをバイナリに格納する必要はありません。C を使用している場合、デフォルトでは、他の値に明示的に初期化されていない静的変数をゼロで初期化します。C ランタイム コードは、実行可能ファイルから RAM にゼロをコピーしません。ゼロにする必要がある RAM の部分の開始アドレスと終了アドレスを取得するだけです。起動時に変数をゼロにする必要があることをリンカーに伝える一般的な方法は、変数を.bss(空白の静的ストレージ) セグメントに配置することですが、アセンブリ コードを記述していない限り、これを明示的に行う必要はありません。

于 2012-11-16T23:40:43.827 に答える