10

私はこれまでAVRとMSP430のみを使用しましたが、これは両方に当てはまります。コンパイルして静的にリンクした後、私の最終的なELFバイナリは約208kBで、IntelHexバイナリは約41kBです。AVRDUDEは、約18kBをアップロードしていると言っています。ここで実際に何が起こっているのですか?

4

3 に答える 3

13

私の最終的なELFバイナリは約208kBです

はい、ELFは生のマシンコードではないためです。これは、再配置情報、動的ロード情報、読み取り専用データのさまざまなセクション、書き込み可能なデータとコードなどを備えたユニバーサル実行可能形式です。OSや動的ロード機能がないため、これらのほとんどはマイクロコントローラーには関係ありません。余分な情報のほとんどは取り除くことができます。

IntelHexバイナリは約41kBです。AVRDUDEは、約18kBをアップロードしていると言っています。

2つの理由。1つは、IntelHEXファイルの各行の終わりにチェックサムが含まれていることです。妥当な平均行長を使用してこれらをカットすると、ファイルが数パーセント、たとえば36kBに縮小することが期待できます。次に、IntelHexファイルが「hex」ファイルと呼ばれる理由があります。生のバイナリデータは含まれていませんが、16進形式の生のバイナリデータが含まれています。つまり、1つの実バイトは2バイトを使用してエンコードされます。したがって、AVRdudeがコードをアップロードすると、コードが生のバイナリに変換され(AVRプロセッサが実行できるもの)、データサイズが再び50%減少します。

于 2012-11-15T05:57:08.457 に答える
1

オブジェクトコードには、シンボルテーブルやデバッガー情報などの追加のmetatdataが含まれています。そのデータのほとんどは、通常、コンパイラやリンカーオプション、またはGNUツールチェーンを使用している場合はストリップユーティリティによってストリップできます。

16進ファイルは2つの16進数字を使用して1バイトを表し、さらにレコードのオーバーヘッドがあるため、常に2進数の2倍強の長さになります。

于 2012-11-15T11:45:34.803 に答える
0

他の人が上で述べたように、HEXファイル形式はASCII印刷可能であり、Motorola .s19と非常によく似て、通信リンク(たとえば、7ビットモデム/端末)を介した転送を容易にします。

http://en.wikipedia.org/wiki/Intel_HEX

http://en.wikipedia.org/wiki/S19_%28file_format%29

于 2012-11-15T14:49:39.327 に答える