カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10810594
FAQカテゴリ(大) デバイス対応
最終更新日 2016-03-26

質問内容

TN52619: ielftoolのチェックサム - NXPのLPCデバイスを使用する場合

回答内容

ターゲット:ARM
コンポーネント:一般
公開日:2013年2月12日午前10時23分

 

概要
このテクニカルノートでは、いくつかのNXP LPCデバイスで必要な「特別な」ベクタテーブルのチェックサムについて説明します。

 

NXP LPCデバイスについて
LPCデバイスは、デバイスの特定の場所 (ベクターテーブル) に特別なチェックサムを配置する必要があります。IAR Embedded Workbench は自動的にこのチェックサムを計算し配置します。但し、一連のテクニカルノートに書かれている CRC チェックサムは、ベクターテーブルのこの領域を計算対象外にしなくてはなりません。

 

問題 1 - ielftool error
ビルドすると次のエラーになります。 

ielftool error: Checksums have dependencies

エラーになる理由は、ベクターテーブルのチェックサムとアプリケーションのチェックサムが同じ ielftool コマンドで作成されているからです。

 

解決策1 - ベクタテーブルを除外
start アドレスをベクターテーブルの次のアドレスに書き換えて、アプリケーションのチェックサムの計算から、ベクターテーブルを除外します。

プロジェクトメニュー > オプション > リンカ > チェックサム > 開始アドレス を 0x0 から 0x40 に書き換え。
(.map で .intvec セクションの終了アドレスを調べてください)

 

問題2 - チェックサムは、vector テーブルを含める必要があります
アプリケーションのチェックサムは、ベクターテーブルを含めなくてはならないが、解決策 1では、ベクターテーブルを除外している。

解決策 2 - ポストビルドコマンドラインを使用する。
ポストビルドコマンドラインを使用すると、2つのチェックサムを 別々のielftool を使って計算することができます。これで ielftool error の原因となる「依存」を避け、0x0番地をスタートアドレスにすることができます。

1.プロジェクトメニュー > オプション > リンカ > チェックサムタブ
□未使用のコードメモリをフィルする
のチェックをはずします。 

2. プロジェクトメニュー > オプション > リンカ > 追加オプション > コマンドラインオプションの使用に以下を追加します。

--place_holder __checksum,2,.checksum,1
--define_symbol __checksum_begin=0x0
--define_symbol __checksum_end=0xfffb

 

3. プロジェクトメニュー > オプション > ビルドアクション > ビルドアクション設定タブの「ポストビルドコマンドライン」に、以下の行を記入します。 

ielftool
  --fill 0xFF;0x0-0xfffb
  --checksum __checksum:2,crc16,0x0;0x0-0xfffb
  --verbose "$TARGET_PATH$" "$TARGET_PATH$"

 

問題 3 - バイナリファイルにチェックサムが含まれていない。

プロジェクトメニュー > オプション > 出力コンバータ > 出力タブ
□追加出力ファイルを生成
にチェックを入れてバイナリ出力を作成。バイナリファイルにチェックサムが含まれていない。

理由は、バイナリファイルがリンク後作成されますが、ポストビルドの前だからです。すなわち、ポストビルドアクションによりチェックサムが計算される前です。

 

解決策 3 - post-build .bat ファイルを使用する

ポストビルドコマンドラインで、最初にチェックサムを計算し、次に追加の出力を行う .bat ファイルを起動します。
サンプルプロジェクト、IAR Embedded Workbench for ARM - Example (LPC device).zipを参照してください。

 

注意:

注: このサンプルプロジェクトは、Example (1 range, 3 diff. locations)、ビルド設定 PlaceEndOfROM です。このプロジェクトは、ielftool エラーを発生させるため、デバイスを LPC1768 に変更してあります。しかし、チェックサムを計算するアドレス範囲 は同じです。

 

説明:

1.Project メニュー> Options… > Build Actions > Post-build command line に以下の文字列を書き込みます。

$PROJ_DIR$\post-build.bat $TARGET_BPATH$

 

2.以下の内容の、post-build.bat というファイルをプロジェクトフォルダに作ります。

set OUT=%1.out  set HEX=%1.hex set BIN=%1.bin

:: アプリケーションのチェックサムを計算します

ielftool --fill 0xFF;0x0-0xfffb --checksum __checksum:2,crc16,0x0;0x0-0xfffb --verbose %OUT% %OUT%

:: 追加のヘキサファイルの出力
ielftool.exe --ihex --verbose %OUT% %HEX%

:: 追加のバイナリファイルの出力 ielftool.exe --bin --verbose %OUT% %BIN%

 

全ての製品の名前は、それぞれの所有者の商標または登録商標です。

参考資料URL