(57)【要約】【課題】組み込みコンピュータ（１０４）上で動作するスレッドにシームレスな通信を提供するためのシステムおよび方法である。【解決手段】ＤＡＴシステム（１００）を用いて、プログラマーは、スクリプティングプログラム、任意のＣＯＭコンプライアントプログラム、またはグラフィカルなテストユーティリティを介してスレッドの通信インターフェイスをテストすることができる。ＤＡＴシステム（１００）は、組み込みコンピュータ（１０４）とホストコンピュータ（１０８）との間で伝送されるデータのブロックを自動的にフォーマットし、そして、装置特有のエニュメレーションサイズ、装置特有のポインタサイズ、装置特有のストラクチャーアライメント境界、装置特有のインテジャーサイズ、および装置特有のバイトオーダリングを明らかにする。【選択図】図１
2008251032.tif 000002
【特許請求の範囲】
【請求項１】
ホストコンピュータと組み込みコンピュータとの間の通信を提供するためのシステムであって、
それぞれが複数のデータフィールドを有する通信インターフェイスを提供する複数のスレッドを実行する組み込みコンピュータと、
スクリプト命令を実行するためのスクリプトエンジンと、
前記通信インターフェイスのそれぞれを確認する通信データベースと、
前記通信インターフェイスをアクセスするために前記スクリプト命令のためのアプリケーションプログラミングインターフェイスを提供する通信モジュールとを具備し、
前記通信データベースは、少なくとも部分的に、
前記通信インターフェイスを定義するインターフェイス記述ファイルと、
前記組み込み装置の装置特性と、
前記スクリプトエンジンを実行しているプラットフォームの装置特性と
からなる情報から自動的に生成され、
前記通信モジュールは、前記通信データベースからの情報に基づき自動的に生成され、
前記スクリプト命令は、前記通信データベースにおいて前記通信インターフェイスのうちの少なくとも１つを確認すると共に、前記アプリケーションプログラミングインターフェイスを介して前記確認された通信インターフェイスにおけるフィールドに関するファンクションを呼び出し、前記ファンクションは、前記データフィールドの一つにデータを格納すること、前記データフィールドの一つからデータを読み取ること、およびデータフィールドをテストすることからなるグループから選択されるシステム。
【請求項２】
ホストコンピュータと組み込みコンピュータとの間の通信を提供するためのシステムであって、
それぞれが複数のデータフィールドを有する通信インターフェイスを提供する複数のスレッドを実行する組み込みコンピュータと、
前記通信インターフェイスのそれぞれを確認する通信データベースと、
前記通信インターフェイスをアクセスするためにスクリプト命令のためのアプリケーションプログラミングインターフェイスを提供する通信モジュールとを具備し、
前記通信モジュールは、前記通信データベースに保持された情報に部分的に基づき自動的に生成され、
前記スクリプト命令は、前記通信データベースにおける前記通信インターフェイスの少なくとも１つを確認すると共に、前記アプリケーションプログラミングインターフェイスを介して前記確認された通信インターフェイスにおける少なくとも１つのフィールドに関するファンクションを呼び出すシステム。
【請求項３】
前記ファンクションは、フィールドを設定すること、フィールドを読み取ること、そしてフィールドをテストすることからなるグループから選択されることを特徴とする請求項２に記載されたシステム。
【請求項４】
前記ホストコンピュータ上の前記通信モジュールは、前記組み込みコンピュータによって実行されるスレッドから前記ホストコンピュータによって実行されるスレッドへの伝送のために、または前記ホストコンピュータによって実行されるスレッドから前記組み込みコンピュータによって実行されるスレッドへの伝送のために、または前記コンピュータのうちの一つのコンピュータによって実行されるスレッドから当該同一のコンピュータによって実行される他のスレッドへの伝送のためにデータを自動的にフォーマットする請求項２記載のシステム。
【請求項５】
伝送のためのデータをフォーマットする処理は、
前記データが前記コンピュータ上の異なる複数のスレッド間で伝送されるかどうかを決定するステップと、
前記データ伝送が前記同一のコンピュータ上の異なる複数のスレッド間で発生するように意図されるところの変更なしに前記データを伝送するステップと
を具備する請求項４記載のシステム。
【請求項６】
伝送のためのデータをフォーマットする処理は、
前記データが前記組み込みコンピュータおよび前記ホストコンピュータ上の複数のスレッド間で伝送されるかどうかを決定するステップと、
前記データが前記ホストコンピュータ上のスレッドと前記組み込みコンピュータ上のスレッドとの間、または前記組み込みコンピュータ上のスレッドと前記ホストコンピュータ上のスレッドとの間で伝送されるところの次ステップを実行し、伝送のためのメッセージに、ペイロードのデータとポインタで参照されるデータをコピーするステップと、
必要に応じて、前記ペイロードにおけるデータエレメントのバイトオーダをフォーマットするステップと、
必要に応じて、前記ペイロードにおけるデータタイプのサイズをフォーマットするステップと、
データストラクチャのアライメントを調整するステップと
を具備する請求項４記載のシステム。
【請求項７】
伝送のためのデータをフォーマットする処理は、前記ホストコンピュータ単独で実施される請求項６記載のシステム。
【請求項８】
伝送のためのデータをフォーマットする処理は、前記組み込みコンピュータ単独で実施される請求項６記載のシステム。
【請求項９】
伝送のためのデータをフォーマットする処理は、伝送のためのメッセージに、ペイロードのデータとポインタで参照されるデータをコピーするステップを含む請求項４記載のシステム。
【請求項１０】
伝送のためのデータをフォーマットする処理は、前記ペイロードのデータエレメントのバイトオーダをフォーマットするステップを含む請求項４記載のシステム。
【請求項１１】
伝送のためのデータをフォーマットする処理は、前記ペイロードのデータタイプのサイズをフォーマットするステップを含む請求項４記載のシステム。
【請求項１２】
伝送のためのデータをフォーマットする処理は、データストラクチャのアライメントを調整するステップを含む請求項４記載のシステム。
【請求項１３】
通信にスレッドを提供する方法であって、
組み込みコンピュータ上で動作するスレッドによって提供される通信インターフェイスをアクセスするためにスクリプティングプログラムのためのアプリケーションプログラミングインターフェイスを提供する通信オブジェクトに対するレファレンスを読み込むステップと、
前記アプリケーションプログラミングインターフェイスを介して少なくとも一つのデータフィールドにデータを格納するステップと、
前記アプリケーションプログラミングインターフェイスおよび前記通信インターフェイスを介して、前記格納されたデータを前記スレッドに伝送するステップとを具備する方法。
【請求項１４】
通信にスレッドを提供する方法であって、
通信インターフェイスをアクセスするためにスクリプティングプログラムのためのリード方法を提供する通信オブジェクトに対するレファレンスを読み込むステップと、
前記通信オブジェクトのリード方法を呼び出し、これにより、組み込みコンピュータ上で動作するスレッドによって前記通信フェイスを介して提供される格納データを受け取るステップとを具備しする方法。
【請求項１５】
通信にスレッドを提供する方法であって、
インターフェイスディスクリプションファイルで定義された通信インターフェイスの少なくとも一つの通信特性を記述する通信データベースを生成するステップと、
組み込みコンピュータ上で動作するスレッドによって提供される通信インターフェイスをアクセスするためにスクリプティングプログラムのためのアプリケーションプログラミングインターフェイスを提供する通信オブジェクトに対するレファレンスを読み込むステップと、
前記アプリケーションプログラミングインターフェイスの使用を通じて前記通信における少なくとも一つのデータフィールドにデータを格納するステップとを具備する方法。
【請求項１６】
通信にスレッドを提供する方法であって、
組み込みコンピュータ上で動作するスレッドによって提供される通信インターフェイスをアクセスするためにスクリプティングプログラムのためのアプリケーションプログラミングインターフェイスを提供する通信オブジェクトに対するレファレンスを読み込むステップと、
前記アプリケーションプログラミングインターフェイスの使用を通じて前記通信における少なくとも一つのデータフィールドにデータを格納するステップとを具備する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、開発およびテストに関する。さらに詳しくは、本発明の分野は、ソフトウェアの開発およびテストに関する。
【背景技術】
【０００２】
一般的に、組み込み装置は、マイクロプロセッサおよびアプリケーションソフトウェアを具備している。アプリケーションソフトウェアは、リアルタイムオペレーションシステム（ＲＴＯＳ）の下で稼動し、一つまたはそれよりも多いスレッドに分割される。スレッドは、組み込みシステム内の他の定義されたスレッドとマイクロプロセッサの制御を共有する実行可能なソフトウェアの独立なユニットである。多くの組み込み装置において、スレッドは、それ自体のスタック領域に配置され、“プライオリティ”を与えられ、そしてスレッドが“独立な”エンティティとして稼動することを可能にする他のリソースに割り付けられる。スタック領域は、ローカル変数の一時的記憶のために確保されたメモリの区画である。プライオリティは、もし一つよりも多くのスレッドが待っていれば、ＲＴＯＳにより何れのスレッドがマイクロプロセッサの制御を獲得するのかを決定するために使用される。リソースは、キューやフラグ等の種々雑多のアイテムを含むことができ、それは、ＲＴＯＳによってスレッドを管理するために必要とされる。スレッドに使用される他の共通の用語は、“タスク(task)”および“プロセス(process)”である。プロセスは、また、、異なるプロセスを逆作用の影響から保護するセパレートアドレス領域の意味を含む。マイクロソフト（登録商標）のウィンドウズ（登録商標）オペレーティングシステムを用いるデスクトップコンピュータ上で稼動するプロセスの例は、マイクロソフト（登録商標）のワード（登録商標）である。
【０００３】
スレッドが互いに通信するための共通の方法は、オペレーティングシステムによって提供されるメッセージングアプリケーションプログラミングインターフェイス（ＡＰＩ）を介している。メッセージは、一般にイベントを備え、そして少なくとも二つのスレッド間で伝送されるデータのブロックをオプションで備える。例えば、スレッド（“送り手”）は、メッセージを組み立て、そしてＲＴＯＳから特定のＡＰＩを呼び出す。ＲＴＯＳは、他のスレッド（“受け手”）にいくつかのタイプのイベントが発生したことを通知する。受け手のスレッドは、それから、入ってくるメッセージをリードする。スレッドが通信するためのもう一つの共通の方法は、ファンクションコールを介する。一つのスレッドにより提供されるファンクションコールを使用することは、他のスレッドで呼び出すことができる。加えて、ファンクションは、同一のスレッドに共存する他のファンクションにより呼び出すことができる。ファンクションについての他の共通用語は、サブルーチン(subroutine)、プロシジャー(procedure)、またはメソッド(methods)を含む。本明細書で使用されるように、用語“通信インターフェイス”は、メッセージングまたはリモートファンクションコール通信の何れかを介するような、二つのスレッド間のデータを通信するための如何なるインターフェイスも包含することを意図する。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上述したような組み込み装置についての既知の開発およびテストと関連した多くの問題が存在する。第１に、既知のテストシステムは、通信インターフェイスをテストし、且つスレッド自体の実行をテストするために、オペレーショナルＲＴＯＳを有する組み込み装置を必要とする。都合の悪いことに、既知のシステムは、それらを支援する対応するスレッドおよび通信インターフェイスをシミュレートする能力を備えない。
【０００５】
第２に、ホストランニングスレッド(host running threads)に対して一つよりも多くのプラットフォームを使用する場合、異なる装置上のインターフェイスに象徴される互換性の問題がある。異なるタイプの装置は、それらの個々のメモリ領域にメッセージを異なって格納する。既知のテストシステムは、異なるプラットフォームへの伝送のためのデータを自動的にはフォーマットしない。二つのコンピュータ間の非互換性の例は、一方のコンピュータがロウメモリ（リトルエンディアン）にＬＳＢ(least significant byte)で１６ビットインテジャー（２バイト９を格納し、且つ他方のコンピュータがハイメモリ（ビッグエンディアン）にＬＳＢで１６ビットの整数を格納する場合である。アプリケーションがこの１６ビットを交換したい場合、そのインテジャーの値は、コンピュータによって異なった解釈をされる。
【０００６】
第３に、既知のシステムは、組み込みコンピュータと通信できるカスタムデスクトップツールの創作を必要とする。特定の組み込みアプリケーションのためのインターフェイスファンクショナリティ(interface functionality)を構築するプロセスは、時間を浪費する手作業のプロセスである。デスクトップツールおよび組み込みソフトウェアの両方とも、それらが互いに通信することを可能にするために、それらのアプリケーションに対して手作業のアップデートを必要とする。従って、組み込みソフトウェアアプリケーションのためのインターフェイスに対してデスクトップツールを介したシームレス且つ自動的なアクセスは存在しない。
【０００７】
第４に、標準のＣ／Ｃ＋＋インターフェイス定義ファイルと互換性のない他のプログラミング言語で開発されたデスクトップアプリケーションは、組み込みコンピュータとシームレスに情報をやりとりすることができない。一般に、インターフェイス定義ファイルは、組み込みソフトウェアが要求するメッセージのフォーマットを定義する。ビジュアルベーシック（登録商標）、ＬａｂＶＩＥＷ（登録商標）等のような言語は、インターフェイスのフォーマットを定義する標準のＣインターフェイス定義ファイルを使用しない。従って、これらの言語を使用するソフトウェア技術者は、組み込み装置上で実行中のスレッドをテストすることができない。
従って、先の制限を有しない組み込みソフトウェアのテストおよび開発のための改良された装置に対する要請がある。
【課題を解決するための手段】
【０００８】
本発明の一つの特徴は、データを伝送するためのシステムからなる。このシステムは、ホストコンピュータと、前記ホストコンピュータ上で動作する第１アプリケーションと、組み込みコンピュータと、前記組み込みコンピュータ上で動作する第２アプリケーションと、データベースとを具備する。前記データベースは、前記第１アプリケーションおよび前記第２アプリケーションの複数のインターフェイスのうち少なくとも１つのインターフェイス特性を確認する。前記データベースは、ユーザーの要求に応答して自動的に生成されると共に、少なくとも部分的に前記ユーザーによって提供されたインターフェイス記述ファイルに基づく。
【０００９】
本システムは、また、前記組み込みコンピュータとの通信のためのインターフェイスを定義する通信モジュールとを具備する。前記第１アプリケーションは前記通信モジュールを介して前記第２アプリケーションと通信する。前記ホストコンピュータは、前記組み込みコンピュータのためのホストコンピュータ装置特性情報を格納する。前記ホスト装置特性情報は、エニュメレーションサイズ、適応的エニュメレーションインジケーター、ショートサイズ、ロングサイズ、フロートサイズ、ダブルサイズ、ダブルロングサイズ、ポインタサイズ、ストラクチャーアライメント境界、インテジャーサイズ、バイトオーダリング、ブールサイズからなるグループから選択された情報を含む。
【００１０】
前記ホストコンピュータは、該ホストコンピュータのための組み込みコンピュータ装置特性情報を格納する。前記組み込みコンピュータ装置特性情報は、エニュメレーションサイズ、ポインタサイズ、ストラクチャーアライメント境界、インテジャーサイズ、およびバイトオーダリングからなるグループから選択された情報を含む。前記第１アプリケーションに目標設定された前記第２アプリケーションからの通信の受信に応答して、前記通信モジュールは、前記第１アプリケーションへの通信の伝送に先だって通信を変更し、かつ前記変更は、少なくとも部分的に、前記ホストコンピュータ装置特性情報、前記組み込みコンピュータ装置特性情報、および前記インターフェイス特性に基づいている。
【００１１】
本発明の他の特徴は、データの伝送方法からなる。本方法は、データベースを自動的に生成するステップを具備し、前記データベースは、複数のインターフェイスを記述するインターフェイス情報を含む。本発明は、また、、組み込みコンピュータから通信を受信するステップと、少なくとも前記インターフェイス情報と前記組み込みコンピュータの少なくとも１つの特性を記述する特性情報とに基づき通信をフォーマットするステップとを具備する。
【００１２】
本発明の他の特徴は、データの伝送方法からなる。本方法は、組み込みコンピュータから通信を受信するステップと、前記受信された通信をフォーマットするステップとを具備し、前記フォーマットするステップは、少なくとも部分的に、前記通信の少なくとも１つの特性を記述するインターフェイス情報と、前記組み込みコンピュータの少なくとも１つの特性を記述する情報とに基づいている。
【００１３】
本発明の一つの特徴は、データベースの構築方法からなり、該方法は、アプリケーションスレッドの少なくとも１つの通信インターフェイスを定義するインターフェイス記述ファイルを読み込むステップと、前記通信インターフェイスから通信情報を抽出するステップを具備する。前記通信インターフェイスから通信情報を抽出するステップは、前記通信に関連するユニークな識別子を読み取るステップと、前記通信インターフェイスを介して伝送される通信のサイズを決定するステップと、前記通信におけるデータフィールドのそれぞれのネームを決定するステップと、前記通信インターフェイスに関連したメモリを伝送する方法を決定するステップと、前記通信インターフェイスに関連したポインタデータを確認するステップと、前記通信インターフェイスの管理方法を決定するステップと、メッセージ基準かファンクションコールかどうかという、前記通信インターフェイスのタイプを決定するステップとを具備する。本方法は、また、、前記抽出されたインターフェイス情報を通信データベースに格納するステップと、前記通信データベースにおける組み込み装置の少なくとも１つの装置特性を格納するステップとを具備する。前記組み込みコンピュータの装置特性は、エニュメレーションサイズ、ポインタサイズ、ストラクチャーアライメント境界、インテジャーサイズ、およびバイトオーダリングからなるグループから選択される。本方法は、また、、前記通信データベースにおけるホストコンピュータの少なくとも１つの装置特性を格納するステップを具備する。
【００１４】
本発明の他の特徴は、データベースの構築方法からなる。本方法は、少なくとも１つの通信インターフェイスを定義するインターフェイス記述ファイルを読み込むステップと、前記通信インターフェイスから通信情報を抽出するステップと、前記抽出された通信情報を通信データベースに格納するステップと、且つ前記通信データベースにおけるホストコンピュータの少なくとも１つの装置特性を格納するステップとを具備する。
【００１５】
また、本発明の他の特徴は、データベースからなる。本データベースは、アプリケーションスレッドの通信インターフェイスの少なくとも１つの特性を記述するインターフェイス情報を具備する。本データベースは、また、ホストコンピュータの少なくとも１つの特性を記述するホストコンピュータ情報と、組み込みコンピュータの少なくとも１つの特性を記述する組み込みコンピュータ装置情報とを具備する。
【００１６】
また、本発明の他の特徴は、データベースからなり、インターフェイス記述ファイルで定義されたアプリケーションスレッドの通信インターフェイスの少なくとも１つの特性を記述するインターフェイス情報と、少なくとも部分的に前記インターフェイス情報を用いて前記通信インターフェイスを検査すると共にテストすることを提供するための所定のインターフェイスとを具備する。
【００１７】
また、本発明の他の特徴は、複数のコンポーネントによってアクセス可能な通信インターフェイスを提供するためのシステムであって、本システムは、スクリプティングプログラムと、ＣＯＭコンプライアントオブジェクトと、前記ＣＯＭコンプライアントオブジェクトと通信するために前記スクリプティングにアプリケーションプログラミングインターフェイスを提供するように構成された少なくとも１つの通信モジュールとを具備する。
【００１８】
本発明の一つの特徴は、ホストコンピュータと組み込みコンピュータとの間の通信を提供するためのシステムである。本システムは、それぞれが複数のデータフィールドを有する各通信インターフェイスを提供する複数のスレッドを実行する組み込みコンピュータと、スクリプト命令を実行するためのスクリプトエンジンと、前記通信インターフェイスのそれぞれを確認する通信インターフェイスと、前記通信インターフェイスをアクセスするためのスクリプト命令にアプリケーションプログラミングインターフェイスを提供するための通信モジュールとを具備し、前記通信データベースは、少なくとも部分的に、前記通信インターフェイスを定義するインターフェイス記述ファイルと、前記組み込み装置の装置特性と、前記スクリプトエンジンを実行しているプラットフォームの装置特性とからなる情報から自動的に生成される。前記通信モジュールは、前記通信データベースからの情報に基づき自動的に生成される。前記スクリプト命令は、前記通信データベースにおける前記通信インターフェイスのうちの少なくとも１つを確認すると共に、前記アプリケーションプログラミングインターフェイスを介して前記確認された通信インターフェイスにおけるフィールドに関するファンクションを実施する。前記ファンクションは、前記データフィールドの一つにデータを格納すること、前記データフィールドの一つからデータを読み取ること、およびデータフィールドをテストすることからなるグループから選択される。
【００１９】
また、本発明の他の特徴は、スレッドとの通信を提供するシステムである。本システムは、それぞれが通信インターフェイスを提供する複数のスレッドと、前記通信インターフェイスのそれぞれを確認する通信データベースと、前記通信インターフェイスをアクセスするためのスクリプト命令にアプリケーションプログラミングインターフェイスを提供するための通信モジュールとを具備する。前記通信モジュールは、少なくとも部分的に、前記通信データベースからの情報に基づき自動的に生成される。前記スクリプト命令は、前記アプリケーションプログラミングインターフェイスを介して前記通信データベースにおける前記通信インターフェイスのうちの１つを用いてスレッドと通信する。
【００２０】
また、本発明の他の特徴は、ホストコンピュータと組み込みコンピュータとの間の通信を提供するためのシステムであである。本システムは、それぞれが複数のデータフィールドを有する通信インターフェイスを提供する複数のスレッドを実行する組み込みコンピュータと、前記通信インターフェイスのそれぞれを確認する通信データベースと、前記通信インターフェイスをアクセスするための前記スクリプト命令にアプリケーションプログラミングインターフェイスを提供するための通信モジュールとを具備する。前記通信モジュールは、前記通信データベースに保持された情報に部分的に基づき自動的に生成される。前記スクリプト命令は、前記通信データベースにおける前記通信インターフェイスの少なくとも１つを確認すると共に、前記アプリケーションプログラミングインターフェイスを介して前記確認された通信インターフェイスにおける少なくとも１つのフィールドに関するファンクションを実施する。
【００２１】
また、本発明の他の特徴は、通信にスレッドを提供する方法であって、本方法は、通信オブジェクトにレファレンスを読み込むステップと、通信オブジェクトのリード方法を呼び出し、これにより、組み込みコンピュータ上で動作するスレッドによって前記通信フェイスを介して提供される格納データを受け取るステップとを具備し、前記通信オブジェクトが、通信インターフェイスをアクセスするためのスクリプティングプログラムにリード方法を提供する。
【００２２】
また、本発明の他の特徴は、通信にスレッドを提供する方法であって、本方法は、インターフェイスディスクリプションファイルで定義された通信インターフェイスの少なくとも一つの通信特性を記述する通信データベースを生成するステップと、通信オブジェクトにレファレンスを読み込むステップと、前記アプリケーションプログラミングインターフェイスの使用を通じて前記通信における少なくとも一つのデータフィールドにデータを格納するステップとを具備し、前記通信オブジェクトが、組み込みコンピュータ上で動作するスレッドによって提供される通信インターフェイスをアクセスするためのスクリプティングプログラムにアプリケーションプログラミングインターフェイスを提供する。
【００２３】
また、本発明の他の特徴は、通信にスレッドを提供する方法であって、本方法は、通信オブジェクトにレファレンスを読み込むステップと、前記アプリケーションプログラミングインターフェイスの使用を通じて前記通信における少なくとも一つのデータフィールドにデータを格納するステップとを具備し、前記通信オブジェクトが、組み込みコンピュータ上で動作するスレッドによって提供される通信インターフェイスをアクセスするためのスクリプティングプログラムにアプリケーションプログラミングインターフェイスを提供する。
【００２４】
また、本発明の他の特徴は、複数のコンポーネントによってアクセス可能な通信インターフェイスを提供するためのシステムであって、本システムは、第１プログラミング言語でのスクリプティングプログラムと、第２プログラミング言語でのスクリプティングプログラムと、前記第２スクリプティングプログラムと通信するために前記第１スクリプティングプログラムにアプリケーションプログラミングインターフェイスを提供するように構成された少なくとも一つの通信モジュールと、を具備する。
【００２５】
本発明の一つの特徴は、ホストコンピュータと組み込みコンピュータとの間の通信を提供するためのシステムからなる。本システムは、複数の通信インターフェイスを提供する複数のスレッドを実行し、各通信インターフェイスが複数のデータフィールドを有する組み込みコンピュータと、前記通信インターフェイスのそれぞれを確認する通信データベースとを具備する。前記通信データベースは、少なくとも部分的に、前記通信インターフェイスを定義するインターフェイス記述ファイル、前記組み込みコンピュータの装置特性、ホストプラットフォームの装置特性から構成される情報から自動的に生成される。本システムは、また、前記通信インターフェイスをアクセスためにＣＯＭコンプライアントアプリケーションにアプリケーションプログラミングインターフェイスを提供するための通信モジュールを具備する。前記通信モジュールは、前記通信データベースからの情報に基づき自動的に生成される。前記ＣＯＭコンプライアントアプリケーションにおけるオブジェクトは、前記通信データベースにおける前記通信インターフェイスの少なくとも一つを確認すると共に、前記アプリケーションプログラミングインターフェイスを介して前記確認された通信インターフェイスにおける少なくとも一つに関するファンクションを呼び出す。該ファンクションは、前記データフィールドの一つにデータを格納すること、前記データフィールドの一つからデータを読み出すこと、およびデータフィールドをテストすることからなるグループから選択される。
【００２６】
本発明の他の特徴は、ホストコンピュータと組み込みコンピュータとの間の通信を提供するためのシステムからなる。本システムは、それぞれが通信インターフェイスを提供する複数のスレッドを実行する組み込みコンピュータと、前記スレッドのそれぞれの前記通信インターフェイスを確認する通信データベースと、前記通信インターフェイスと通信するためにＣＯＭコンプライアントアプリケーションに複数のファンクションを提供するように構成されたＣＯＭオブジェクトとを具備し、前記ＣＯＭオブジェクトは、少なくとも部分的に、前記メッセージングデータベースにおける通信インターフェイスに基づき自動的に生成される。
【００２７】
本発明の他の特徴は、通信に対するアクセスを提供する方法からなり、本方法は、ＣＯＭコンプライアントアプリケーションを介して前記通信インターフェイスをアクセスするための少なくとも一つのファンクションから構成される通信オブジェクトを提供するステップと、前記ＣＯＭコンプライアントアプリケーションを介して前記通信インターフェイスをアクセスするステップとを具備する。
【００２８】
また、本発明の他の特徴は、通信に対するアクセスを提供するためのシステムからなる。本システムは、ＣＯＭから通信インターフェイスをアクセスするための少なくとも一つのファンクションから構成された通信オブジェクトを提供するための手段と、前記ＣＯＭコンプライアントアプリケーションを介して前記通信インターフェイスをアクセスするための手段とを具備する。
【００２９】
また、本発明の他の特徴は、複数のコンポーネントによってアクセス可能な通信インターフェイスを提供するためのシステムからなり、本システムは、ＣＯＭコンプライアントオブジェクトと、組み込みコンピュータ上で動作する少なくとも一つのスレッドと、前記スレッドと通信するために前記ＣＯＭコンプライアントオブジェクトにアプリケーションプログラミングインターフェイスを提供するように構成された少なくとも一つの通信モジュールとを具備する。
【００３０】
本発明の一つの特徴は、組み込みコンピュータ上で動作するスレッドをテストするためのシステムからなる。本システムは、ホストコンピュータと、前記ホストコンピュータ上で動作する第１スレッドと、スレッドを実行する組み込みコンピュータとを具備し、前記組み込みコンピュータは、前記スレッドに送信される複数の通信をモニタすると共に前記モニタされた通信から前記コンピュータにデータを伝送し、前記ホストコンピュータは、複数のデータセットに前記モニタされた通信からのデータを格納する。
【００３１】
本発明の他の特徴は、スレッドをテストするための方法からなる。本方法は、組み込みコンピュータ上で動作するスレッドに送信される複数の通信をモニタするステップと、ホストコンピュータに前記モニタされた通信を伝送するステップと、前記モニタされた通信を複数のデータセットに格納するステップと、少なくとも一つの前記データセットを前記モニタされたスレッドに伝送するステップとを具備する。
【００３２】
また、本発明の他の特徴は、スレッドをテストするための方法からなり、第１スレッドから第２スレッドへの複数の通信をモニタするステップと、データセットに前記通信のそれぞれを格納するステップと、前記第１スレッドに前記格納されたデータエレメントのそれぞれを伝送するステップとを具備し、前記通信は、複数のデータエレメントから構成される。
【００３３】
本発明の一つの特徴は、コードを生成する方法からなる。本方法は、インターフェイス定義ファイルをリードするステップと、少なくとも一つの通信インターフェイスを確認するステップとを具備する。前記通信インターフェイスは、少なくとも、該通信インターフェイスを介して受け渡されるポインタを定義する。本方法は、また、前記通信インターフェイスを呼び出すためのコードを自動的に生成するステップを具備する。前記生成されたコードは、前記ポインタの少なくとも一つの属性を定義するルーチンを呼び出すためのコードを含む。
【００３４】
本発明の他の特徴は、コードを生成するためのシステムからなる。本システムは、インターフェイス定義ファイルをリードするための手段と、前記インターフェイス定義ファイルにおける少なくとも一つのリモートファンクションコールインターフェイスを確認するための手段と、第１プラットフォーム上で実行のための第１コードを自動的に生成するための手段と、第２プラットフォーム上で実行のための第２コードを自動的に生成するための手段とを具備し、第１プログラムが第１コードを実行することは、メッセージングインターフェイスを介して、第２プログラムが第２コードを実行することと通信し、前記生成された第２コードは、前記リモートファンクションコールインターフェイスを介してルーチンを呼び出す。
【００３５】
図１は、組み込みコンピュータをテストするための開発およびテストシステムを例示するブロックダイアグラムである。
図２は、図１の開発およびテストシステムの一部である通信データベースの或るコンポーネントを例示するブロックダイアグラムである。
図３は、図１の開発およびテストシステムの他の実施形態を例示するブロックダイアグラムである。
図４Ａおよび４Ｂは、図３の組み込みコンピュータと通信するために使用される代表的なスクリプトのダイアグラムである。
図５は、図１の開発およびテストシステムの他の実施形態を例示するブロックダイアグラムである。
【００３６】
図６は、図１の通信でーたベースの代表的なコンテンツを例示するブロックダイアグラムである。
図７は、図５の生成コンポーネントの代表的な階層を例示するブロックダイアグラムである。
図８は、図１の開発およびテストシステムで使用するソースファイルを修正するプロセスを例示するフローチャートである。
図９は、図１の通信データベースを構築するプロセスを例示するフローチャートである。
図１０は、図１のホストプラットフォーム通信モジュールを使用するプロセスを例示するフローチャートである。
【００３７】
図１１は、通信をフォーマットするプロセスを例示するフローチャートである。
図１２Ａ−１２Ｄは、異なる装置特性を有する二つのプラットフォーム間でポインタデータを伝送する場合のポインタを管理する代表的な方法を例示する。
図１３は、組み込みコンピュータ上で動作するスレッドと通信するためのスクリプティングファイルを使用するプロセスを例示するフローチャートである。
図１４は、図３のメッセージングオートメーションコンポーネントをロードするプロセスを例示するフローチャートである。
図１５は、図３の開発およびテストシステムディスクリプトにおいて動作するスレッドを登録するプロセスを例示するフローチャートである。
【００３８】
図１６Ａは、メッセージ通信をスクリプトから図３の開発およびテストシステムに送信するプロセスを例示するフローチャートである。
図１６Ｂは、ファンクションコールをスクリプトから図３の開発およびテストシステムに呼び出したファンクションコールを送信するプロセスを例示するフローチャートである。
図１７Ａは、図３の開発およびテストシステムからスクリプトを介して通信をスクリプト受信するプロセスを例示するフローチャートである。
図１７Ｂは、図３の開発およびテストシステムからリモートファンクションコールを介して通信をスクリプト受信するプロセスを例示するフローチャートである。
図１８は、図５の生成コンポーネントを利用するプロセスを例示するフローチャートである。
図１９は、図５のＣＯＭコンポーザを起動するプロセスを例示するフローチャートである。
【００３９】
図２０は、図５の生成コンポーネントを構築するプロセスを例示するフローチャートである。
図２１は、図１の生成コンポーネントのインターフェイスを生成するプロセスを例示するフローチャートである。
図２２は、任意のＣＯＭコンプライアント言語から図５の生成コンポーネントを用いるプロセスを例示するフローチャートである。
図２３は、図１の通信データベースによって確認された通信インターフェイスの一つをテストするプロセスを例示するフローチャートである。
図２４は、少なくとも二つのファンクションコール間で伝送されるモニタリング通信に基づき情報のデータセットを生成するプロセスを例示するフローチャートである。
図２５は、メッセージをテストするための代表的なユーザーインターフェイスである。
【００４０】
図２６は、リモートファンクションコールのための代表的なユーザーインターフェイスである。
図２７は、図１の開発およびテストシステムで使用するテンプレートコードを生成するプロセスを例示するフローチャートである。
図２８は、所定の通信インターフェイスによって定義されたメッセージをハンドリングするためのコードを生成するプロセスを例示するフローチャートである。
図２９は、メッセージハンドリングコードを生成するプロセスを例示するフローチャートである。
【００４１】
図３０は、メッセージを所定の通信インターフェイスに送信するためのコードを生成するプロセスを例示するフローチャートである。
図３１は、ファンクションコールに応答してインタープラットフォームメッセージングをハンドリングするためのコードを生成するプロセスを例示するフローチャートである。
図３２は、代表的な生成されたコードを例示するブロックダイアグラムである。
図３３は、代表的な生成されたコードを例示するブロックダイアグラムである。
【発明を実施するための最良の形態】
【００４２】
以下の詳細な説明は、本発明のある特定の実施形態に方向付けられる。しかしながら、本発明は、クレームで定義され且つ網羅されるように、多くの異なる方法で実現できる。この説明では図面を参照し、この図面では一貫して同じパーツに同じ数字が付される。
【００４３】
図１は、ＤＡＴシステム１００の一実施形態を例示するブロックダイアグラムである。この開発およびテスト（development and testing；“ＤＡＴ”）システム１００は、開発者が、かれらが定義する通信インターフェイスに対する自動的且つシームレスなアクセスを有することを可能にする。加えて、ＤＡＴシステム１００は、割り当てられたプラットフォーム上でスレッドが動作することを可能にし、そしてインターフェイスに対する任意のプログラミング言語のシームレスなアクセスを可能にする。
【００４４】
ＤＡＴシステム１００は、ホストコンピュータ１０８とデータ通信する組み込みコンピュータ１０４を具備する。組み込みコンピュータ１０４は、スレッド１１４に通信を送るために使用される組み込みコンピュータ通信モジュール１１２を実行する。ホストコンピュータ１０８は、ホストコンピュータ１０８上で動作するスレッド１２０にメッセージを送るために使用されるホストコンピュータ通信モジュール１１６を実行する。組み込みコンピュータ通信モジュール１１２およびホストコンピュータ通信モジュール１１６は、他のプラットフォームへの伝送のために定められた或るプラットフォームに由来する他のインターフェイスを介して送信された通信及び／又はメッセージの経路を互いに定めることができる。本発明の一実施形態において、或るプラットフォームから他のプラットフォームへの全ての通信は、組み込みコンピュータ通信モジュール１１２およびホストコンピュータ通信モジュール１１６を介して伝送される。
【００４５】
組み込みコンピュータ１０４は、電話、周辺装置上のカード、自動車、冷蔵庫、または任意の他の電子装置に備えられる。ホストコンピュータ１０８は、ディスプレイおよびマウスやキーボードなどの入力装置を含む任意のコンピューティング装置を包含する。
ホストコンピュータ１０８は、また、通信インターフェイスの“特性”を獲得するための組み込み及びホストのインターフェイス定義ファイルを自動的にコンパイルする通信データベース１２４を具備する。
【００４６】
ＤＡＴシステム１００は、メッセージング(messaging)およびトレーシング(tracing)のための標準化されたＡＰＩを提供し、シームレスなメッセージングおよびトレーシング環境を提供するために使用されるプロトコルサイト(protocol suite)を収容し、且つ二つのプラットフォーム間の通信リンクを提供する。本発明の一実施形態において、ＤＡＴシステム１００によって提供されるＡＰＩは、次の事柄のためのインターフェイスを具備する。即ち、（１）メッセージを記録すること、（２）メッセージをリードすること、（３）コマンドデータを送信すること、（４）応答データを送信すること、（５）メッセージをブロードキャストすること、（６）メッセージを承諾すること(subscribing to message)。（７）通信データベースに格納されたメッセージのリストを返すこと、（８）特定のメッセージのメッセージフォーマットを返すこと、そして（９）特定のメッセージの識別子及び／又はネームを返すこと。更に、ＤＡＴシステム１００の代表的なＡＰＩを以下に述べる。
【００４７】
スタジオモジュール１２８は、通信データベース１２４によって確認される通信インターフェイスをテストするためのテスト環境およびグラフィカルユーザーインターフェイスを提供する。ＤＡＴシステム１００は、組み込みソフトウェアアプリケーションによって定義された全てのメッセージおよびリモートファンクションコール(remote function call)の完全な可視性(visibility)および制御を提供する。例として、スタジオモジュール(studio module)１２８を使用して、開発者は、データベース内のメッセージ及び／又はリモートファンクションコールのリスト全体をスキャンし、そしてそれらをスクリーンに表示することができる。一旦、特定のメッセージまたはリモートファンクションコールが選択されると、通信データベース１２４は、メッセージに関連したエレメントタイプおよびネームを返すことを問われ得る。
【００４８】
実行上、組み込みコンピュータ１０４およびホストコンピュータ１０８における各スレッドは、ＤＡＴシステム１００に記録(register)される。登録(registration)は、ルーティングテーブルを“ハードコード(hardcode)”する必要なく、メッセージをダイナミックに送る。任意の時点でのスレッドは、選択されたメッセージを要求するスレッドが“所有 (owns)”することをＤＡＴシステム１００に通知するために、ＤＡＴシステム１００によって提供される特定のアプリケーションプログラミングインターフェイス“ＡＰＩ”を呼び出すことができる。これに関連して、所有する(Owns)は、特定のスレッドがいつでもメッセージを受信し、他のスレッド及び／又はアプリケーションがそれを送信することを意味する。メッセージを送信する旨の要求が出された場合、ＤＡＴシステム１００は、所有しているスレッド(owning thread)がローカルであるか又は他のプラットフォーム上にあるかどうかを決定する。もしそのプラットフォームがローカルであれば、メッセージは、所有するスレッドに直接送られる。もしそのプラットフォームがリモートであれば、メッセージは、他のプラットフォームに直接送られる。もしメッセージが組み込みコンピュータ１０４で発生すれば、受信に関し、ホストコンピュータ１０８は、ホストコンピュータ１０８の装置特性と互換性を持つようにメッセージをフォーマットする。もしメッセージがホストコンピュータ１０８で発生すれば、ホストコンピュータ１０８は、組み込みコンピュータ１０４の装置特性と互換性を持つようにメッセージをフォーマットする。
【００４９】
組み込みコンピュータ通信モジュール１１２、ホストコンピュータ通信モジュール１１６、およびスタジオモジュール１２８は、それぞれ種々のサブルーチン、プロシジャー(procedures)、定義ステートメント、およびマクロを具備する。コンピュータ通信モジュール１１２、ホストコンピュータ通信モジュール１１６、およびスタジオモジュール１２８は、Ｃ、Ｃ＋＋（登録商標）、ベーシック（登録商標）、パスカル（登録商標）、ジャバ（登録商標）、およびフォートラン（登録商標）のような任意のプログラミング言語で記述されていてもよく、そして周知のオペレーションシステムの下で動作してもよい。Ｃ、Ｃ＋＋（登録商標）、ベーシック（登録商標）、パスカル（登録商標）、ジャバ（登録商標）、およびフォートラン（登録商標）は、工業標準プログラミング言語であり、そのために、多くの商業上の承諾者が実行可能なコードを作成するために使用できる。
【００５０】
組み込みコンピュータ１０４は、VxWorks（登録商標）、Nucleus（登録商標）、ThreadX、ウィンドウズ（登録商標）ＣＥ、およびエンベデッドリナックス（登録商標）のような既成又は独自仕様のリアルタイムオペレーティングシステムの制御下で動作してもよい。
【００５１】
ホストコンピュータ１０８は、ユニックス（登録商標）、リナックス（登録商標）、ディスクオペレーティングシステム（ＤＯＳ）、ＯＳ／２（登録商標）、PalmＯＳ（登録商標）、VxWorks（登録商標）、ウィンドウズ（登録商標）3.X、ウィンドウズ（登録商標）９５、ウィンドウズ（登録商標）９８、ウィンドウズ（登録商標）ＮＴ、ウィンドウズ（登録商標）ＣＥ、およびウィンドウズ（登録商標）ＸＰのような既成又は独自仕様のオペレーティングシステムの制御下で動作してもよい。組み込みコンピュータ１０４およびホストコンピュータ１０８上の各スレッドは、所定のアプリケーションプログラミングインターフェイスＡＰＩを介して、組み込みコンピュータ通信モジュール１１２およびホストコンピュータ通信モジュール１１６とそれぞれ通信することができる。以下の説明は、ＡＰＩにより提供される或るルーチンを述べる。他のルーチンが提供されてもよいことが認識されるべきである。
【００５２】
【表１】
2008251032.tif 000003
【００５３】
【表２】
2008251032.tif 000004
【００５４】
【表３】
2008251032.tif 000005
【００５５】
【表４】
2008251032.tif 000006
【００５６】
【表５】
2008251032.tif 000007
【００５７】
【表６】
2008251032.tif 000008
【００５８】
図２は、通信データベース１２４の機能ブロックダイアグラムを表す。通信データベース１２４は、コンパイラ(２００およびアクセスエンジン(access engine)２０４を具備する。通信データベース１２４は、Ｃ（登録商標）、Ｃ＋＋（登録商標）、または他のプログラミング言語のような標準インターフェイス定義ファイルを構文解析(parse)し、そしてインターフェイスおよびトレーシング情報を自動的に抽出する。インターフェイス定義ファイルは、スレッド通信およびソフトウェアトレーシングに使用されるインターフェイスのフォーマットを含んでいる。本発明の一実施形態においては、プログラマーはコンパイラープラグマ(compiler pragmas)を介してインターフェイス定義ファイルにこれらの特性を定義することができる。
【００５９】
インターフェイス定義ファイルからの情報は、整えられて通信データベース１２４に格納されるので、ホストコンピュータ通信モジュール１１６を介して他のデスクトップアプリケーションによりアクセスされることができる。通信データベース１２４を構築する代表的なプロセスは、図９に関して後述される。
【００６０】
本発明の一実施形態において、ＤＡＴシステム１００は、ＤＡＴシステム１００のライブラリ及びヘッダファイルをリンクすることの以外にアプリケーションの修正を必要とすることなく、組み込みコンピュータ１０４上のルーチンに対してリモートファンクションコールを実施するため、ホストコンピュータ１０８上のアプリケーションに対しシームレスで自動の能力を提供する。逆も同様である。リモートファンクションコールのサポートでコードを自動的に生成する代表的プロセスは、図３１を参照して後述される。
【００６１】
図３は、本発明の他の代表的な実施形態を例示するブロックダイアグラムである。図３に示される本発明の実施形態は、スクリプト言語が組み込みコンピュータ１０４およびホストコンピュータ１０８上で動作するスレッドをシームレスにアクセスすることを可能にする。
【００６２】
図３に示される本発明の実施形態に関し、ＤＡＴシステム１００もまた、スクリプトを実行するためのメッセージングオートメーションコンポーネント（messaging automation component；“ＭＡＣ”）３０４およびスクリプトエンジン３１２を具備する。本発明の一実施形態において、ＭＡＣ３０４は、以下のファンクションを遂行するためのインターフェイスを提供するＣＯＭコンプライアントオブジェクトであり、そのファンクションは、インターフェイスの所有権を指定すること、データセットを生成すること、情報のフィールドを送信すること、データセットを送信すること、メッセージを受信すること、そしてＤＡＴシステム１００によって管理されるメッセージのそれぞれをリストアップすることである。スクリプトエンジン３１２は、ジャバスクリプト（登録商標）、ビジュアルベーシック（登録商標）、ＶＢＳｃｒｉｐｔ（登録商標）、Ｔｃｌ（登録商標）、ＪＳｃｒｉｐｔ（登録商標）、Ｐｙｔｈｏｎ（登録商標）等のような、独自仕様または既成のエンジンである。
【００６３】
以下に述べることは、通信のためにＭＡＣ３０４により提供される様々なオブジェクトの説明である。本発明の一実施形態において、６クラスのインターフェイスオブジェクトが存在し、それは、（１）オーナーメッセージオブジェクト(owner message objects)、（２）ユーザーメッセージオブジェクト(user message objects)、（３）スパイメッセージオブジェクト(spy message objects)、（４）オーナーファンクションオブジェクト(owner function objects)、（５）ユーザーファンクションオブジェクト(user function objects)、（６）スパイファンクションオブジェクト(spy function objects)である。他のタイプのオブジェクトもまた使用できることが理解される。
ＭＡＣ３０４のアプリケーションプログラミングインターフェイスを以下に述べる。
【００６４】
【表７】
2008251032.tif 000009
【００６５】
【表８】
2008251032.tif 000010
【００６６】
【表９】
2008251032.tif 000011
【００６７】
【表１０】
2008251032.tif 000012
【００６８】
【表１１】
2008251032.tif 000013
【００６９】
【表１２】
2008251032.tif 000014
【００７０】
【表１３】
2008251032.tif 000015
【００７１】
一実施形態において、メッセージオブジェクトにとって、データセットは、コマンド（コマンドペイロード）または応答（応答ペイロードおよびアウトポインタデータ）の何れかに関連したデータのセットである。一方向のメッセージはコマンドデータセットを有し、ブロードキャストメッセージは応答メッセージを有し、そして双方向メッセージは両方を有する。ファンクションオブジェクトにとって、データセットは、入力（パラメータリスト）及び／又は出力（返信値およびアウトポインタデータ）に関連づけられる。
【００７２】
スクリプティング言語は、開発者が自動テストをカスタマイズし、そしてマクロ能力を加えることを可能にする。一般に、スクリプティング言語はこのタイプのファンクショナリティに対して使用することは容易である。スクリプティング言語は、また、ループ(roops)、条件ステートメント(conditional statement)等のようなコンパイルされた言語に見られる多くの同一の能力を備え、スクリプトプログラムはスクリプトエンジンにより実行されるスクリプト言語で記述されたテキストである。メッセージングオートメーションコンポーネント３０４は、組み込みコンピュータ１０４およびホストコンピュータ１０８におけるスレッドのそれぞれの通信インターフェイスに対するシームレスで迅速なアクセスをスクリプトプログラムに提供する。メッセージングオートメーションエンジン３０４を使用して、リモートファンクションコールまたはメッセージにおけるフィールドは、セットされ、リードされ、テストされ、または表現中で使用される。メッセージングオートメーションコンポーネント３０４を介して、スクリプティングプログラムは、また、組み込みコンピュータ１０４またはホストコンピュータ１０８上で動作するソフトウェアを用いてシームレスに通信を送信し且つ受信することができる。さらに、このような通信を確立することは、組み込みコンピュータ１０４及び／又はホストコンピュータ１０８上で動作するスレッドのコード変更を必要としない。
【００７３】
本発明の一実施形態において、スクリプティングプログラムは、スタジオモジュール１２８によって提供されるインターフェイスを介して起動される。本発明の他の実施形態においては、スクリプティングプログラムは、スタジオモジュール１２８により起動される必要はないが、代わりに、ホストコンピュータ通信モジュール１１６で直接的に起動され、そして通信することができる。
【００７４】
図４Ａおよび４Ｂは、組み込みコンピュータ１０４及び／又はホストコンピュータ１０８上で動作するスレッド１１４の一つと通信するためにスクリプトエンジン３１２において実行できる代表的なスクリプトを例示する。コードブロック４０４は双方向メッセージを送信するために使用することができる代表的なコードを例示する。コードブロック４０４の第３行目では、スクリプトはオブジェクト“ｍｓｇ”を、通信データベースに保持されているメッセージの一つに等しいとおく。第６行目では、スクリプトは、メッセージと関連するペイロードにフィールドを設定する。本技術分野では知られているように、ペイロードは構築されたデータである。第９行目では、スクリプトは、コマンドメッセージを送信し、そして応答を待つ。第１１行目では、スクリプトは、応答データを読み取る。コードブロック４０８は、ブロードキャストを承諾するために使用される代表的なコードを例示する。コードブロック４１２は、ファンクションを呼び出すために使用される代表的なコードを例示する。コードブロック４１６は、ファンクションの所有権を登録するために使用される代表的なコードを例示する。
【００７５】
図５は、本発明の他の実施形態を例示するブロックダイアグラムである。ＣＯＭコンポーザ５０４は、ＣＯＭコンプライアントアプリケーション５１２とホストコンピュータ通信モジュール１１６との間のインターフェイスとして働く生成コンポーネント５０８を自動的に構築する。ＣＯＭは、アプリケーションが開発された言語から独立して、異なるアプリケーションが既知のインターフェイスを用いて互いに通信することを可能にするマイクロソフト（登録商標）の技術である。互換性の目的のために、ＣＯＭはインターフェイスの特有のフォーマットおよびプロトコルを特定する。
【００７６】
生成コンポーネント５０８は、ＣＯＭコンプライアントアプリケーション５１２に、所定のＡＰＩを通した組み込みアプリケーションの通信インターフェイスへのシームレスで迅速なアクセスを提供する。生成コンポーネント５０８を用いて、ＣＯＭコンプライアントアプリケーション５１２は、組み込みコンピュータ１０４およびホストコンピュータ１０８上で動作するスレッドとシームレスに通信する。ホストコンピュータ通信プラットフォーム１１６は、その送り先に適したフォームで通信を自動的にフォーマットする。通信をフォーマットする代表的なプロセスは、図１１を参照して後述される。
次に述べることは、生成コンポーネント５０８によって提供されるアプリケーションプログラミングインターフェイスの説明である。
【００７７】
【表１４】
2008251032.tif 000016
【００７８】
【表１５】
2008251032.tif 000017
【００７９】
【表１６】
2008251032.tif 000018
【００８０】
【表１７】
2008251032.tif 000019
【００８１】
【表１８】
2008251032.tif 000020
【００８２】
【表１９】
2008251032.tif 000021
【００８３】
【表２０】
2008251032.tif 000022
【００８４】
一実施形態において、種々のタイプのアプリケーションに通信システムを提供するため、ＭＡＣ３０４、スタジオモジュール１２８、生成コンポーネント５０８が一緒に利用できることに気づく。例えば、ＭＡＣ３０４のアプリケーションプログラミングインターフェイスを用いて、第１言語のスクリプティングプログラムは、同一または第２言語のスクリプティングプログラム、生成コンポーネント５０８を介したＣＯＭコンプライアントアプリケーション５１２、組み込みコンピュータ１０４上で動作するスレッド、ホストコンピュータ上で動作するスレッド、およびスタジオモジュール１２８と通信することができる。
【００８５】
更に、例えば、生成コンポーネント５０８のアプリケーションプログラミングインターフェイスを用いて、ＣＯＭコンプライアントアプリケーションは、ＭＡＣ３０４を介したスクリプティングプログラム、他のＣＯＭコンプライアントアプリケーション、組み込みコンピュータ１０４上で動作するスレッド、ホストコンピュータ１０８上で動作するスレッド、およびスタジオモジュール１２８と通信することができる。
更に、例えば、スタジオ１２８を用いて、ユーザーは、ＣＯＭコンプライアントアプリケーション５１２、スクリプティングプログラム、ホストコンピュータ１０８上で動作するスレッド、組み込みコンピュータ１０４上で動作するスレッドにメッセージを送信し、且つこれらからメッセージを受信することができる。
【００８６】
図６は、通信データベース１２４の一実施形態を示す再現的なブロックダイアグラムである。実施形態により、付加的なタイプの情報がデータベースに付け加えられ、及び／又は或るタイプの情報が省略されてもよい。
通信データベース１２４は、特定プラットフォームコンフィギュレーションセクション(platform-specific configuration section)６０４を具備する。この特定プラットフォームコンフィギュレーションセクションは、組み込みコンピュータ装置特性およびホストコンピュータ装置特性を具備する。その特性は、プラットフォームがビッグエンディアン(big Endian)であるのかリトルエンディアン(little Endian)であるのかを示す指標、エニュメレーションサイズ(enumeration sizes)、ポインタサイズ(pointer sizes)、ストラクチャーアライメント境界(structure alignment boundaries)等のような項目を含むことができる。本発明の一実施形態において、組み込みコンピュータ装置特性およびホストコンピュータ装置特性が、ホストコンピュータ通信モジュール１１６または組み込みコンピュータ１０４のような、通信データベース１２４以外の場所に格納されることに気づく。
【００８７】
通信データベース１２４は、また、メッセージセクション６０８およびプロトタイプセクション６１０を具備する。メッセージセクション６０８およびプロトタイプセクション６１０は、組み込みコンピュータ１０４およびホストコンピュータ１０８上で動作するリモートファンクションコールおよびメッセージの各特性をそれぞれ記述する。この特性は、（１）メッセージのユニークなネーム及び又は識別子、（２）メッセージのトータルサイズ、（３）通信のタイプ、例えば一方向メッセージ、双方向メッセージ、ブロードキャストメッセージ、子モーとファンクションコール等、および（４）データのタイプが通信の一部として受け渡されることを含む。一方向のメッセージは、通信の“ユーザー”から通信の“オーナー”に送信される。スレッドは、ホストコンピュータ通信モジュール１１６のアプリケーションプログラミングインターフェイスを介して提供されるレジストレーションルーチンを通じてメッセージの所有権(ownership)を要求することができる。双方向のメッセージは、ユーザーからオーナーに送信された“コマンド”と、オーナーからユーザーに送信される“応答”を含む。ブロードキャストメッセージは、ブロードキャストを受信するために登録された全てのスレッドに送信される。
【００８８】
通信データベース１２４は、また、トレースポイントを追跡するためのトレースポイントセクション６１２を具備する。通信データベース１２４は、また、メッセージングセクション６０８で確認されたメッセージおよびプロトタイプセクション６１０でリストアップされたファンクションによってサポートされるデータタイプの記述を含む。
データタイプセクション６１６は、（１）リモートファンクションコールまたはメッセージの一部であるデータストラクチャーにおけるデータタイプの記述を含み、例えばインテジャー(integer)、キャラクター(character)、ブーリアン(Boolean)、浮動点(floating-point)、アレイ(array)等、（２）各メッセージにおける各エレメントのフィールドネーム、（３）およびメッセージの一部となる組み込みポインタの特性の記述である。
【００８９】
図７は、生成コンポーネント５０８の代表的なコンポーネント階層を例示するブロックダイアグラムである。ＣＯＭコンプライアントオブジェクト５１２は、最初に、ルートオブジェクト(root object)７０４を介して、生成コンポーネント５０８をアクセスする。ルートオブジェクト７０４を介して、ＣＯＭコンプライアントオブジェクト５１２は、コマンドを送信することができると共に、通信データベース１２４に定義されたリモートファンクションコールおよび特定のメッセージからの応答を受信することができる。例えば、図７に示されるように、ＣＯＭコンプライアントオブジェクトは、“メッセージ１”に関連するオブジェクト７０８と、“メッセージ２”に関連するオブジェクト７１２にアクセスする。これらメッセージオブジェクトに関連する所定のインターフェイスを用いて、ＣＯＭコンプライアントオブジェクト５１２は、組み込みコンピュータ１０４上で動作するスレッドを有するペイロードを送信し且つ受信することができる。
【００９０】
図８は、ＤＡＴシステム１００と通信するためのソースコードを修正(modify)するプロセスを例示するフローチャートである。本実施形態により、付加的なステップが加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。ステップ８０４から始めると、プログラマーは、ＤＡＴシステム１００によって提供される登録方法(registration method)を呼び出すためのＡＰＩを付加する。本発明の一実施形態において、スレッドを登録することは、ユニークなスレッド識別コードを提供する。
【００９１】
次に、ステップ８０８では、プログラマーは、ＤＡＴシステム１００によって提供されるリード方法を呼び出すためのＡＰＩコールを付加する。ステップ８１２に続いて、プログラマーは、ここでは適切な、ＤＡＴシステム１００によって提供される送信方法を呼び出すためのＡＰＩコールを付加する。
ステップ８１６に続いて、プログラマーは、“認証(subscribe)”するためのＡＰＩコールをメッセージに付加する。メッセージに対する認証は、認証者(subscriber)が特定のメッセージに対して盲目的であることを可能とし、その後、全てのブロードキャスト送信を受信することを可能にする。他のメッセージングＡＰＩは、次のようなこと、即ち、応答を送信すること、メッセージをブロードキャストすること、およびメッセージのペイロードのメタデータ（特性）とデータ（コンテンツ）を定義することのようなことのために、ＤＡＴシステム１００によって提供されてもよい。
【００９２】
図９は、通信データベース１２４を構築する代表的なプロセスを例示するブロックダイアグラムである。本実施形態により、付加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。本発明の一実施形態において、図９に示されるプロセスはユーザーの要求に応答して実施される。
【００９３】
ステート９０４から始めると、スタジオモジュール１２８は、ユーザーによって提供される複数のインターフェイス定義ファイルのそれぞれから情報を読み取って抽出する。続いて、ステップ９０８では、スタジオモジュール１２８は、インターフェイス定義ファイルのそれぞれから通信インターフェイスを抽出する。抽出される情報は、（１）通信のタイプ、例えば一方向、双方向、ブロードキャスト、リモートファンクションコール、通信のタイプ、（２）通信の一部として受け渡されるデータのタイプ、（３）リモートファンクションコールまたはメッセージの一部であるデータストラクチャーにおけるデータタイプの記述、例えばインテジャー、キャラクター、ブーリアン、（４）メッセージの一部になる組み込みポインタ特性の記述、例えばメモリが“プール(pooled)”されたものか“プライベート(private)”であるか、通信インターフェイスに関連するメモリの伝送方法、および通信インターフェイスに関連するポインタデータである。
【００９４】
次に、ステップ９１６では、スタジオモジュール１２８は、組み込みコンピュータ装置特性を格納する。組み込みコンピュータ装置特性は、ユーザーエントリー、組み込みコンピュータ１０４の自動判断によって提供され、または組み込みコンピュータ１０４によって自動的に提供される。組み込みコンピュータ装置特性の例は、図６に関して上述されている。一実施形態において、これらの特性は固定され、即ち、各コネクションについて全く同一であるものとする。
【００９５】
ステップ９２０に続いて、スタジオモジュール１２８は、ホストコンピュータ装置特性を格納する。ホストコンピュータ装置特性は、ユーザーエントリーまたはホストコンピュータ１０８の自動判断によって提供することができる。ホストコンピュータ装置特性の例は、図６に関して上述されている。
【００９６】
図１０は、ＤＡＴシステム１００の使用プロセスを例示するフローチャートである。本実施形態により、付加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。ステップ１００４から始めると、ＤＡＴシステム１００は、各スレッドから登録情報(registration information)を受信する。続いて、ステップ１００８では、ＤＡＴシステムは、特定のメッセージのためのペイロードを受信する。
【００９７】
ステップ１０１２に続いて、ＤＡＴシステム１００は、その送信先のスレッドへの伝送のためにペイロードをフォーマットする。もし送信先のスレッドが、伝送スレッドに対してローカルであれば、フォーマットをすることは不要である。リモートプラットフォームへの伝送のためのデータをフォーマットする代表的なプロセスは、図１１に関して後述される。ステップ１０１６に移行すると、ＤＡＴシステム１００は，フォーマットされたペイロードを送信先のスレッドに伝送する。
【００９８】
図１１は、異なるプラットフォーム上で使用するためにデータをフォーマットするプロセスを例示するフローチャートである。本実施形態により、付加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。本発明の一実施形態において、図１１により実施されるプロセスは、ＤＡＴシステム１００のホストコンピュータ通信モジュール１１６によって実行される。更に、図１１は、或るプラットフォーム、例えばホストコンピュータ１０８から他の例えば組み込みコンピュータ１０４への伝送のためのペイロードをフォーマットするプロセスに方向づけられる。
【００９９】
図１１に示されるプロセスの使用は、分散された異種のコンピューティングプラットフォーム上で互いに通信するアプリケーション間の相互運用性(interoperability)を提供する。本発明の一実施形態において、組み込みコンピュータに関する処理およびメモリの要件を低減するため、ＤＡＴシステム１００は、ホストコンピュータ１０８上で全てのデータフォーマットを実施する。
【０１００】
ホストコンピュータ１０８は、異なるコンピュータが通信している場合に適切にメッセージをマッピングするため、組み込みコンピュータ１０４およびホストコンピュータ１０８および個々のインターフェイス定義情報（“通信インターフェイス情報”）のプラットフォーム特性を使用する。一実施形態において、組み込みコンピュータ１０４は、常に、その本来の(native)フォーム、即ちメッセージがそのメモリに格納されるフォームでメッセージを送信し且つ受信する。ホストコンピュータ１０８は、メッセージを受信したときに、これらメッセージをそのフォームにマッピングし、そしてメッセージを組み込みコンピュータ１０４に伝送するときに、そのメッセージを組み込みコンピュータ１０４のプラットフォームの本来のフォームに変換する。
【０１０１】
決定ステート１１０４から始めると、ホストコンピュータ通信モジュール１１６は、送信先のスレッドがローカルであるかリモートであるかを決定する。もしそのスレッドがローカルであれば、プロセスはステップ１１０８に進み、そしてペイロードは、送信先のスレッドへの伝送のために待ち行列(queue)に入れられる。もし伝送がローカルであれば、ペイロードの更なる変更は必要ない。
【０１０２】
決定ステップ１１０４を再び参照すると、もし送信先のスレッドがローカルでなければ、プロセスはステップ１１１２に進み、ここで、上記ホストコンピュータ通信モジュール１１６は、ペイロード内のデータとポインタに参照されたデータとを、組み込みコンピュータ１０４への伝送のためのメッセージにコピーする。ポインタデータを処理する代表的なプロセスは、図１２Ａ，１２Ｂ，１２Ｃおよび１２Ｄを参照して以下に詳細に説明される。
【０１０３】
ステップ１１１６に続いて、ホストコンピュータ通信モジュール１１６は、必要であれば、ペイロードにあるデータのエレメントのバイトオーダー(byte order)をフォーマットする。例えば、もしホストコンピュータ１０８がビッグエンディアンであり、且つ組み込みコンピュータ１０４がリトルエンディアンであり、または同様に逆であれば、ホストコンピュータ通信モジュール１１６は、データ内のビットのオーダーを反転させる。
【０１０４】
ステップ１１２４に続いて、ホストコンピュータ通信モジュール１１６は、ペイロードにあるデータタイプのサイズをフォーマットする。例えば、もし組み込みコンピュータ１０４が或るデータタイプに対してあるビット長を使用し、且つホストコンピュータが異なるビット長を使用すると、ホストコンピュータ通信モジュール１１６は、他のプラットフォームへの伝送のためにデータのサイズを調整する。ステップ１１２８に移行し、ホストコンピュータ通信モジュール１１６は、受信プラットフォームの任意の要求に従ってデータストラクチャーのアライメントを調整する。
【０１０５】
図１２Ａ−１２Ｄは、或るプラットフォームから他のプラットフォームに受け渡されるペイロードにあるポインタを管理する代表的方法をそれぞれ例示する。図１２Ａは、“コマンド”メッセージに従って組み込みコンピュータ１０４上のスレッドからペイロードを受信する方法に方向づけられる。一実施形態において、図１２Ａはペイロードにあるポインタのそれぞれに関して実施される。本実施形態により、付加的なステップが付け加えられ、他が削除され、ステップの順序づけが再整理されてもよい。本発明の一実施形態において、図１２に示される方法は、ホストコンピュータモジュール１１６によって実施される。図１２に示されるような同じようなプロセスが、組み込みコンピュータ通信モジュール１１２がコマンドメッセージを受信したときに、組み込みコンピュータ通信モジュール１１２上で動作することに気づく。しかしながら、一実施形態において、このようなプロセスのために、組み込みコンピュータ通信モジュール１１２は、このようなフォーマットがホストコンピュータ通信モジュール１１６によって実行されるので、受信データの如何なるインタープラットフォーム(inter-platform)のフォーマットも実行しない。
【０１０６】
ステート１２０４から始める前に、組み込みコンピュータ１０４上のスレッドは、組み込みコンピュータ通信モジュール１１２のアプリケーションプログラミングインターフェイスの一部である送信コマンドを呼び出す。これに応答して、組み込みコンピュータ通信モジュール１１２は、インタープラットフォームメッセージ(inter-platform message)を組み立て、そしてホストコンピュータモジュール１１６に伝送する。このインタープラットフォームメッセージは、送信コマンドの一部として確認されたペイロード、および、もし適切であれば、そのペイロードにあるポインタによって参照されるデータを具備する。
【０１０７】
ステップ１２０４から始めると、ホストコンピュータ通信モジュール１１６は、伝送された通信のペイロードにある選択されたポインタの組み込みポインタ属性を取得する。本発明の一実施形態において、属性情報は伝送された通信に格納されている。各ポインタの第１属性は、ポインタが、“ＩＮ”または“ＯＵＴ”として分類されるか、または“ＩＮ／ＯＵＴ”として分類されるかである。“ＩＮ”属性は、ポインタによって参照されたデータが、コマンドの送り手からメッセージのオーナーに受け渡されるが、メッセージのオーナーによってデータは返されないことを表す。“ＯＵＴ”属性は、コマンドの送り手が、ポインタによって参照される如何なるデータをも伝送しないが、オーナーによってデータが返され、そしてポインタによって参照されるアドレスに格納されることを表す。“ＩＮ／ＯＵＴ”属性は、ポインタによって参照されるデータが、コマンドの送り手から送信され、そしてメッセージのオーナーが、ポインタによって参照されるメモリに格納されているデータを返すことを表す。
【０１０８】
各ポインタの第２属性は、ポインタが“プライベート(private)”であるか“プール(pooled)”されたものであるかである。“プライベート”のメモリの管理（使用中でないときにメモリを解放すること）は、ＤＡＴシステム１００によって取り扱われる。“プール”されたメモリの管理は、ユーザー及び／又はメッセージのオーナーによって取り扱われる。
【０１０９】
続いてステップ１２１０に移り、ホストコンピュータ通信モジュール１１６は、ポインタデータを格納するためのローカルバッファを作成する。続いてステップ１２１２に移り、ホストコンピュータ通信モジュール１１６は、ポインタ属性が、“ＩＮ”または“ＩＮ／ＯＵＴ”であるかを決定する。もしポインタ属性が“ＩＮ”または“ＩＮ／ＯＵＴ”であれば、プロセスはステップ１２１４に進む。続いてステップ１２１４に移り、ホストコンピュータ通信モジュール１１６は、組み込みコンピュータ１０４から伝送されたポインタデータをローカルバッファにコピーする。このステップでは、ホストコンピュータ通信モジュール１１６は、ステップ１１１６，１１２４，および１１２８を参照して上述したプロセスに従って、ポインタデータをフォーマットする。
【０１１０】
次に、ステップ１２１８では、ホストコンピュータ通信モジュール１１６は、バッファのアドレスをペイロードにコピーする。決定ステップ１２２０に進み、ホストコンピュータ通信モジュール１１６は、ポインタの第１属性が“ＩＮ”であるかどうかを決定する。もしポインタの第１属性が“ＩＮ”であれば、プロセスは決定ステップ１２２２に進む。決定ステップ１２２２では、ホストコンピュータ通信モジュール１１６は、ポインタの第２属性が“プライベート”であるかどうかを決定する。もしポインタの第２属性がプライベートであれば、プロセスはステップ１２２８に進む。その他に、もしポインタの第２属性がプライベートでなければ、即ちプールされたものであれば、プロセスは終了する。
【０１１１】
ステップ１２１２を再び参照すると、もし第１属性が“ＩＮ”または“ＩＮ／ＯＵＴ”でなければ、属性は“ＯＵＴ”であり、そしてプロセスはステップ１２１６に進む。ステップ１２１６では、ホストコンピュータ通信モジュール１１６は、ローカルバッファのアドレスをペイロードにコピーする。ステップ１２１６から、または決定ステップ１２２０（第１属性が“ＩＮ／ＯＵＴ”の場合）から、プロセスはステップ１２２４に進む。このステップでは、ホストコンピュータ通信モジュール１１６は、ＤＡＴシステム１００のアプリケーションプログラミングインターフェイスによって提供される応答コマンドを呼び出すためにホストコンピュータ１０８上のスレッドを待つ。応答を受信すると、プロセスはステップ１２２６に進む。このステップでは、応答データは、組み込みコンピュータ１０４への伝送のためにフォーマットされる。
【０１１２】
ステップ１２２６または決定ステップ１２２２（ポインタの第２属性が“プライベート”の場合）の何れかから、プロセスはステップ１２２８に進み、このステップでは、ホストコンピュータ通信モジュール１１６が、ホストコンピュータ通信モジュール１１６のアプリケーションプログラミングインターフェイスにあるリードコンプリートコマンド(read complete command)を呼び出すためにホストコンピュータ１０４上のスレッドを持つ。リードコンプリートコマンドを受信すると、プロセスはステップ１２３０に進み、このステップでは、ホストコンピュータ通信モジュールはメモリを解放する。
【０１１３】
図１２Ｂは、ホストコンピュータ１０８上のスレッドから組み込みコンピュータ１０４上のスレッドに送信されるコマンドメッセージにあるペイロードにおけるポインタを管理するプロセスに方向づけられる。図１２Ｂは、図１１のステップ１１１において発生するステップを更に詳細に例示する。一実施形態において、図１２Ｂは、ペイロードにあるポインタのそれぞれに関して実施される。本実施形態により、付加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。同じようなプロセスが、組み込みコンピュータ１０４上のスレッドからホストコンピュータ１０８にコマンドメッセージを送信するときに、組み込みコンピュータによって実行される。しかしながら、このプロセスにおいて、組み込みコンピュータ通信モジュール１１２は、ペイロードが受信されるとホストコンピュータ通信モジュール１１６によってフォーマットが実施されるので、伝送された如何なるペイロードのフォーマットも実施しない。
【０１１４】
ステップ１２３０から始めると、ホストコンピュータ通信モジュール１１６は、組み込みコンピュータ１０４への伝送のためのインタープラットフォームを格納するためのバッファを作成する。また、このステップでは、ホストコンピュータ通信モジュール１１６は、組み込みポインタのためのインタープラットフォームメッセージにおけるヘッダーを作成する。更に、このステップでは、ホストコンピュータ通信モジュール１１６は、インタープラットフォームメッセージにおけるポインタのポインタ属性を格納する。
【０１１５】
決定ステップ１２３２に続いて、ホストコンピュータ通信モジュール１１６は、ポインタのポインタ属性が“ＯＵＴ”であるかどうかを決定する。もし選択されたポインタの属性が“ＯＵＴ”であれば、プロセスは終了する。しかしながら、ポインタ属性が“ＯＵＴ”でなければ、即ちそれが“ＩＮ”または“ＩＭ／ＯＵＴ”であれば、プロセスはステップ１２４４に進む。ステップ１２４４では、ホストコンピュータ通信モジュール１１６は、ポインタによって参照されたデータをヘッダーにコピーする。更に、ホストコンピュータ通信モジュール１１６は、組み込みコンピュータ１０８上のスレッドによる使用のためにデータをフォーマットする。
【０１１６】
次に、決定ステップ１２３６では、ホストコンピュータ通信モジュール１１６は、ポインタ属性が“ＩＮ”であるかどうかを決定する。もしポインタ属性が“ＩＮ”であれば、プロセスはステップ１２４０に進む。このステップでは、もし保障されていれば、即ちポインタの属性が“プール”されているものであれば、ホストコンピュータ通信モジュール１１６はメモリを解放する。しかしながら、もしポインタ属性が“ＩＮ”でなければプロセスは終了する。
【０１１７】
図１２Ｃは、組み込みコンピュータ通信モジュール１１２からの応答メッセージを受信するプロセスに方向づけられている。図１２Ｃは、図１１のステップ１１１において発生するステップを更に詳細に例示する。一実施形態において、図１２Ｃは、ペイロードにあるポインタのそれぞれに関して実施される。本実施形態により、付加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。同じようなプロセスが、組み込みコンピュータ１０４上のスレッドからホストコンピュータにコマンドメッセージを伝送するときに、組み込みコンピュータ１０４によって実施される。しかしながら、このプロセスにおいては、組み込みコンピュータ通信モジュール１１２は、ペイロードを受信するとホストコンピュータ通信モジュール１１６によってフォーマットが実施されるので、伝送されたペイロードの如何なるフォーマットも実施しない。
【０１１８】
ステート１２５０から始める前に、組み込みコンピュータ１０４上のスレッドは、組み込みコンピュータ通信モジュール１１２のアプリケーションプログラミングインターフェイスの一部である送信応答コマンドを呼び出す。これに応答して、組み込みコンピュータ通信モジュール１１２は、インタープラットフォームメッセージを組み立て、そしてそれをホストコンピュータ通信モジュール１１６に伝送する。このインタープラットフォームメッセージは、送信応答の一部として確認されたペイロードおよび、もし適切であれば、ペイロードにあるポインタによって参照されるデータを具備する。
【０１１９】
決定ステップ１２５０から始めると、ホストコンピュータ通信モジュール１１６は、インタープラットフォームメッセージにあるポインタのポインタ属性が属性“ＩＮ”を示すかどうかを決定する。もしポインタ属性が属性“ＩＮ”を示していれば、プロセスはステップ１２５２に進み、そしてホストコンピュータ通信モジュール１１６は、ホストコンピュータ１０８での使用のため受信データをフォーマットする。例えば、一実施形態において、ホストコンピュータ通信モジュール１１６は、ステップ１１１６，１１２４，，１１２８に関して上述したステップを実施する。
【０１２０】
しかしながら、もしポインタ属性が“ＩＮ”を示していなければ、即ちポインタ属性が“ＩＮ／ＯＵＴ”または“ＯＵＴ”を示していれば、プロセスはステップ１２５４に進む。ステップ１２５４では、ホストコンピュータ通信モジュール１１６は、組み込みコンピュータ１０４によって伝送されたポインタデータを格納するためのローカルバッファを作成する。ステップ１２５６に続いて、ホストコンピュータ通信モジュール１１６は、インタープラットフォーム通信からのポインタデータをローカルバッファにコピーする。続いて、ステップ１２５８では、ホストコンピュータ通信モジュール１１６は、バッファのアドレスを受信したペイロードにコピーする。
【０１２１】
決定ステップ１２６０に進み、ホストコンピュータ通信モジュール１１６は、ポインタを解放すべきかどうかを決定する。本発明の一実施形態において、これは、ポインタ属性を読み取ることによって決定される。もしポインタ属性が“プライベート”を示していれば、ホストコンピュータ通信モジュール１１６は、メモリを解放することを決定する。しかしながら、もしポインタ属性が“プール”されたものであることを示していれば、ホストコンピュータ通信モジュール１１６は、ユーザーがメモリを解放することを許容する。
【０１２２】
もしホストコンピュータ通信モジュール１１６がステップ１２６０においてメモリを解放することを決定すれば、プロセスはステップ１２６２に進み、このステップでは、ホストコンピュータ通信モジュール１１６が、リードコンプリートコマンドを呼び出すためにホストコンピュータ１０８上のスレッドを待つ。ステップ１２６４に続いて、ホストコンピュータ通信モジュール１１６は、ローカルバッファを解放する。決定ステップ１６０（ホストコンピュータ通信モジュール１１６がポインタを解放しない場合）またはステップ１２６４の何れかから、プロセスは終了する。
【０１２３】
図１２Ｄは、ホストコンピュータ１０８上のスレッドから組み込みコンピュータ１０４上のスレッドに送信される応答メッセージにあるペイロードにおけるポインタを管理する代表的なプロセスに方向づけられる。図１２Ｄは、図１１のステップ１１１２において発生するステップを更に詳細に例示する。一実施形態において、図１２Ｄは、ペイロードにあるポインタのそれぞれに関して実施される。本実施形態により、付加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。同じようなプロセスが、組み込みコンピュータ１０４からホストコンピュータに応答メッセージを伝送するときに、組み込みコンピュータ１０４によって実施される。しかしながら、このプロセスにおいて、組み込みコンピュータ通信モジュール１１２は、ペイロードを受信するとホストコンピュータ通信モジュール１１６によってフォーマットが実施されるので、伝送された如何なるペイロードのフォーマットも実施しない。
開始する前に、組み込みコンピュータ１０４上のスレッドは、メッセージコマンドを送信し、そしてホストコンピュータ１０８上のスレッドは、ＤＡＴシステム１００のＡＰＩの送信応答ルーチンを呼び出すことにより応じる。
【０１２４】
ステップ１２６５から始めると、ホストコンピュータ通信モジュール１１６は、ポインタによって参照されるデータを格納するために送信バッファ（“ヘッダー”）にスペースを割り付ける。この送信バッファは、ホストコンピュータ通信モジュール１１６から組み込みコンピュータ通信モジュール１１２に送信されるインタープラットフォームメッセージの一部である。決定ステップ１２６６に進み、ホストコンピュータ通信モジュール１１６は、ポインタ属性が“ＩＮ”を示すかどうかを決定する。もし、ポインタ属性が“ＩＮ”を示していれば、即ちそれらが“ＯＵＴ”または“ＩＮ／ＯＵＴ”を示していなければ、プロセスは決定ステップ１２６７に進む。決定ステップ１２６７では、ホストコンピュータ通信モジュール１１６は、対応する送信コマンドの期間中に割り当てられるメモリに関連するメモリを解放すべきかどうかを決定する。本発明の一実施形態において、これは、ポインタ属性を読み取ることによって決定される。もしポインタ属性が“プール”されているものであることを示していれば、ホストコンピュータ通信モジュール１１６は、メモリを解放することを決定する。しかしながら、もしポインタ属性が“プライベート”を示していれば、ホストコンピュータ通信モジュール１１６は、メモリを所有し、結局は（ローカルオペレーティングシステムを介して）解放することを許容する。もしホストコンピュータ通信モジュール１１６が、メモリを解放することを決定すれば、プロセスはステップ１２６８に進み、そしてホストコンピュータ通信モジュール１１６はメモリを解放する。ステップ１２６８または決定ステップ１２６６（ポインタ属性が“ＩＮ”をしめしていない場合）の何れかから、プロセスはステップ１２７０に進み、そしてホストコンピュータ通信モジュール１１６は、組み込みコンピュータへの伝送のためにポインタによって参照されたデータをフォーマットする。例えば、一実施形態において、ホストコンピュータ通信モジュール１１６は、ステップ１１１６，１１２４，および１１２８に関して上述したステップを実施する。フォーマットの一部として、フォーマットされたデータがヘッダーに格納される（ステップ１２６５）。
【０１２５】
図１３は、スプリプトエンジン３１２にあるスクリプトからＤＡＴシステム１００を使用するプロセスを例示するフローチャートである。本実施形態により、付加的なステップを付け加え、他が削除され、そしてステップの順序づけが再整理されてもよい。ステップ１３０４から開始すると、スタジオモジュール１２８はユーザーからスクリプトファイルをロードする旨の要求を受信し、本明細書ではそのように行う。続いて、ステップ１３１２では、スタジオは、スクリプトファイルに関連するスクリプトタイプを決定する。このスクリプトタイプは、異なる方法で決定され、確認されたスクリプトファイルの拡張の検査またはスクリプト自体のコンテンツからの検査を含む。スクリプティング言語の代表的なタイプは、ジャバスクリプト（登録商標）、ビジュアルベーシック（登録商標）、ＶＢＳｃｒｉｐｔ（登録商標）、Ｔｃｌ（登録商標）、ＪＳｃｒｉｐｔ（登録商標）、Ｐｙｔｈｏｎ（登録商標）、等を含む。
ステップ１３１６に移行し、スタジオモジュール１２８は、スクリプトタイプと関連した対応するスクリプトエンジン３１２を確認する。ステップ１３２０に続いて、スタジオモジュール１２８はスクリプトエンジン３１２を初期化する。
【０１２６】
次に、ステップ１３２４では、スタジオモジュール１２８は、メッセージングオートメーションコンポーネント（messaging automation component；“ＭＡＣ”）３０４をロードする。ＭＡＣ３０４をロードするプロセスは、図１４を参照して後述される。ステップ１３２８に進み、ＭＡＣ３０４は、スクリプトエンジン３１２に“さらされる(exposed)”。本発明の一実施形態において、ＭＡＣ３０４をさらすことは、スクリプトエンジン３１２ハンドルをＭＡＣ３０４へのハンドルを提供することを含む。次に、ステップ１３３２では、スクリプトエンジンが起動され、ステップ１３０４でロードされたスクリプトがＭＡＣ３０４のＡＰＩをアクセスすることを許容する。ステップ１３３６に移行し、スクリプトプログラミングは、ＭＡＣ３０４のＡＰＩを用いてスレッド１１４と通信することができる。ＭＡＣ３０４を使用する代表的なプロセスは、図１５に関連して後述される。
【０１２７】
図１４は、ＭＡＣ３０４をロードするプロセスを例示するフローチャートである。図１４は、図１３のステップ１３２４で発生するステップを更に詳細に例示する。ステップ１４０４から開始すると、スタジオモジュール１２８は、ＭＡＣ３０４の初期化ルーチンを呼び出し、そしてパラメータとしてハンドル(handle)を通信データベース１２４に受け渡す。続いて、ステップ１４０８では、ＭＡＣ３０４は、マネージングオートメーションコンポーネント“ＭＡＣ”データベースオブジェクトを生成する。ＭＡＣデータオブジェクトオブジェクトは、通信データベース１１４からの或る情報を具備する。ＭＡＣデータベースは、ＭＡＣ３０４のアプリケーションプログラミングインターフェイスをアクセスするためにスクリプティングプログラムによって使用される。
【０１２８】
図１５−１７は、スクリプティング言語を用いてＭＡＣ３０８と通信するプロセスを例示するフローチャートである。本実施形態により、付加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。図１５は、ＭＡＣ３０４に特有なメッセージを登録するプロセスに方向づけされたフローチャートである。ステップ１５０４から開始すると、スクリプトエンジン３１２で動作しているスクリプトは、ＭＡＣ３０４の登録方法を呼び出す。ステップ１５０８に進み、ＭＡＣオブジェクトは、ホストコンピュータ通信モジュール１１６のレジスタＡＰＩを呼び出す。
【０１２９】
図１６Ａは、ＭＡＣ３０４を介してメッセージを送信するプロセスを例示するフローチャートである。ステップ１６０４から開始すると、スプリプトは、レファレンスをＭＡＣデータベースオブジェクトに読み込む。続いて、ステップ１６０６では、スクリプトは、メッセージオブジェクトに対するレファレンスを提供するためにＭＡＣデータベースを要求する。このメッセージオブジェクトは、通信のオーナーと通信を行うため、または他から通信を受信するために、スクリプトプログラムによって使用される。メッセージオブジェクトを用いて、スクリプトは、メッセージのフィールドを設定し、メッセージを送信し、メッセージを受信し、そして他の標準メッセージングファンクションを実行することができる。
【０１３０】
続いて、ステップ１６１０では、ＭＡＣデータベースオブジェクトが、通信データベース１２４からメッセージ定義情報を読み取る。本発明の一実施形態において、メッセージ定義情報は、ホストコンピュータ通信モジュール１１６を介して読み取られる。本発明の他の実施形態において、メッセージ定義情報は、通信データベース１２４から直接的に読み取られる。メッセージ定義情報は、（１）通信のタイプ、例えば一方向、双方向、ブロードキャスト、リモートファンクションコール、および（２）通信の一部として受け渡されるデータのタイプを具備する。続いて、ステップ１６１４では、ＭＡＣデータベースオブジェクトは、通信データベース１２４から読み取られたプロトタイプ定義に基づきＭＡＣメッセージオブジェクトを作成する。
【０１３１】
ステップ１６１８に進み、ＭＡＣデータベースオブジェクトは、要求されたメッセージオブジェクトに関して格納された通信データベースから任意のデータセットを読み取る。続いて、ステップ１６２２では、ＭＡＣデータベースオブジェクトは、（ステップ１６１４で作成された）メッセージオブジェクトにデータセットを付け加える。
ステップ１６２４に移行し、ＭＡＣデータベースオブジェクトは、スクリプトへのメッセージオブジェクトにレファレンスを返す。続いて、ステップ１６２８では、スクリプトは、メッセージオブジェクトへのレファレンスを用いてメッセージのデータフィールドを設定することができる。スクリプトは、ＭＡＣデータベースオブジェクトを介して複数の読み出し可能かつ書き込み可能なデータセットにアクセスする。このステップでは、スクリプトは、連続した使用のためにデータセットの一つを確認できる。続いてステップ１６３２に移り、ステップ１６３２では、スクリプトはメッセージオブジェクトの送信方法を呼び出す。ステップ１６３６に進み、ＭＡＣデータベースオブジェクトは、現在のインデックスによって参照されるデータセットを、メッセージを所有するスレッドに送信する。
【０１３２】
次に、決定ステップ１６４０では、ＭＡＣデータベースオブジェクトは、自動インクリメントが可能かどうかを決定する。もし自動インクリメントが可能であれば、プロセスはステップ１６４４に進み、そしてＭＡＣデータベースオブジェクトは、次のデータセットを選択する。ステップ１６４０を再び参照すると、もし自動インクリメントが可能でなければ、プロセスは終了する。
【０１３３】
図１６Ｂは、ＭＡＣ３０４を介してファンクションを呼び出すプロセスを例示するフローチャートである。ステップ１６５０から始めると、スクリプトは、ＭＡＣデータベースオブジェクトに対するレファレンスを読み込む。続いて、ステップ１６５４では、スクリプトは、リモートファンクションコールオブジェクトに対するレファレンスを提供するためにＭＡＣデータベースオブジェクトを要求する。リモートファンクションコールオブジェクトは、リモートファンクションコールを取り扱うスレッドと通信するためにスクリプトプログラムによって使用される。リモートファンクションコールを用いて、スクリプトは、リモートファンクションコールを呼び出すと受け渡されるパラメータを設定することができる。
【０１３４】
続いて、ステップ１６５８に移り、ＭＡＣデータベースオブジェクトは、通信データベース１２４からリモートファンクションコールプロトタイプ定義情報を読み込む。本発明の一実施形態において、このプロトタイプ定義情報は、ホストコンピュータ通信モジュール１１６を介して読み込まれる。本発明の他の実施形態において、メッセージ定義情報は、通信データベース１２４から直接的に読み込まれる。
【０１３５】
次に、ステップ１６６２では、ＭＡＣデータベースオブジェクトは、通信データベース１２４から読み込まれたリモートファンクションコールプロトタイプ定義に基づき、ＭＡＣリモートファンクションコールオブジェクトを作成する。
ステップ１６６４に進み、ＭＡＣデータベースオブジェクトは、要求されたリモートファンクションコールオブジェクトに関して格納された通信データベースから任意のデータセットを読み込む。続いて、ステップ１６６６では、ＭＡＣデータベースオブジェクトは、ＭＡＣリモートファンクションコールオブジェクトにデータセットを付け加える。
【０１３６】
ステップ１６６８に移行し、ＭＡＣデータベースオブジェクトは、スクリプトにリモートファンクションコールに対するレファレンスを返す。続いて、ステップ１６７０では、スクリプトは、リモートファンクションコールオブジェクトを用いてリモートファンクションコールのデータフィールド（パラメータ）を設定することができる。スクリプトは、ＭＡＣデータベースオブジェクトを介して複数の読み取り可能かつ書き込み可能なデータセットにアクセスする。このステップでは、スクリプトは、連続する使用のためにデータセットの一つを確認することができる。続いて、ステップ１６７２に移り、スクリプトは、リモートファンクションコールオブジェクトのコール方法を呼び出す。ステップ１６７４に進み、ＭＡＣデータベースオブジェクトは、リモートファンクションコールを取り扱うスレッドに、現在のインデックスによって参照されるデータを送信する。
【０１３７】
次に、決定ステップ１６７６では、ＭＡＣデータベースオブジェクトは、自動インクリメントが可能かどうかを決定する。自動インクリメントは、スクリプトが各送信コマンドを用いて異なるデータセットを送信することを可能にする。もし自動インクリメントが可能であれば、プロセスはステップ１６７８に進み、そしてＭＡＣデータベースオブジェクトは次のデータセットを選択する。ステップ１６７６を再び参照すると、もし自動インクリメントが可能でなければ、プロセスは終了する。
【０１３８】
図１７Ａは、ＭＡＣ３０４を介してスクリプトがメッセージを受信するプロセスを例示するフローチャートである。本実施形態により、付加的なステップが付け加えられ、他が削除され、そしてステップの順序づけ再整理されてもよい。
ステップ１７００から開始すると、スプリプトは、ＭＡＣデータベースオブジェクトのリード方法を呼び出す。続いて、ステップ１７０４では、ＭＡＣデータベースオブジェクトは、ホストコンピュータ通信モジュール１１６のリードＡＰＩを呼び出す。続いて、ステップ１７０８に移り、ホストコンピュータ通信モジュール１１６は、受信すべきメッセージを待つ。ステップ１７１２に進み、ＭＡＣデータベースオブジェクトは、ホストコンピュータ通信モジュール１１６からメッセージおよびメッセージ識別子を受信する。続いて、ステップ１７２０では、ＭＡＣデータベースオブジェクトは、スクリプトにメッセージオブジェクトを返し、そしてそれは、要求されたメッセージのコンテンツを順にアクセスすることができる。
【０１３９】
図１７Ｂは、スクリプトがＭＡＣ３０４によって提供されるファンクションコールアプリケーションプログラミングインターフェイスを介して通信を受信するプロセスを例示するフローチャートである。本実施形態により、付加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。ステップ１７５０から開始すると、スクリプトは、ＭＡＣデータベースオブジェクトのリード方法を呼び出す。続いて、ステップ１７５４では、ＭＡＣデータベースオブジェクトは、ホストコンピュータ通信モジュール１１６のリードＡＰＩを呼び出す。
【０１４０】
続いて、ステップ１７５８に移り、ＭＡＣデータベースオブジェクトは、受信すべきリモートファンクションコールコマンドメッセージを待つ。続いて、ステップ１７６２では、ＭＡＣデータベースオブジェクトは、リモートファンクションコマンドメッセージおよびそのファンクション識別子を受信する。
続いて、ステップ１７６４に移り、リモートファンクションコールオブジェクトがスクリプトプログラムに返される。続いて、ステップ１７６６では、スクリプトプログラムは、リモートファンクションコールオブジェクトの入力パラメータをアクセスする。
【０１４１】
ステップ１７６８に移行し、ＭＡＣデータベースオブジェクトは、スクリプトにリモートファンクションコールオブジェクトに対するレファレンスを返す。続いて、ステップ１７７０では、スクリプトは、リモートファンクションコールオブジェクトのリターン方法を呼び出す。続いて，ステップ１７７２に移り、リモートファンクションコールオブジェクトは、ホストコンピュータ通信モジュール１１６の送信アプリケーションプログラミングインターフェイスを呼び出す。ステップ１７７４に進み、ＭＡＣデータベースオブジェクトは、リモートファンクションコールを取り扱うスレッドに、現在のインデックスによって参照されるデータセットを送信する。
【０１４２】
次に、決定ステップ１７７６では、ＭＡＣデータベースオブジェクトは、自動インクリメントが可能であるかどうかを決定する。自動インクリメントは、スクリプトが、それぞれ送信コマンドを用いて異なるデータセットを送信することを可能にする。もし、自動インクリメントが可能であれば、プロセスはステップ１７７８に進み、そしてＭＡＣデータベースオブジェクトは次のデータセットを選択する。ステップ１７７６を再び参照すると、もし自動インクリメントが可能でなければ、プロセスは終了する。
【０１４３】
図１８は、ＣＯＭコンプライアント言語からＤＡＴシステム１００を用いてインターフェイスするプロセスを例示するフローチャートである。本実施形態により、付加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。ステップ１８０４から開始すると、ユーザーは“ランチ(launches)”ＣＯＭコンポーザツール５０４（図５）をロードする。ＣＯＭコンポーザツールをロードする代表的なプロセスは、図１９を参照して後述される。
【０１４４】
次に、ステップ１８０８では、ＣＯＭコンポーザは、生成コンポーネント５０８（図５）を構築する。生成コンポーネント５０８は、他のＣＯＭコンプライアントプログラムによってアクセス可能なＣＯＭオブジェクトである。生成コンポーネント５０８を用いて、ＣＯＭコンプライアントプログラムは、容易に、インターフェイスをテストし、組み込みコンピュータ１０４またはホストコンピュータ１０８上で動作するスレッドに通信を送信し、組み込みコンピュータまたはホストコンピュータ１０８上、および本明細書で述べられる他のファンクションで動作するスレッドから送信された通信を受信することができる。生成コンポーネント５０８は、前述のファンクションのそれぞれを実行するための所定の複数のインターフェイスを提供する。生成コンポーネント５０８を構築する代表的なプロセスは、図２０を参照して後述される。
【０１４５】
続いて、ステップ１８１６に移り、生成コンポーネント５０８は、任意のＣＯＭコンプライアント言語を介してアクセス可能である。生成コンポーネントを使用する代表的なプロセスは、図２２を参照して後述される。
図１９は、ＣＯＭコンポーザツール５０４を起動する代表的なプロセスを例示するフローチャートである。図１９は、図１８のステップ１８０４において発生する或るステップを更に詳細に例示する。本実施形態により、追加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。
【０１４６】
ステップ１９０４から開始すると、ユーザーはデータベースを確認する。ＤＡＴシステム１００は、複数のプロジェクトのために複数のデータベースをサポートすることができる。続いてステップ１９０８に移り、ユーザーは、選択されたデータベースのファンクションのどのメッセージが、生成されたＣＯＭオブジェクトに含まれるべきかを選択する。本発明の一実施形態において、ユーザーは、グラフィカルユーザーインターフェイスユーティリティを介してメッセージ及び／又はリモートファンクションコールを選択する。
ステップ１９１２に進み、ユーザーはコンパイラーバージョンを選択する。ＣＯＭコンポーザ５０４は、適切なコントロールファイルを適切なフォーマットで提供する生成コンポーネント５０８を構築するために使用されるコンパイラーのバージョンを知る必要がある。ステップ１９１６に移行し、ＣＯＭコンポーザ５０４は、ユーザーに、構造(build)のタイプ、例えばレリース(release)またはデバッグ(debug)、を示すことを要求する。
【０１４７】
図２０は、生成コンポーネント５０８を構築する代表的なプロセスを例示するフローチャートである。図２０は、図１８のステップ１８０８において発生するステップを更に詳細に例示する。本実施形態により、追加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。
【０１４８】
ステップ２００４から開始すると、ＣＯＭコンポーザツールは、ユーザーにより確認されたデータ（ステップ１９０４）をメモリにロードする。続いて、ステップ２００８では、ＣＯＭコンポーザツールは、次の事柄、即ち（１）ユーザーによって確認されたメッセージ及び／又はリモートファンクションコールの全て（ステップ１９０４）、（２）確認されたメッセージ及び／又はリモートファンクションコールのペイロードの全て、（３）生成コンポーネント５０８における全ての他のオブジェクトをアクセスするために使用されるルートオブジェクト(root object)に関して実施されるプロセスを開始する。一実施形態において、ステップ２０１２，２０１６，２０２０，および２０２４は、上述のオブジェクトのそれぞれについて実施される。
【０１４９】
ステップ２０１２では、ＣＯＭコンポーザ５０４は、オブジェクトのそれぞれについてソフトウェアを生成する。インターフェイスを生成する代表的なプロセスを、図２１を参照して以下に述べる。続いて、ステップ２０１６では、生成コンポーネントは、オブジェクトについてＣＯＭクラス定義を生成し、その他には共同クラス(co-class)として知られている。ステップ２０２０に進み、ＣＯＭコンポーザは、ＣＯＭオブジェクトのそれぞれについて、ＣＯＭクラスインプリメンテーション(COM class implementation)を生成する。ソフトウェアインターフェイス、ＣＯＭクラス定義(COM class definition)、およびＣＯＭクラスインプリメンテーションを生成することに関する更なる情報のために、次の参考文献、即ち、DON BOX, ESSENTIAL COM(1998), and BRENT RECTOR, CHRIS SELLS & JIM SPRINGFIELD, ATL INTERNALS(1999)を参照されたい。
【０１５０】
決定ステップ２０２４に移行し、ＣＯＭコンポーザ５０４は、メッセージ／リモードファンクションコール、ペイロード、およびルートオブジェクトの全てを処理したかどうかを決定する。もしこれらの項目の全てが処理されていなければ、プロセスは（上述した）ステップ２０１２に戻る。しかしながら、もしその項目の全てが処理されていれば、ＣＯＭコンポーザ５０４は、処理をステップ２０２８に進め、そして、もし必要であれば、必要とされる任意のコンパイラー特定ファイル(compiler specific files)を提供する。
次に、ステップ２０３２では、ＣＯＭコンポーザ５０４は、生成コンポーネント５０８を構築するため選択されたコンパイラーを起動する。本発明の一実施形態において、ＣＯＭコンポーネントは、ダイナミックリンクライブラリー(dynamic link library)“ＤＤＬ”において提供される。ステップ２０３６に移行し、ＣＯＭコンポーザ５０４は、ホストコンピュータ１０８にあるレジストリにダイナミックリンクライブラリー(dynamic link library)を登録する。
【０１５１】
図２１は、インターフェイスを生成するプロセスを例示するフローチャートである。図２１は、図２０のステップ２０１２において発生するステップを更に詳細に例示する。本実施形態により、付加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。
ステップ２１０４から開始すると、ＣＯＭコンポーザ５０４は、“ビルトイン”メンバファンクション(“built-in” member functions)のための方法定義(method definitions)を生成する。続いて、ステップ２１０８では、ＣＯＭコンポーザ５０４は、子オブジェクト(child object)２１０８に対しアクセッサーファンクション(accessor function)を生成する。例えば、ルートオブジェクトの子(children)は、メッセージ及び／又はリモートファンクションコールのそれぞれを含む。更に、例えば、メッセージオブジェクト及び／又はリモートファンクションコールの子は、オブジェクトと関連する一つまたはそれ以上のペイロードを具備する。ステップ２１１２に移行し、ＣＯＭコンポーザ５０４は、オブジェクトのプロパティを設定し且つ取得するためのインターフェイスを生成する。
【０１５２】
図２２は、生成コンポーネント５０８を使用するプロセスを例示するフローチャートである。図２２は、図１８のステップ１８１６において発生する或るステップを更に詳細に例示する。本実施形態により、付加的なステップを付け加え、他を削除し、そしてステップの順序づけを再整理してもよい。
ステップ２２１６の開始する前に、ユーザーは、ＣＯＭ開発環境を開き、そしてＣＯＭ開発環境を介して、生成コンポーネント５０８を見つける。
ステップ２２１６から開始すると、ユーザーは、生成コンポーネント５０８のレファレンスを作成する。続いて、ステップ２２２０では、ユーザーは、ルートオブジェクトのインスタンス(instance)を作成する。ステップ２２２４に移行し、ユーザーは、所望のメッセージオブジェクトまたはリモートファンクションコールオブジェクトを読み込むためにルートオブジェクトアクセッサーファンクション(root object accessor function)を使用することができる。続いてステップ２２２８に移り、ユーザーは、所望のペイロードオブジェクトを選択するためにオブジェクトのアクセッサーファンクションを使用することができる。
【０１５３】
ステップ２２３２に進み、ユーザーは、ペイロードオブジェクトのプロパティを取得または設定するためにペイロードオブジェクトの方法を呼び出す。例えば、ユーザーは、ペイロードオブジェクトにデータを格納することができる。続いて、ステップ２２３６では、ユーザーは、通信を送信するためにメッセージオブジェクトまたはリモートファンクションコールオブジェクトに関する方法を呼び出す。ユーザーは、また、メッセージを登録するような、メッセージに関する他の方法を呼び出してもよく、このようなメッセージに関する任意のブロードキャストが呼び出しプロセスによって受信される。
他の方法は、図５を参照して前述されている。続いて、ステップ２２４０では、ユーザーは、もしあれば、受信された非同期通信を受信するためイベントハンドラ(event handler)を実施する。
【０１５４】
図２３は、スタジオモジュール１２８を使用するプロセスを例示するフローチャートである。スタジオモジュール１２８は、通信データベース１２４によって確認された通信インターフェイスのそれぞれをテストするためにグラフィカルユーザーインターフェイスコントロールパネルを提供する。ステップ２３０４から開始すると、ユーザーは、選択された通信データベース１２４をロードする。ユーザーは、異なるプロジェクトに対して異なる通信データベースを有してもよい。一旦ロードされると、ユーザーは、通信データベース１２４における通信インターフェイスのどれを調べ且つ選択してもよい。選択された後、ユーザーは、通信インターフェイスの所有権を示すこと（ステート２３１２）、データセットを生成すること（ステップ２３１６）、情報のフィールドを送信すること（ステップ２３２０）、そしてデータセットを送信すること（ステップ２３２４）のような、データベースに関する多くのファンクションを実行することができる。
【０１５５】
図２４は、ＤＡＴシステム１００の下で動作する二つのスレッド間の通信をモニタすることに基づくデータセットを生成するプロセスを例示するフローチャートである。データセットを生成するプロセスは、ユーザーによって、（１）スタジオモジュール１２８、（２）ホストコンピュータ通信モジュール１１６の方法を呼び出すＣ言語ソースコード、（３）スクリプトエンジン３１２で動作するスクリプト、（４）生成コンポーネント５０８を介したＣＯＭコンプライアントアプリケーションの何れかによって開始できる。
ステップ２４０４から開始すると、ユーザーは、トレース(trace)すべき通信データパスを特定する。例えば、ＤＡＴシステム１００は、データがメッセージを介してまたはリモートファンクションコールを介して送信されることをトレースする。
【０１５６】
次に、ステップ２４０８では、ＤＡＴシステム１００は、示された通信パスのそれぞれを越えて伝送されるデータをモニタして格納する。本発明の一実施形態において、データは、永続的なテストデータオブジェクトに格納される。ステップ２４１２に進み、任意のスレッドが、それから、永続的なデータオブジェクトの任意のコンテンツを選択して読み取り、そしてテストのためにそのデータを使用することができる。続いてステップ２４１６に移り、ＤＡＴシステム１００のスレッドの一つが、永続的データオブジェクトの一つを使用し、選択された永続的データオブジェクトから通信データパスの一つを越えてデータを伝送する。
【０１５７】
図２５は、スタジオモジュール１２８によって提供される代表的なユーザーインターフェイス２５００を例示する。ユーザーインターフェイス２５００は、通信データベース１２４に保持されているインターフェイスの全てをリストアップするインターフェイスウィンドウ２５０４を具備する。インターフェイスリストにおける各エントリーはユーザーによって選択可能である。ユーザーの選択に応答して、通信ウィンドウ２５０８はスクリーン上に表示される。通信ウィンドウ２５０８は、ユーザーがメッセージまたはリモートファンクションコールの所有権を登録することを可能にするレジスターアイコン２５１０を具備する。一実施形態において、もしメッセージが双方向メッセージであれば、通信ウィンドウは、コマンドウィンドウ２５０８と応答ウィンドウ２５１０に分割される。通信ウィンドウおよび応答ウィンドウは、一つまたはそれ以上のデータセットフィールド２５１２を具備する。データセットフィールドの数は、ユーザーによって構成可能である。データセットは、もっとも新しいペイロードの内容および以前に受信されたペイロードのユーザー構成可能(user configurable)な数を示す。
【０１５８】
データセットフィールド２５１２を用いて、ユーザーは、特定のコマンドメッセージのためのペイロードを構築し、そして応答メッセージのペイロードを設定することができる。更に、ユーザーは、通信データベース１２４におけるデータセットフィールド２５１２にある値を格納するため、“データセットの格納”を選択することができる。その後、ユーザーは、格納された値をロードするために、データセット“データセットのロード”を選択することができる。更に、ユーザーは、スタジオモジュール１２８に自動的に繰返させ、そしてユーザー構成可能なタイムインターバルで順にデータ値を伝送するために、クロックアイコン２５１８を選択してもよい。
【０１５９】
図２６は、ユーザーがファンクションコールの一部として伝送されるパラメータを検査(view)し且つテスト(test)することを可能にする代表的ユーザーインターフェイス２６００を例示する。レジスターアイコンを用いて、ユーザーは、ファンクションの所有権を登録することができる。ユーザーウィンドウ２６０８は、ユーザーがファンクションにパラメータ値を設定することを可能にする複数のパラメータフィールド２６１０を表示する。オーナーウィンドウ２６１０は、ファンクションに受け渡されたパラメータを表示する。ユーザーインターフェイス２６００は、図２５を参照して上述したように、データセットをセーブし且つロードすることを可能にする。
【０１６０】
図２７は、組み込みコンピュータ通信モジュール１１２またはホストコンピュータ通信モジュール１１６と共に使用するためにソースコードのテンプレートを自動的に生成するプロセスを例示するフローチャートである。本発明の一実施形態において、図２７のプロセスは、スタジオモジュール１２８によって実施される。本発明の他の実施形態において、図３７のプロセスは、コードジェネレータのようなスタンドアローンツール(standalone tool)によって実施される。説明の便宜上、次の説明はコードジェネレータに言及する。しかしながら、このようなファンクションは、スタジオモジュール１２８または通信データベース１２４によって提供できることが認識されるべきである。本実施形態により、追加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。
【０１６１】
ステップ２７０４から開始すると、ユーザーは、通信インターフェイスを定義する一つまたはそれ以上のインターフェイス定義フィールドを確認する。例えば、図３２のコードブロックは、インターフェイス定義ファイルの一部を例示する。
続いてステップ２７０８に移り、ユーザーは、選択されたインターフェイス定義ファイルにおける一つまたはそれ以上の通信インターフェイスを選択する。本発明の一実施形態において、コードジェネレータは、通信インターフェイスの選択のためのグラフィカルユーザーインターフェイスを提供する。
【０１６２】
次に、ステップ２７１６では、“スレッド”のコードテンプレートは、インターフェイス定義ファイルにおける選択されたメッセージのそれぞれを取り扱うために生成される。スレッドを生成する代表的プロセスは、図２８を参照して後述される。代表的テンプレートは、図３２のコードブロック３２０４に示される。
ステップ２７２０に移行し、スレッドのテンプレートは、インターフェイス定義ファイルにおける選択されたファンクションのそれぞれについて生成される。スレッドを生成する代表的プロセスは、図３１を参照して後述される。
図２８は、インターフェイス定義ファイルにおける確認されたメッセージのそれぞれについてスレッドを生成するプロセスを例示するフローチャートである。図２８は、図２７のステップ２７１６において発生するステップを更に詳細に例示する。本実施形態により、追加的ステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。
【０１６３】
ステップ２８００から開始する前に、メッセージハンドリングルーチンは、ユーザーによって確認された全てのメッセージを取り扱うために作成される。メッセージハンドリングルーチンは、ループを含み、そしてこのループに続いて、スイッチステートメントを含む。例えば、コードブロック３２０４を参照されたい。ステップ２８００から始めると、ループが加入され、そしてステップ２８０４，２８０８および２８１２が、確認されたメッセージのそれぞれについて実施される。続いてステップ２８０４に移り、コードジェネレータは、メッセージのそれぞれを登録するためのコードのラインを付け加える。コードブロック３２０４を参照されたい。本発明の一実施形態において、ソースコードは、組み込みコンピュータ通信モジュール１１２またはホストコンピュータ通信モジュール１１６によって提供されるレジストレーションルーチンを呼び出すためのコードを含む。レジストレーションルーチンを呼び出すためのコールは、生成されたスイッチステートメントの前に配置される。
【０１６４】
次にステップ２８０８では、コードジェネレータは、確認されたメッセージのそれぞれについてメッセージハンドリングコードを生成する。メッセージハンドリングコードを生成する代表的プロセスは、図２９を参照して後述される。続いてステップ２８１２に移り、コードジェネレータは、メッセージを送信するためのルーチンを作成する。メッセージを送信するためのルーチンを作成する代表的プロセスは、図３０を参照して後述される。
【０１６５】
図２９は、メッセージハンドリングコードを生成するプロセスを例示するフローチャートである。本実施形態により、追加的なステップを付け加え、他が削除され、ステップの順序づけが再整理されてもよい。図２９に示されるプロセスは、図２７のステップ２７０８においてユーザーによって確認されたメッセージのそれぞれに関して実施される。
ステップ２９０４から始めると、コードジェネレータは、ケースステートメント(case statement)を生成する。ステップ２９０８に進み、コードジェネレータは、コードを付け加えることをユーザーに指示するためのコメントをユーザーに対して生成する。
ステップ２９１２に進み、コードジェネレータは、メッセージが“双方向”であるかどうかを決定する。もしメッセージが“双方向”であれば、プロセスはステップ２９１６に進む。もしそうでなければ、プロセスはステップ２９２０に進む。
【０１６６】
ステップ２９１６では、コードジェネレータは、送信応答ルーチンを呼び出すために、生成されたケースステートメントにコードを付け加える。例として、図３２のコードブロック３２０４は、“送信メッセージ双方向応答”ルーチンへのコールを具備する。“送信メッセージ双方向応答”ルーチンのような、応答ルーチンのプロセスは、図３０のステップ３０１６を参照して後述される。
本発明の一実施形態において、生成されたコードは、ＤＡＴシステム１００のＡＰＩ、例えば送信応答（）を呼び出すであろう。このステップでは、コードジェネレータは、また、ユーザーの便宜、例えばポインタを付け且つセットアップするためのルーチンのため、他のＡＰＩを生成してもよい。ステップ２９２０に移行し、コードジェネレータは、また、ＡＰＩによって提供されるリリースルーチン(release routine)を呼び出すためのコードを生成してもよい。
【０１６７】
図３０は、図２７のステップ２７０８においてユーザーによって確認された通信インターフェイスを介してメッセージを送信するためのルーチンのテンプレートを生成するプロセスを例示するフローチャートである。図３０は、図２８のステップ２８１２において発生するステップを更に詳細に例示する。ステップ３００８から始めると、コードジェネレータは、メッセージが一方向であるか双方向であるか、ブロードキャストであるかどうかを決定する。もしメッセージが一方向または双方向であれば、プロセスはステップ３０１０に進む。ステップ３０１０では、コードジェネレータは、送信コマンドを呼び出すためのコマンドを送信するファンクションを生成する。代表的な生成されたコードテンプレートは、図３２のコードブロック３２０８に示される。続いて決定ステップ３０１２に移り、コードジェネレータは、通信が一方向であるか双方向であるかどうかを決定する。もしメッセージが一方向でなければ、即ち双方向であれば、プロセスはステップ３０１６に進む。ステップ３０１６では、コードジェネレータは、応答を送信するためのファンクションを生成する。生成されたコードは、応答を送信するためのＡＰＩを呼び出す。
【０１６８】
決定ステップ３００８を再び参照すると、コードジェネレータは、メッセージがブロードキャストメッセージであるかどうかを決定する。もしメッセージがブロードキャストであれば、プロセスはステップ３０２０に進む。ステップ３０２０では、コードジェネレータは、組み込みコンピュータ通信モジュール１１２およびホストコンピュータ通信モジュール１１６のＡＰＩの一部であるブロードキャストルーチンを呼び出すためのコードを付け加える。ステップ３０１２（通信が“一方向”の場合），３０２０および３０１６から、プロセスはステップ３０２４に進む。ステップ３０２４では、コードジェネレータは、メッセージのペイロードにポインタがあるかどうかを決定する。もしポインタがあれば、プロセスはステップ３０２８に進む。ステップ３０２８では、コードジェネレータは、通信ライブラリーＡＰＩの一部であるポインタセットアップコマンドを呼び出すためのコードを生成する。続いて、ステップ３０３２では、コードジェネレータは、ＡＰＩアタッチポインタ(API attach pointer)を呼び出すためのコードを生成する。ステップ３０３２および３０２８の間に生成されたコマンドは、生成された送信応答コマンドの前に生成されたコードに挿入される。（ステップ３０１６）。
【０１６９】
図３１は、リモートファンクションコールを介してプラットフォームを越えて通信するためにテンプレートコードを生成するプロセスを例示するフローチャートである。本発明の一実施形態において、インタープラットフォームファンクションコールは、組み込みコンピュータ通信モジュール１１２およびホストコンピュータ通信モジュール１１６によって提供されるメッセージングを介して同一ネームのリモートファンクションコールと通信するローカルファンクションを呼び出す。
【０１７０】
本実施形態により、追加的なステップが付け加えられ、他が削除され、そしてステップの順序づけが再整理されてもよい。ステップ３１０４から開始すると、ループは、ステップ３１０８，３１１２，および３１１６に関して実施される。このループにおいて、テンプレートコードは、プラットフォーム、即ち組み込みコンピュータ１０４かホストコンピュータ１０８のどちらかでの実施のために生成される。ここでのローカルプラットフォームは、呼び出されるべきルーチンを有しないコンピュータであると定義される。ステップ３１０８，３１１２，３１１６は、図２７のステップ２７０８においてユーザーによって確認されるファンクションのそれぞれについて実施される。ステップ３１０８では、コードジェネレータは送信コマンドを生成する。続いて、ステップ３１１２では、生成されたコードジェネレータはリードコマンドを生成する。ステップ３１１６に進み、コードジェネレータは応答を返すためのコードを生成する。ステップ３１０８，３１１２，３１１６の結果生じる代表的コードブロックは図３３のコードブロック３２１２に示される。
【０１７１】
次に、ステップ３１２０では、ループは、ステップ３１２４，３１２８，３１３２，３１３６，３１４０に関して実施される。このループにおいて、テンプレートコードは、リモートプラットフォーム上での実施のために生成される。続いてステップ３１２４に移り、コードジェネレータは、他のプラットフォーム上のスレッドによって要求されるローカルＡＰＩを呼び出すコードを生成し、そして応答メッセージを送信する。ステップ３１２４，３２１８，３１３３２，３１３６，３１４０の結果生じる代表的コードブロックはコードブロック３２１４に示される。
【０１７２】
次に、決定ステップ３１３２では、コードジェネレータは、ファンクションのパラメータに何かポインタがあるかどうかを決定する。もしファンクションのパラメータにポインタがなければ、プロセスは終了する。しかしながら、ポインタがあれば、プロセスはステップ３１３６に進み、そしてコードジェネレータは、ポインタをセットアップするためのＡＰＩを呼び出す。ステップ３１４０に移行し、コードジェネレータは、ポインタを付けるためのＡＰＩを呼び出すコードを生成する。そしてプロセスが終了する。
【０１７３】
ＤＡＴシステム１００は、スレッドが異なるプラットフォームに配置され、そして一層シームレスに互いに通信することを可能とする一つの仮想的な環境を提供する。ＤＡＴシステム１００は、データベース１２４に格納された、組み込みコンピュータ、ホストコンピュータおよび通信インターフェイスの装置特性に依存するデータを自動的に変換することにより二つのプラットフォーム間の通信相互接続性(communication interoperability)を提供する。ＤＡＴシステム１００は、組み込みコンピュータのソフトウェアアプリケーションに設計されたメッセージ基準およびリモートファンクションコールのインターフェイスに対する自動的かつシームレスなアクセスを提供する。ＤＡＴシステム１００は、インターフェイス情報を自動的に抽出し、そしてメッセージングおよびリモートファンクションコール情報を構築する。
【０１７４】
スタジオモジュール１２８を用いて、ユーザーは、次のような問題、即ち（１）メッセージを収容するためのデスクトップツールへの更新、（２）デスクトップツールの新しいファンクショナリティを支援するための組み込みソフトウェアへの更新、（３）何の目的のコンパイラーが使用されているか、（４）何のＲＴＯＳが使用されているか、そして（５）何のプラットフォーム、何のスレッドが使用されているか、という問題を検討することなく、組み込みアプリケーションのインターフェイスの制御および可視性(visibility)をなし遂げる。
【０１７５】
上述の詳細な説明は、種々の実施形態に適用して本発明の新規な特徴を示し、述べ、そして指摘したが、例示されたプロセスまたは装置の詳細および形式における、種々の省力、置換、および変更は、本発明の思想から始めることなく当業者によってなし得るものである。本発明の範囲は、上述の記述によるよりも、むしろ添付のクレームによって示される。クレームの均等の範囲および意味に含まれる全ての変形はその範囲に含まれる。
【図面の簡単な説明】
【０１７６】
【図１】組み込みコンピュータをテストするための開発およびテストシステムを例示するブロックダイアグラムである。
【図２】図１の開発およびテストシステムの一部である通信データベースの或るコンポーネントを例示するブロックダイアグラムである。
【図３】図１の開発およびテストシステムの他の実施形態を例示するブロックダイアグラムである。
【図４Ａ】図３の組み込みコンピュータと通信するために使用される代表的なスクリプトのダイアグラムである。
【図４Ｂ】図３の組み込みコンピュータと通信するために使用される代表的なスクリプトのダイアグラムである。
【図５】図１の開発およびテストシステムの他の実施形態を例示するブロックダイアグラムである。
【図６】図１の通信データベースの代表的なコンテンツを例示するブロックダイアグラムである。
【図７】図５の生成コンポーネントの代表的な階層を例示するブロックダイアグラムである。
【図８】図１の開発およびテストシステムで使用するソースファイルを修正するプロセスを例示するフローチャートである。
【図９】図１の通信データベースを構築するプロセスを例示するフローチャートである。
【図１０】図１のホストプラットフォーム通信モジュールを使用するプロセスを例示するフローチャートである。
【図１１】通信をフォーマットするプロセスを例示するフローチャートである。
【図１２Ａ】異なる装置特性を有する二つのプラットフォーム間でポインタデータを伝送する場合のポインタを管理する代表的な方法を例示する図である。
【図１２Ｂ】異なる装置特性を有する二つのプラットフォーム間でポインタデータを伝送する場合のポインタを管理する代表的な方法を例示する図である。
【図１２Ｃ】異なる装置特性を有する二つのプラットフォーム間でポインタデータを伝送する場合のポインタを管理する代表的な方法を例示する図である。
【図１２Ｄ】異なる装置特性を有する二つのプラットフォーム間でポインタデータを伝送する場合のポインタを管理する代表的な方法を例示する図である。
【図１３】組み込みコンピュータ上で動作するスレッドと通信するためのスクリプティングファイルを使用するプロセスを例示するフローチャートである。
【図１４】図３のメッセージングオートメーションコンポーネントをロードするプロセスを例示するフローチャートである。
【図１５】図３の開発およびテストシステムを用いてスクリプトにおいて動作するスレッドを登録するプロセスを例示するフローチャートである。
【図１６Ａ】メッセージ通信をスクリプトから図３の開発およびテストシステムに送信するプロセスを例示するフローチャートである。
【図１６Ｂ】ファンクションコールをスクリプトから図３の開発およびテストシステムに呼び出したファンクションコールを送信するプロセスを例示するフローチャートである。
【図１７Ａ】図３の開発およびテストシステムからスクリプトを介して通信をスクリプト受信するプロセスを例示するフローチャートである。
【図１７Ｂ】図３の開発およびテストシステムからリモートファンクションコールを介して通信をスクリプト受信するプロセスを例示するフローチャートである。
【図１８】図５の生成コンポーネントを利用するプロセスを例示するフローチャートである。
【図１９】図５のＣＯＭコンポーザを起動するプロセスを例示するフローチャートである。
【図２０】図５の生成コンポーネントを構築するプロセスを例示するフローチャートである。
【図２１】図１の生成コンポーネントのインターフェイスを生成するプロセスを例示するフローチャートである。
【図２２】任意のＣＯＭコンプライアント言語から図５の生成コンポーネントを用いるプロセスを例示するフローチャートである。
【図２３】図１の通信データベースによって確認された通信インターフェイスの一つをテストするプロセスを例示するフローチャートである。
【図２４】少なくとも二つのファンクションコール間で伝送されるモニタリング通信に基づき情報のデータセットを生成するプロセスを例示するフローチャートである。
【図２５】メッセージをテストするための代表的なユーザーインターフェイスを説明する図である。
【図２６】リモートファンクションコールのための代表的なユーザーインターフェイスを説明する図である。
【図２７】図１の開発およびテストシステムで使用するテンプレートコードを生成するプロセスを例示するフローチャートである。
【図２８】所定の通信インターフェイスによって定義されたメッセージをハンドリングするためのコードを生成するプロセスを例示するフローチャートである。
【図２９】メッセージハンドリングコードを生成するプロセスを例示するフローチャートである。
【図３０】メッセージを所定の通信インターフェイスに送信するためのコードを生成するプロセスを例示するフローチャートである。
【図３１】ファンクションコールに応答してインタープラットフォームメッセージングをハンドリングするためのコードを生成するプロセスを例示するフローチャートである。
【図３２】代表的な生成されたコードを例示するブロックダイアグラムである。
【図３３】代表的な生成されたコードを例示するブロックダイアグラムである。
【符号の説明】
【０１７７】
１０４  組み込みコンピュータ
１０８  ホストコンピュータ
１１２  組み込みコンピュータ通信モジュール
１１４  スレッド
１１６  ホストコンピュータ通信モジュール
１２０  スレッド
１２４  通信データベース
１２８  スタジオモジュール
【図１】
2008251032.tif 000023
【図２】
2008251032.tif 000024
【図３】
2008251032.tif 000025
【図４Ａ】
2008251032.tif 000026
【図４Ｂ】
2008251032.tif 000027
【図５】
2008251032.tif 000028
【図６】
2008251032.tif 000029
【図７】
2008251032.tif 000030
【図８】
2008251032.tif 000031
【図９】
2008251032.tif 000032
【図１０】
2008251032.tif 000033
【図１１】
2008251032.tif 000034
【図１２Ａ】
2008251032.tif 000035
【図１２Ｂ】
2008251032.tif 000036
【図１２Ｃ】
2008251032.tif 000037
【図１２Ｄ】
2008251032.tif 000038
【図１３】
2008251032.tif 000039
【図１４】
2008251032.tif 000040
【図１５】
2008251032.tif 000041
【図１６Ａ】
2008251032.tif 000042
【図１６Ｂ】
2008251032.tif 000043
【図１７Ａ】
2008251032.tif 000044
【図１７Ｂ】
2008251032.tif 000045
【図１８】
2008251032.tif 000046
【図１９】
2008251032.tif 000047
【図２０】
2008251032.tif 000048
【図２１】
2008251032.tif 000049
【図２２】
2008251032.tif 000050
【図２３】
2008251032.tif 000051
【図２４】
2008251032.tif 000052
【図２７】
2008251032.tif 000053
【図２８】
2008251032.tif 000054
【図２９】
2008251032.tif 000055
【図３０】
2008251032.tif 000056
【図３１】
2008251032.tif 000057
【図３２】
2008251032.tif 000058
【図３３】
2008251032.tif 000059
【図２５】
2008251032.tif 000060
【図２６】
2008251032.tif 000061