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

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

FAQ詳細情報

ID 10810668
FAQカテゴリ(大) リンカ
最終更新日 2014-02-18

質問内容

TN91733: XLINK を使用したチェックサム計算

回答内容

適用される製品 : 全てのEW
EWのコンポーネント : 一般
キーワード : チェックサムの計算
更新日 : December 17, 2008

EWで作成したプロジェクトに追加可能なCRC16チェックサム

概要
• XLINK リンカのチェックサムをオンにします。
• XLINKが計算するチェックサムの範囲を確認します。
• チェックサムを計算する Cソースを、アプリケーションに追加します。

チェックサム計算に何を加えるか?
一般的に、ターゲットにダウンロードするアプリケーションの全てのデータが、計算の対象になります。

XLINKの、チェックサムの生成とリンカリストの生成のオプションを入れてビルドすると、てっとり早くこれらのことを知ることができます。そのから .map ファイルの最後を見ると、 どのメモリのどの範囲がチェックサムの対象であるか書かれています。

DATAは通常チェックサムの計算に含まれていませんが、XDATA (及び、その他のいくつのセグメント型) は、CODEセグメント型を除き含めることができることに注意してください。もし、他の (CODE以外の) セグメント型が含まれる場合、これらのセグメント型を含めないようにすることができます。 (EWAVR 用のサンプルプロジェクトでは -J オプションが設定されていて、XDATAはチェックサムの計算範囲に含まれません.)

アプリケーションが行うチェックサム計算
提供されたサンプルプロジェクト CRC16チェックサム計算の使用方法を示しています。アプリケーションの Cソースに、XLINKと同じチェックサム計算を行う Cソースファイルを追加する必要があります。計算は2通りあります。
• 高速 - 計算時間は短いですが、定数テーブルに ROM/flash を多く使用します。
• 低速 - ROM/flash は少なくてすみますが、より長い計算時間が必要゛てす。

以下にご注意ください。
• チェックサム計算は複数の範囲について行うことができます。
複数の範囲のチェックサム計算を行う時は、低いアドレスから先に行うようにします。
• チェックサム計算の範囲は、正しく計算を行うために、チェックサム自身が配置されるアドレスを含まないようにしなくてはなりません。(1つの解決策はチェックサムをメモリの最後に置くことで、他の解決策は、アプリケーションに2つの領域を作ることです)
これで、チェックサムのバイト (1、2、4バイトのどれか) が置かれる場所は、チェックサムの計算範囲の外になります。
• 遅い関数を使用する時は、計算の最後にチェックサムのバイト数だけ、値 0で最終の呼び出しを行う必要があります。

XLINKが行うチェックサム計算
これらのオプションはリンカコマンドファイルからでも (filename.XCL)、Embedded Workbenchからでも使用することができます。

EWからは、Project > Options > Linker (XLINK) > Processing でチェックサムの計算の設定をします。サンプルプロジェクトに対応するオプションは、Fill unused code memory (コマンドライン・オプション H); Fill pattern (自由な値); Generate checksum (コマンドライン・オプション J); size = 2 bytes; CRC16; Complement = as is; Bit order = MSB first.

コマンドラインからから (または .xcl file) のチェックサムの計算は -J または -H リンカオプションを使用します。-J オプションが使用できるようにするためには、-Hオプションを使用する必要があることに注意してください。

この仕事を行うには、いくつか満たすべき条件があります。
• チェックサムを格納するセグメントは正しいアドレスとアドレス範囲であることを保証する。
-Z(CODE)CHECKSUM=1000-1001 /* このサンプルプロジェクトでは2バイトチェックサム */

• 全てのコードセグメントのスタートアドレスとストップアドレスが定義されていなくてはなりません。
-Z(CODE)CODE_SEGMENT /* Wrong */
-Z(CODE)CODE_SEGMENT=2000 /* Wrong */
-Z(CODE)CODE_SEGMENT=2000-4FFF /* Correct */
 
• スタートアドレスとストップアドレスがあると言うことは、1つ以上の CODE メモリの範囲があるということです。
-Z(CODE)FIRST_CODE_SEGMENT=2000-4FFF
-Z(CODE)SECOND_CODE_SEGMENT=7000-9FFF

ダウンロードするサンプルプロジェクト
これらのサンプルプロジェクトは、XLINKがCRC計算をして生成するチェックサムと同じ値を計算する、通常の C のソースを含みます。このサンプルプロジェクトは EWオプションの XLINKの設定と、CHECKSUMセグメントを、正しいアドレスに配置する .xcl ファイルを含んでいます。


詳細情報
チェックサムについての詳細情報は、EWのインストールフォルダにある XMAN.HTM と XLINK.PDF に書かれています。 Latest version of XLINK linker 最新版の XLINK リンカをダウンロードすることができます。オーストラリアのRocksoftのMr. Ross N. Williamsは A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS を執筆しました。このドキュメントは CRC explained by Mr. Ross N. Williams からダウンロードすることができます。

-------

430 normal memory (v.3.40 to 3.42) example
(ZIP, 12 KB)

430 extended memory (v.3.42) example
(ZIP, 57 KB)

430 (v.4.11) example with non-zero start value
(ZIP, 61 KB)

430 (v.1.26B) example
(ZIP, 23 KB)

6812/HCS12 (v.3.10A) example
(ZIP, 49 KB)

6812 (v.2.44B) example
(ZIP, 34 KB)

78K (v4.30A) example
(ZIP, 11 KB)

8051 V7.xx example
(ZIP, 11 KB)

8051 V5.xx example
(ZIP, 34 KB)

ARM (v. 4.30 to 4.42) example
(ZIP, 47 KB)

AVR (v.4.12A) example (updated 2006-06-21)
(ZIP, 42 KB)

V850 (v3.20A) example
(ZIP, 10 KB)

CRC explained by Mr. Ross N. Williams
(65 KB)

-------------------------

Related Support notes:

Technical note 11927
Checksum calculation with IELFTOOL after linking with ILINK

Technical note 16492
Latest version of XLINK linker

Technical note 41610
Calculate CRC with MSP430 hardware

Technical note 45456
C source for CRC32

Technical note 48021
Debugging checksum algorithms

Technical note 72878
Exclude the MSP430 INFO memory from a checksum calculation

Technical note 76314
Checksum application for AVR (2.2x)

 

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

参考資料URL