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

テクニカル・ノート 91733

アーキテクチャ:

All

コンポーネント:

general

更新日:

2018/12/11 7:20

はじめに

このテクニカルノートでは、IAR Embedded Workbenchで作成するアプリケーションでCRC16チェックサムを追加する方法についていくつかの例を示します。

対象となる製品

このテクニカルノートは、IAR XLINKリンカを使用するIAR Embedded Workbench製品に適用されます。 IAR ILINKリンカを使用している製品については以下リンクをご参照ください。Technical Note 11927.

概要

  • IAR XLINKリンカでチェックサム計算を有効にする必要があります。
  • IAR XLINKがチェックサムを計算するメモリ範囲を確認します。
  • チェックサムを計算する Cソースコードにを、アプリケーションに追加します。

チェックサム計算に何が含まれるか?

一般的に、ターゲットにダウンロードするアプリケーションの全てのデータが、計算の対象になります。

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

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

アプリケーションが行うチェックサム計算

提供されるサンプルプロジェクトに CRC16チェックサム計算の使用方法を示しています。 アプリケーションの Cソースに、XLINKと同じチェックサム計算を行う Cソースコードを追加する必要があります。計算は2通りあります:

  • 高速 -- 計算時間は短いですが、定数テーブルに ROM/flash を多く使用します。
  • 低速 -- ROM/flash は少なくてすみますが、より長い計算時間が必要です。

以下にご注意ください:

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

XLINKが行うチェックサム計算

これらのオプションはリンカコマンドファイル(filename.XCL)からでも 、IAR Embedded Workbench IDEからでも使用することができます。

IAR Embedded Workbenchからは、 Project > Options > Linker (XLINK) > Processing でチェックサムの計算の設定をします。 サンプルプロジェクトで対応するオプションは以下です。 Fill unused code memory (command line option H); Fill pattern (any pattern); Generate checksum (command line option J); size = 2 bytes; CRC16; Complement = as is; Bit order = MSB first.

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

この計算を行うには、いくつか満たすべき条件があります。

  • チェックサム自体を格納するセグメントは適切なアドレスとアドレス範囲であることを確認する必要があります。
    -Z(CODE)CHECKSUM=1000-1001 /* In this example a two byte checksum */

  • すべてのコードセグメントに対してスタートアドレスとストップアドレスの両方を定義する必要があります。
    -Z(CODE)CODE_SEGMENT /* Wrong */
    -Z(CODE)CODE_SEGMENT=2000 /* Wrong */
    -Z(CODE)CODE_SEGMENT=2000-4FFF /* Correct */

  • スタートアドレスとストップアドレスの両方を持っている限り、複数のCODEメモリ範囲を持つことができます。
    -Z(CODE)FIRST_CODE_SEGMENT=2000-4FFF
    -Z(CODE)SECOND_CODE_SEGMENT=7000-9FFF

サンプルプロジェクト

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

詳細情報

チェックサムについての詳細情報はXMAN.HTMとXLINK.PDFに記載があります。これらのファイルは、IAR Embedded Workbenchのインストール後、ご覧になれます。 また、RELATED TECH NOTES リンクの"Latest version of IAR XLINK Linker"からもダウンロードできます。

オーストラリアのRocksoft社のMr. Ross N. Williams の著作物 A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS は以下リンクからダウンロードできます。 CRC explained by Mr. Ross N. Williams.

 

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

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。