チェックサム計算のトラブルシューティング
2つのチェックサムが一致しない場合、いくつか原因が考えられます。以下にトラブルシューティングのヒントを示します。
可能であれば、チェックサムの突合せの際に小さいサンプルを使用してください。
両方のチェックサムの計算で、まったく同じメモリ範囲が使用されているか確認します。
この確認を簡単にするため、
ielftoolはstdoutについて役立つ情報(使用された正確なアドレス、およびアクセスされた順序)のチェックサムを計算し、範囲をリストします。すべてのチェックサムシンボルが、すべてのチェックサムの計算から除外されていることを確認します。
チェックサムの配置とチェックサムの範囲を比較して、それらが重複していないか確認してください。ielftoolがチェックサムを生成した後、
[ビルド]メッセージウィンドウに情報が見つかります。チェックサムの計算で同じ多項式が使用されているか確認します。
バイト内のビットが、最下位ビットから最上位ビット、またはその逆というようにチェックサムの計算と同じ順序で処理されているか確認してください。これは、[ビット順]オプション(またはコマンドラインから
‑‑checksumオプションの-mパラメータ)を使用して制御します。CRCの小さい派生形を使用している場合は、アルゴリズムにバイト追加する必要があるかどうか確認します。
バイトのシーケンス末尾に追加するゼロの数は、チェックサムのサイズと一致する必要があります。つまり、1バイトのチェックサムならゼロが1 つ、2バイトのチェックサムであればゼロが2つ、4バイトのチェックサムならゼロが4つ、8バイトのチェックサムではゼロが8つです。
フラッシュメモリ内の任意のブレークポイントは、フラッシュの内容を変更します。つまり、アプリケーションが計算したチェックサムは、
ielftoolが最初に計算したチェックサムともはや一致しません。2つのチェックサムをもう一度一致させるには、すべてのフラッシュのブレークポイントとC-SPYが内部的にフラッシュに設定するブレークポイントを無効にする必要があります。スタックプラグインとデバッガオプションRun toの両方で、C-SPYのブレークポイント設定を必要とします。可能なブレークポイントの設定元の詳細は、ブレークポイントの消費元』を参照してください。デフォルトでは、リンカオプション
‑‑place_holderを使用してメモリ内に割り当てたシンボルは、C-SPYによってint型であると見なされます。チェックサムのサイズがintのサイズとは異なる場合、そのサイズに合わせてチェックサムシンボルの表示フォーマットを変更できます。C-SPY[ウォッチ]ウィンドウでシンボルを選択し、コンテキストメニューから[表示フォーマット]を選択します。チェックサムシンボルのサイズに合った表示フォーマットを選択します。
アプリケーションがアドレス変換にリンクされている場合(logicalディレクティブ参照)、チェックサムが明示的な物理チェックサム範囲を使用して計算されていることを確認してください(アドレス変換された範囲のチェックサム参照)。