(57)【要約】【課題】ホストＰＣ上でホストネイティブコードとして実行する際の、外界モデルとのＩ／Ｆ追加処理を自動で行うとともに、操作者の作業を好適に効率化する仕組みを提供する。【解決手段】本情報処理装置は、ターゲットＣＰＵからは外部のモデルとなる外界モデルへのアクセスを行う外部アクセス命令を、シミュレーション対象であるターゲットコードの中から特定する。さらに、特定された外部アクセス命令に対応するターゲットコード中の箇所に外界モデルとの入出力を模擬するための外部Ｉ／Ｆ処理を付加する。【選択図】  図１
2015133084.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置であって、
検証対象のターゲットコードを実行するターゲットＣＰＵが制御する制御対象モデルの動作を模擬する装置シミュレータと、
前記装置シミュレータによるシミュレーションの実行前にシミュレータの実行環境を生成する前処理手段と
を備え、
前記前処理手段は、
前記ターゲットＣＰＵからは外部のモデルとなる外界モデルへのアクセスを行う外部アクセス命令を、前記ターゲットコードの中から特定する特定手段と、
前記特定手段によって特定された前記外部アクセス命令に対応する前記ターゲットコード中の箇所に前記外界モデルとの入出力を模擬するための外部Ｉ／Ｆ処理を付加する付加手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記特定手段は、
前記ターゲットコードのビルド結果から、ペリフェラルレジスタ又は外部バス領域へのアクセス箇所を検索することによって、前記外界モデルへのアクセスを行う前記外部アクセス命令を特定することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記外界モデルとの間で伝達される信号が定義された配線定義情報を記憶した記憶手段をさらに備え、
前記特定手段は、
前記配線定義情報に定義された信号と関連する前記外部アクセス命令を特定することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記配線定義情報には、前記外界モデルとの間で伝達される前記信号に関する、前記ターゲットＣＰＵのアドレス空間におけるアドレスが定義され、
前記特定手段は、前記ターゲットコード中に前記配線定義情報に定義された前記アドレスへのアクセス命令を検索することによって、前記外界モデルへのアクセスを行う前記外部アクセス命令を特定することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記配線定義情報には、前記外界モデルとの間で伝達される前記信号に関する、変数のシンボル名が定義され、
前記特定手段は、前記ターゲットコード中に前記配線定義情報に定義された前記シンボル名の変数へのアクセス命令を検索することによって、前記外界モデルへのアクセスを行う前記外部アクセス命令を特定することを特徴とする請求項３に記載の情報処理装置。
【請求項６】
前記特定手段は、
前記ターゲットコード中に含まれる、ポインタ変数の設定箇所又は該ポインタ変数を使用したアクセスを特定し、
前記付加手段は、
特定した前記ポインタ変数の設定箇所を、前記ターゲットＣＰＵと、前記外界モデルとの間でデータをやり取りする共有領域へのポインタとなるように前記ポインタ変数を置き換える処理を付加し、
特定した前記ポインタ変数を使用したアクセスの箇所に、前記ターゲットコード中の前記ポインタ変数の箇所に前記外部Ｉ／Ｆ処理を付加することを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項７】
前記付加手段は、
前記特定手段によって特定された前記外部アクセス命令が書込み命令の場合は、該書込み命令の直後に前記外部Ｉ／Ｆ処理を付加し、
前記特定手段によって特定された前記外部アクセス命令が読出し命令の場合は、該読出し命令の直前に前記外部Ｉ／Ｆ処理を付加することを特徴とする請求項１乃至６の何れか１項に記載の情報処理装置。
【請求項８】
検証対象のターゲットコードを実行するターゲットＣＰＵが制御する制御対象モデルの動作を模擬する装置シミュレータを備える情報処理装置の制御方法であって、
前処理手段が、前記装置シミュレータによるシミュレーションの実行前にシミュレータの実行環境を生成する前処理工程を実行し、
前記前処理工程において、
特定手段が、前記ターゲットＣＰＵからは外部のモデルとなる外界モデルへのアクセスを行う外部アクセス命令を、前記ターゲットコードの中から特定する特定工程と、
付加手段が、前記特定工程において特定された前記外部アクセス命令に対応する前記ターゲットコード中の箇所に前記外界モデルとの入出力を模擬するための外部Ｉ／Ｆ処理を付加する付加工程と
を実行することを特徴とする情報処理装置の制御方法。
【請求項９】
検証対象のターゲットコードを実行するターゲットＣＰＵが制御する制御対象モデルの動作を模擬する装置シミュレータを備える情報処理装置の制御方法をコンピュータで実行するためのプログラムであって、
前処理手段が、前記装置シミュレータによるシミュレーションの実行前にシミュレータの実行環境を生成する前処理工程を実行し、
前記前処理工程において、
特定手段が、前記ターゲットＣＰＵからは外部のモデルとなる外界モデルへのアクセスを行う外部アクセス命令を、前記ターゲットコードの中から特定する特定工程と、
付加手段が、前記特定工程において特定された前記外部アクセス命令に対応する前記ターゲットコード中の箇所に前記外界モデルとの入出力を模擬するための外部Ｉ／Ｆ処理を付加する付加工程と
を実行することを特徴とするプログラム。
【請求項１０】
請求項９に記載のプログラムを記憶したコンピュータで読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーションを実行する情報処理装置、その制御方法、プログラム、及び記憶媒体に関するものである。
【背景技術】
【０００２】
従来、装置組込みソフトウェアをパーソナルコンピュータ等のコンピュータシステム（以下、ホストＰＣと称する。）上で実行し、同じく、ホストＰＣ上で実行される制御対象装置のシミュレータを対象に動作検証を行う手法が提示されている。代表的な事例としては、以下に示すようなＳＯＣ等を対象としたソフトウェア、ハードウェア協調検証を目的としたシミュレーションシステムがある。
【０００３】
その一つの事例としては、対象装置のＣＰＵ（以下、ターゲットＣＰＵと称する。）を含むハードウェアの機能をＨＤＬ等のハードウェア記述言語によって記述し、ホストＰＣ上でシミュレーション実行するものである。この場合、ターゲットＣＰＵのハードウェアモデルが実際のＣＰＵの通りホストＰＣ上で模擬され、クロックに従ってターゲットＣＰＵのソフトウェア（以下、ターゲットソフトウェアと称する。）の実行形式プログラムの機械語命令を順次実行する。以下、特記しない限り、実行形式とはターゲットＣＰＵでの実行形式を示す。そして、ターゲットＣＰＵのハードウェアモデルが、同様にホストＰＣ上で模擬される周辺回路のハードウェアモデルとデータのやりとりを行い、対象装置の動作をホストＰＣ上で実現するものである。また、同様の構成においてターゲットＣＰＵの動作をクロック単位ではなく機械語命令実行単位でシミュレーションするインストラクションセットシミュレータ（ＩＳＳ）で構成するものも示されている。
【０００４】
これらの構成は何れもホストＰＣ上でのターゲットソフトウェアの実行をターゲットＣＰＵの機械語命令単位で行うため、シミュレーションの実行時間が遅くなるという欠点がある。そこで、ターゲットＣＰＵの動作に関しては周辺ハードウェアとの入出力レベルでのみ模擬し、ターゲットソフトウェアをホストＰＣのＣＰＵ（以下、ホストＣＰＵと称する。）で直接実行する方法も提示されている。即ち、ターゲットソフトウェアのソースコード（以下、ターゲットソースコードと称する。）をホストＣＰＵのネイティブコード（以下、ホストネイティブコードと称する。）にコンパイルし、ホストＣＰＵで実行する方法である。
【０００５】
このような構成の事例として、特許文献１には、ターゲットソースコードのハードウェアアクセス部分をハードウェアモデルとのＩ／Ｆ関数コールに置き換えてハードウェアモデルと接続する手法が提案されている。特許文献２には、ターゲットソフトウェアのハードウェアアクセス部分のみＩＳＳで実行し、それ以外の部分をホストネイティブコードで実行する手法が提案されている。
【０００６】
更に、特許文献３には、周辺ハードウェアの機能をＳｙｓｔｅｍＣ等のＣベース言語で記述し、ターゲットソフトウェアと共にホストネイティブコードにコンパイル、リンクし実行する手法が提案されている。特許文献３の手法においては、ターゲットソフトウェアのソースコード中のハードウェアアクセス部分をバスモデルへのアクセス処理に置き換えることで、ハードウェアモデルと接続している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１０−２６０８６５号公報
【特許文献２】特開２０００−２５９４４５号公報
【特許文献３】特開２００４−２３４５２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記従来技術には以下に記載する問題がある。ここで、ターゲットソフトウェアをホストネイティブコードで実行し、周辺装置モデルと連携させる場合には、上記従来技術に示されるように、ターゲットソフトウェア上のハードウェアアクセス部分に何らかの方法で外部接続機能を持たせる必要がある。この処理について、特許文献１及び特許文献３では人手によって行うことが示されている。また、特許文献２ではハードウェアアクセス部分のみターゲットＣＰＵ用にコンパイルし、ＩＳＳで実行することが示されている。更に、特許文献１では、ハードウェアアクセスの対象領域を予め登録し、ソフトウェアの基本部分で自動検出することも示されている。ただし、特許文献１では、自動検出、及び、外部接続についての具体的な方法は示されていない。
【０００９】
また、特許文献２のように、ハードウェアアクセス部分のみターゲットＣＰＵ用にコンパイルする場合、対象部分がＯＳ、デバイスドライバ等、個別コンパイルできる単位でまとまっていることが前提となる。このため、ハードウェアにアクセスする処理がソースコードの命令単位で各所に点在しているような場合には対応できない。
【００１０】
また、ターゲットソースコードへの外部接続機能の埋め込みを人手によって行う場合、見落とし、間違いが発生する危険性がある。従って、ターゲットソースコードへの外部接続機能を自動的に置き換えられることが望ましい。しかし、現実にこの処理を自動的に行おうとすると、以下のような様々な課題に対応する必要がある。
（１）汎用マイコン等において、ハードウェアアクセス処理がマイコンベンダから提供されるライブラリ関数の中に含まれている場合、ユーザ作成ソースコードからハードウェアアクセス箇所を特定することが困難である。
（２）ハードウェアレジスタアドレスが設定されたポインタ変数によってハードウェアレジスタへのアクセスを行っている場合、ターゲットソースコードの静的解析ではハードウェアアクセス箇所を特定できない。
（３）ハードウェアレジスタが定義されたヘッダファイルがマイコンベンダから提供される場合やユーザによって作成される場合など様々なケースがあると、ハードウェアアクセスの検出ルール、検出方法が個別対応となり、自動化が困難となる。
（４）外部接続対象のモデルがＨＤＬやＳｙｓｔｅｍＣによるハードウェア回路モデルではなく、より高次の論理モデルである場合、バスモデルへの接続Ｉ／Ｆ（レジスタアドレスをパラメータとしたＩ／Ｆ）置き換えでは処理効率が低下する。
【００１１】
上記（４）について補足する。メカや周辺環境を制御対象とする装置組み込みソフトウェアの制御についての検証を目的とするシステム（以下、組み込みソフト検証システムと称する。）がある。このようなシステムの場合、装置部品（ハードウェア、メカ）、及び、周辺環境といった制御対象全体をモデル化したもの（以下、外界モデルと称する。）が必要になる。当該システムでは、処理の高速化のために、ハードウェア、メカ機構個別のモデルを連携させるのではなく、制御対象全体での動作をモデル化する場合がある。このような外界モデルとターゲットソフトウェアとの連携の切り口はハードウェアアクセス命令となるが、アクセスデータの受け渡しはアクセス先をレジスタアドレスで指定しても意味を持たない。或いは、意味を持たせるためには、外界モデル側に実ハードウェア上のアドレスから情報を受け取る機能モデルへの受け渡し処理を仲介する必要があるため、処理効率が低下する。このようなシステムにおいては、レジスタをホストネイティブコードの変数として受け渡しするのが最も効率的な情報伝達方法といえる。更には、ターゲットソフトウェアの制御における機能の意味をより的確に表す内部変数を受け渡しすることでより効率的な情報伝達ができる。
【００１２】
しかしながら、組み込みソフト検証システムにおいては、ターゲットソフトウェアの接続先としてハードウェア回路をモデル化した部分と制御対象全体をモデル化した部分が混在する場合がある。このような構成においては、ターゲットソフトウェアの外部接続箇所の単純な検索と単純な外部Ｉ／Ｆ機能への置き換えでは対応できない。
【００１３】
本発明は、上述の問題に鑑みて成されたものであり、ホストＰＣ上でホストネイティブコードとして実行する際の、外界モデルとのＩ／Ｆ追加処理を自動で行うとともに、操作者の作業を好適に効率化する仕組みを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明は、情報処理装置であって、検証対象のターゲットコードを実行するターゲットＣＰＵが制御する制御対象モデルの動作を模擬する装置シミュレータと、前記装置シミュレータによるシミュレーションの実行前にシミュレータの実行環境を生成する前処理手段とを備え、前記前処理手段は、前記ターゲットＣＰＵからは外部のモデルとなる外界モデルへのアクセスを行う外部アクセス命令を、前記ターゲットコードの中から特定する特定手段と、前記特定手段によって特定された前記外部アクセス命令に対応する前記ターゲットコード中の箇所に前記外界モデルとの入出力を模擬するための外部Ｉ／Ｆ処理を付加する付加手段とを備えることを特徴とする。
【発明の効果】
【００１５】
本発明は、ホストＰＣ上でホストネイティブコードとして実行する際の、外界モデルとのＩ／Ｆ追加処理を自動で行うとともに、操作者の作業を好適に効率化することができる。
【図面の簡単な説明】
【００１６】
【図１】一実施形態における情報処理装置の構成図。
【図２】情報処理装置の実行環境であるホストＰＣのブロック図。
【図３】一実施形態における外部Ｉ／Ｆ付加部の処理のフローチャート。
【図４】一実施形態における接続定義情報の例。
【図５】一実施形態における信号接続部のフローチャート。
【図６】一実施形態におけるシミュレータ構成のブロック図。
【図７】一実施形態における接続定義情報の例。
【図８】実施形態における情報処理装置の構成図。
【図９】実施形態における外部Ｉ／Ｆ付加部の処理のフローチャート。
【発明を実施するための形態】
【００１７】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念及び下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されるわけではない。
【００１８】
＜第１の実施形態＞
＜情報処理装置の構成＞
以下では、図１乃至図５を参照して、本発明の第１の実施形態について説明する。本実施形態における情報処理装置１０１は、装置に組み込まれたターゲットＣＰＵで動作するプログラムであるターゲットソフトウェアを検証するものである。なお、情報処理装置１０１は、ホストＰＣで実行されるプログラムとして実現され得る。なお、以下の説明において、特記しない限り、或いは、文脈から明らかである場合を除き、時刻とは模擬時刻を意味するものとする。
【００１９】
まず、図２を参照して、ホストＰＣのハードウェア構成について説明する。図２に示すホストＰＣ２００のＣＰＵ２０１は、バス２１０を介して、ＲＯＭ２０２、ＲＡＭ２０３、入力インタフェース２０４、出力インタフェース２０６、及び外部記憶装置インタフェース２０８と接続されている。ＣＰＵ２０１は、ＲＯＭ２０２や外部記憶装置２０９に記憶されたプログラムを、ＲＡＭ２０３に読み出して実行する。また、ＣＰＵ２０１は、入力インタフェース２０４、外部記憶装置インタフェース２０８経由で受け取る外部入力に対する情報処理を行い、結果を出力インタフェース２０６、外部記憶装置インタフェース２０８経由で出力する。入力インタフェース２０４は、キーボード、マウス等の入力装置２０５を介してユーザからの入力を受け付ける。出力インタフェース２０６は、ＬＣＤや、プリンタ、プロッタ等の出力装置２０７に対しデータの表示や出力を行う。外部記憶装置インタフェース２０８は、ハードディスクやＣＤ−ＲＯＭ等の外部記憶装置２０９に対するデータの入出力を行う。
【００２０】
ＣＰＵ２０１は、外部記憶装置２０９に保存される設定データ２０９ｂ内のデータを使用して、処理プログラム２０９ａを実行することで、本実施形態による情報処理装置として機能する。検証対象のプログラムであるターゲットコード２０９ｃも外部記憶装置２０９に保存される。さらに、外部記憶装置２０９は、ＣＰＵ２０１で動作する基本ソフトウェアであるオペレーティングシステム（以下、ホストＯＳと記す。）を保存している。処理プログラム２０９ａは、ホストＯＳ上で動作する。
【００２１】
＜シミュレータ構成＞
続いて、図１を参照して、本実施形態における情報処理装置１０１上で実現されるシミュレータ構成について説明する。１０１は本発明に関わる情報処理装置全体を示す。情報処理装置１０１は、前処理部１０２と装置シミュレータ１０３から構成される。また、情報処理装置１０１には、外部記憶装置２０９が接続されている。
【００２２】
前処理部１０２は、外部Ｉ／Ｆ付加部１０４、ネイティブコード生成部１０５、及びターゲットアドレス空間管理情報１０６から構成される。更に、外部Ｉ／Ｆ付加部１０４は、外部接続データ生成部１０９、外部アクセス命令特定部１１０、及び外部アクセス処理置換部１１１から構成される。
【００２３】
装置シミュレータ１０３は、マイコンシミュレータ１０７と制御対象モデル／評価用機能１０８から構成される。また、マイコンシミュレータ１０７は、ソフトウェアシミュレータ１１２、シミュレータ接続部１１３、及びＨＷモデル１１４から構成される。更に、シミュレータ接続部１１３は、信号接続部１１５、同期部１１６、及び外部接続データ１１７から構成され、信号接続部１１５は、アクセス判断部１１８を有する。
【００２４】
＜前処理部＞
次に、前処理部１０２について説明する。前処理部１０２は、装置シミュレータ１０３による装置シミュレーション実行前にシミュレーション実行環境を生成する機能である。ターゲットアドレス空間管理情報１０６は、ターゲットＣＰＵ仕様に基づきターゲットＣＰＵのアドレス空間の領域を管理する情報である。具体的には、ターゲットＣＰＵのアドレス空間に機能割り当て（ＲＡＭ領域、ＲＯＭ領域、ペリフェラルレジスタ領域、外部バス領域等）をアドレス範囲として示した情報である。ターゲットアドレス空間管理情報１０６は、ユーザが所定の書式に基づき作成するターゲットＣＰＵ仕様データに基づき、外部接続データ生成部１０９によって生成される。
【００２５】
外部接続データ生成部１０９は、ターゲットアドレス空間管理情報１０６に基づき外部接続データ領域をシミュレータ接続部１１３の定義に従い確保するものである。外部接続データ１１７とは、ターゲットソフトウェアと外界モデル（ＨＷモデル１１４、制御対象モデル／評価用機能１０８）との間でデータをやり取りする共有領域のことで、ターゲットアドレス空間上に対応付けてネイティブコード上に確保される領域である。この領域を確保するために、外部接続データ生成部１０９は、シミュレータ接続部１１３の提供するヘッダファイル上にターゲットアドレス空間上の各領域に対応するデータ領域の定義コードを生成する。
【００２６】
外部接続データ定義の最も簡単な例としては、シミュレータ接続部１１３が外部接続データ領域の先頭からの相対アドレスとターゲットアドレス空間の絶対アドレスを１対１の対応で管理する場合である。この場合、外部接続データ生成部１０９は、シミュレータ接続部１１３が定義する外部接続データテーブルにターゲットアドレス空間全領域分のデータ領域を確保する。例えば、ターゲットアドレス空間が２４ビットアドレスの領域で、シミュレータ接続部１１３が外部接続データ領域テーブルを“ｉｏ＿ｄａｔａ”というシンボル名で規定する場合を想定する。
【００２７】
この場合、外部接続データ生成部１０９は、シミュレータ接続部１１３が提供するヘッダファイル上に下記のようなコードを生成する（ＡＮＳＩ  Ｃの場合。以下、特記しない限り、ソースコードの事例における言語はＡＮＳＩ  Ｃとする。）。
volatile unsigned char   io_data[0x1000000];
ターゲットアドレス空間の中で、実際に使用される領域が一部であり、かつ、断片的に領域が使用されている場合には、まとまった領域毎に外部接続データテーブルを定義してもよい。さらに、ターゲットアドレス空間上の各々の領域の先頭からの相対アドレスを、各外部接続データ１１７の所属するテーブル先頭からの相対アドレスに対応付けてもよい。本実施形態では、簡単のため、外部接続データ領域の先頭からの相対アドレスとターゲットアドレス空間の絶対アドレスを１対１の対応で管理する最も単純な例で説明する。
【００２８】
上述のように確保された外部接続データ領域は、ソフトウェアシミュレータ１１２の接続部の各々から直接アクセスすることが可能なように、ホストネイティブコード上のグローバル領域として確保される。外部アクセス命令特定部１１０は、前処理部１０２に保持されているターゲットアドレス空間情報や、外部記憶装置２０９に格納されているターゲットソースコード及び配線定義情報に基づき、ターゲットソースコード上の外部アクセス命令に相当する箇所を特定する。ここで、外部アクセス命令とは、外界モデルへアクセスするターゲットコードに含まれる命令を示す。なお、外界モデルとは、本実施形態においては、ＨＷモデル１１４や、制御対象モデル／評価用機能１０８を示す。外部アクセス命令特定部１１０によってソースコード上で外部アクセス命令と特定された箇所は、後述する外部アクセス処理置換部１１１によって、ソースコードの記述が外界モデルとの入出力を模擬するための外部Ｉ／Ｆ処理（機能）に置き換えられる。本実施形態における外部アクセス命令特定部１１０は、ソースコード上におけるペリフェラルレジスタ、外部バス領域への書込み、読出処理を行っている箇所を外部アクセス命令相当と判断する。
【００２９】
以下に、具体的な特定方法について説明する。ペリフェラルレジスタ、及び外部バス領域のアドレスは、ターゲットアドレス空間管理情報１０６から判断することができる。しかしながら、ターゲットソースコード上でこれらへのアクセスは、別シンボルに置き換えられている場合がある。また、シンボルの定義方法も定義情報の作成者により異なり、場合によってはマイコンベンダ、ツールベンダから提供されるコンパイラ内に隠蔽されている場合もある。従って、これらへのアクセス箇所をターゲットソースコード上から特定のルールに従って検索することは困難である。そこで、外部アクセス命令特定部１１０は、ターゲットビルド結果情報から、ペリフェラルレジスタ、外部バス領域へのアクセス箇所を特定する。より具体的には、ターゲットＣＰＵの実行形式コードからこれらのアドレス領域へのアクセス命令を特定し、実行形式コードとソースコードの対応情報に基づきソースコード上のこれら領域へのアクセス箇所を特定する。これに関してはビルド結果として生成されるマップ情報や、デバッガによるソースデバッグのための情報等を利用し、公知の技術により可能である。
【００３０】
外部アクセス処理置換部１１１は、外部アクセス命令特定部１１０によって検出されるターゲットソースコード上の外部アクセス命令相当と判断した箇所を、外界モデルとの入出力を模擬するための外部Ｉ／Ｆ処理に置き換える。具体的には、書込み、読出し対象のペリフェラルレジスタ、外部バス領域を外部接続データ１１７に置き換え、書込み命令の場合には命令直後に、シミュレータ接続部１１３から提供されるイベント通知関数呼出し（外部Ｉ／Ｆ処理）を付加する。一方、読出し命令の場合には読出し命令直前にシミュレータ接続部１１３から提供されるイベント通知関数呼出し（外部Ｉ／Ｆ処理）を付加する。
【００３１】
例えば、外部接続データ１１７が前述のように定義されており、ターゲットソースコードに以下のようなコードがある場合、
#define ABCD (*(volatile unsigned char *) 0x123456)
unsigned char    abcd;
abcd = ABCD;
ABCD = 10;
ここで、０ｘ１２３４５６はペリフェラルレジスタ領域であるとする。
外部アクセス処理置換部１１１は、ターゲットソースコードを以下のように置き換える。
#define ABCD (*(volatile unsigned char *) 0x123456)
unsigned char    abcd;
ReadEvent(0x123456, 1);
abcd = io_data[0x123456];
io_data[0x123456] = 10;
WriteEvent(0x123456, 1);
ここで、“ＲｅａｄＥｖｅｎｔ”とは、シミュレータ接続部１１３が提供する読出イベント発生通知関数であり、第一引数はターゲットアドレス空間上のアクセス先アドレスとなり、第二引数はアクセスサイズとなっている。同様に、ＷｒｉｔｅＥｖｅｎｔ”は、シミュレータ接続部１１３が提供する書込イベント発生通知関数で、第一引数はターゲットアドレス空間上のアクセス先アドレスとなり、第二引数はアクセスサイズとなっている。これらアクセスイベント通知関数の呼び出しに応じてシミュレータ接続部１１３は外界モデルとのデータ入出力処理を行う。シミュレータ接続部１１３の処理に関しては、後述する。
【００３２】
なお、アクセスイベント通知関数の挿入位置は、必ずしも外部アクセス命令と判断された箇所の直前、直後に設定できない場合がある。このような場合でも、外部アクセス処理置換部１１１はソースコードの構文解析を行い、実際の処理実行における外部アクセス命令の直前、又は、直後にアクセスイベント通知関数の呼び出しが行われるように設定する。
【００３３】
例えば、上記事例のソースコードの中に、以下のようなコードがあった場合、
int    i;
for(i=0; ABCD != 0; ++i) {
・
if(*****) {
continue;
}
・
}
外部アクセス処理置換部１１１は、ソースコードを以下のように変換する。
int    i;
ReadEvent(0x123456, 1);
for(i=0; io_data[0x123456] != 0; ++i) {
・
if(*****) {
ReadEvent(0x123456, 1);
continue;
}
・
ReadEvent(0x123456, 1);
}
以上の事例では、シミュレータ接続部１１３が外部接続データ領域の先頭からの相対アドレスとターゲットアドレス空間の絶対アドレスを１対１の対応で管理する場合の置き換え事例である。また、ターゲットアドレス空間上の分割された複数領域を複数の外部接続データテーブルで管理する場合には、アクセス領域を対応するテーブルに置き換え、テーブル添え字を管理方法に従って適切に設定することで同様に対応することができる。
【００３４】
ネイティブコード生成部１０５は、ホストＰＣのプログラム開発ツールとして一般に用意されているプログラムビルドツールのビルドプロジェクトである。ネイティブコード生成部１０５は、外部Ｉ／Ｆ付加部１０４によって外部Ｉ／Ｆ処理が付加されたホストソースコードをホストネイティブコードにコンパイルする。さらに、ネイティブコード生成部１０５は、シミュレータ接続機能ライブラリ、ＨＷモデルライブラリの提供するシミュレータ接続部１１３、ＨＷモデル１１４とリンクすることで装置シミュレータ１０３の構成物の一つであるマイコンシミュレータ１０７を生成する。
【００３５】
＜前処理部の処理＞
次に、図３を参照して、上述した外部Ｉ／Ｆ付加部１０４の外部接続データ生成部１０９、外部アクセス命令特定部１１０、外部アクセス処理置換部１１１、及びネイティブコード生成部１０５を使用した前処理部１０２による一連の処理手順について説明する。以下で説明する処理は、ＣＰＵ２０１がＲＯＭ２０２や外部記憶装置２０９に格納された制御プログラムをＲＡＭ２０３に読み出すことによって実現される。
【００３６】
まず、Ｓ３０１において、前処理部１０２の外部接続データ生成部１０９は、ターゲットＣＰＵ仕様に基づきターゲットアドレス空間管理情報１０６を生成する。続いて、Ｓ３０２において、外部接続データ生成部１０９は、外部記憶装置２０９に格納されているシミュレータ接続機能ライブラリの外部接続定義ヘッダファイルに外部接続データ定義を生成する。
【００３７】
次に、Ｓ３０３において、外部アクセス命令特定部１１０は、ターゲットソースコード中の外部アクセス命令の箇所を検索する。Ｓ３０４において、外部アクセス命令特定部１１０は、ターゲットソースコードの中に外部アクセス命令が検索されたか否かを判定する。検索されると、Ｓ３０５に進み、そうでない場合は、Ｓ３０６に進む。Ｓ３０５において、外部アクセス命令特定部１１０は、外部アクセス処理置換部１１１によってターゲットソースコードへ、外界モデルとの入出力を模擬するための外部アクセス機能（外部Ｉ／Ｆ処理）を付加して、Ｓ３０６に進む。Ｓ３０６において、外部アクセス命令特定部１１０は、ターゲットソースコードの全領域に関する解析が終了したか否かを判定し、終了していればＳ３０７に進み、終了していなければＳ３０３に進む。
【００３８】
Ｓ３０７において、ネイティブコード生成部１０５は、外部Ｉ／Ｆ組込みターゲットソースコードのビルド、及び、シミュレータ接続部１１３、ＨＷモデル１１４とのリンク処理が行われ、マイコンシミュレータ１０７の実行コードを生成する。
【００３９】
＜装置シミュレータ＞
次に、装置シミュレータ１０３によるシミュレーション実行処理について説明する。図１に示すように、装置シミュレータ１０３は、ソフトウェアシミュレータ１１２、ＨＷモデル１１４、制御対象モデル／評価用機能１０８、及び、これらを接続するシミュレータ接続部１１３から構成される。シミュレータ接続部１１３は、ソフトウェアシミュレータ１１２、ＨＷモデル１１４、及び制御対象モデル／評価用機能１０８間の時刻同期を同期部１１６で行い、信号線接続を信号接続部１１５で行う。同期部１１６による時刻同期処理では、装置シミュレータ１０３を構成する各シミュレータにおける模擬時刻上の時刻を一致させる処理を行う。ここで、模擬時刻とは、各シミュレータの模擬動作に応じて進行する時間のことである。例えば、移動速度が時速１０キロメートルである物体の動作をシミュレーションする場合、シミュレータが物体の１０キロメートル分の移動状態を解析するのに要した時間に拘わらず、模擬時刻上は１時間経過したことになる。実時間（ホストＰＣが解析処理を行う時間）に対する模擬時刻の進行度合いはシミュレータ毎に異なるため、図１の装置シミュレータ１０３のように複数のシミュレータを連携させる場合には模擬時刻の同期処理が必要になる。同期処理については公知の技術であるため、詳述は避ける。
【００４０】
外部接続データ１１７は、前処理部１０２の外部接続データ生成部１０９によって設定されるソフトウェアシミュレータ１１２の外界モデルとの接続データを保持する領域である。外部接続データ領域は、前処理部１０２の外部アクセス処理置換部１１１によってターゲットソフトウェアのホストネイティブコードに付加された外部Ｉ／Ｆ処理から読出し、書込みが行われる。
【００４１】
前処理部１０２は、ソフトウェアシミュレータ１１２によるターゲットアドレス領域、ペリフェラルレジスタ領域、外部バス領域として定義された領域へのアクセス命令を全て外部アクセス命令として、外部Ｉ／Ｆ処理をターゲットソフトウェアに付加している。しかしながら、不要な外界モデルへのアクセスは、シミュレーションのパフォーマンスを低下させることになる。そこで、信号接続部１１５は、アクセス判断部１１８を有し、ターゲットソフトウェアからのアクセス通知に応じてアクセス判断部１１８が、ユーザが作成した配線定義情報で指定された領域のみソフトウェアシミュレータ１１２と外界モデルとの接続処理を行う。
【００４２】
＜配線定義情報＞
次に、図４を参照して、配線定義情報の一例について説明する。配線定義情報は、外界モデルとの間で伝達される信号が定義された情報である。当該配線定義情報は、外部記憶装置２０９に予め格納されている。図４の事例では、電子写真方式の画像形成装置の制御系のシミュレータにおける配線定義の例であり、用紙搬送制御や、定着装置制御関連の情報の配線が定義されている。仮想信号名は、接続情報を特定する名称であり、各々に対して、データサイズ、信号種別、及び初期値が定義されている。なお、信号種別としては、例えば、バイナリ（Ｂ）、デジタル多値（Ｄ）、アナログ（Ａ）等が用いられる。さらに、各仮想信号について、ＣＰＵモデル（即ち、ターゲットネイティブコード）、ＨＷモデル１１４、制御対象モデル、評価用機能各々における信号特定情報、接続先の設定、及び、制御対象モデル、評価用機能については論理の設定が定義される。信号特定情報は、装置シミュレータ１０３を構成する各シミュレータ内での信号を特定する情報で、ＣＰＵについてはターゲットアドレス空間上のアドレス、ビット位置（バイナリ信号のみ）、他のシミュレータについてはＩＤが定義される。接続先は、ＣＰＵモデル（Ｃ）、ＨＷモデル１１４（Ｈ）、制御対象モデル（Ｏ）、評価用機能（Ｅ）等が用いられる。図４の配線定義の事例では、メインモータレディ、各種センサ、アクチュエータ、モータ駆動信号等はＨＷモデル１１４を介さずにＣＰＵモデルと制御対象モデルとで直結される定義となっている。Ａ／Ｄコンバータ設定、Ａ／Ｄ変換値、タイマ１ＰＷＭ Ｄｕｔｙ、タイマ１設定、タイマ２ＰＷＭ Ｄｕｔｙ、タイマ２設定等はＣＰＵモデルとＨＷモデル１１４とで接続される。そして、メインサーミスタ電圧値、サブサーミスタ電圧値、タイマ１Ｈ出力時間、タイマ１Ｌ出力時間、タイマ２Ｈ出力時間、タイマ３Ｌ出力時間等はＨＷモデル１１４と制御対象モデルとで接続される。
【００４３】
ここでは、ターゲットソフトウェアによる定着装置のヒータドライブ設定（タイマ１、２への設定）に応じてタイマモデルがヒータドライブ信号（ＰＷＭ信号）を生成する。さらに、ＰＷＭ波形に応じて定着装置モデルが温度センサ（メイン、サブの各サーミスタ）の電圧値を生成し、これに応じてＡ／Ｄコンバータモデルが量子化されたＡ／Ｄ変換値を生成するというフィードバック制御系を想定している。
【００４４】
図４に示す配線定義情報に基づき、信号接続部１１５は、各シミュレータ間の信号データ伝達処理を行う。ここでは、本発明に関わる、信号接続部１１５によるソフトウェアシミュレータ１１２と外界モデル（ＨＷモデル１１４、制御対象モデル／評価用機能１０８）との接続処理について詳述する。信号接続部１１５は、ソフトウェアシミュレータ１１２からのアクセスイベント関数コール時に、アクセス判断部１１８によるアクセス先が接続対象か否かの判断に基づき、ソフトウェアシミュレータ１１２と外界モデルとの信号伝達処理の実行要否を判断する。
【００４５】
＜シミュレータ接続部の処理＞
ここで、図５を参照して、ターゲットソフトウェアのアクセスイベントコール（“ＲｅａｄＥｖｅｎｔ”、“ＷｒｉｔｅＥｖｅｎｔ”関数コール）に応じたシミュレータ接続部１１３の処理について説明する。以下で説明する処理は、ＣＰＵ２０１がＲＯＭ２０２や外部記憶装置２０９に格納された制御プログラムをＲＡＭ２０３に読み出すことによって実現される。図５（Ａ）は、“ＲｅａｄＥｖｅｎｔ”に対する処理を示し、図５（Ｂ）は、“ＷｒｉｔｅＥｖｅｎｔ”に対する処理を示す。
【００４６】
まず、“ＲｅａｄＥｖｅｎｔ”対する処理について図５（Ａ）を参照して説明する。イベントコールを受けるとＳ５０１において、シミュレータ接続部１１３は、引数として渡されるターゲットアドレス空間上のアクセスアドレスとサイズから、アクセス対象領域に、配線定義情報でＣＰＵモデルに接続定義された領域が含まれるかをチェックする。そして、Ｓ５０２で、シミュレータ接続部１１３は、配線定義領域が含まれるか否かを判定し、含まれればＳ５０３に進み、含まれなければ処理を終了する。
【００４７】
Ｓ５０３において、シミュレータ接続部１１３は、配線定義情報において該当する信号の接続先指定されているシミュレータから当該信号値を取得する。この処理は各々のシミュレータの外部Ｉ／Ｆ仕様に従って行われる。そして、外部接続領域のアクセス対象の領域の値を、接続先シミュレータから取得した値に更新し処理を終了（リターン）する。
【００４８】
上述のとおり“ＲｅａｄＥｖｅｎｔ”は、ターゲットソフトウェアによる対象領域の参照直前にコールされるため、この処理によりターゲットソフトウェアはアクセス領域から接続先のシミュレータの最新の設定値を参照することができる。また、Ｓ５０２でアクセス領域に配線定義領域が含まれないと判断した場合には何もせずに処理を終了する。この処理により、ＣＰＵモデル（即ち、ソフトウェアシミュレータ１１２）が他のシミュレータと信号接続定義されていない領域へのターゲットソフトウェアのアクセス時に不要な処理が働くことを抑止できる。
【００４９】
次に、ＷｒｉｔｅＥｖｅｎｔ”に対する処理について図５（Ｂ）を参照して説明する。図５（Ｂ）の“ＷｒｉｔｅＥｖｅｎｔ”に対する処理も、図５（Ａ）の“ＲｅａｄＥｖｅｎｔ”に対する処理とほぼ同じである。Ｓ５０４及びＳ５０５の処理は、Ｓ５０１及びＳ５０２と同じであるため説明を省略する。したがって、以下では、Ｓ５０６の処理について説明する。
【００５０】
Ｓ５０６において、シミュレータ接続部１１３は、外部接続領域のアクセス対象の領域の値を取得して、配線定義情報において該当する信号の接続先指定されているシミュレータに当該信号値の変更を通知する。この処理は各々のシミュレータの外部Ｉ／Ｆ仕様に従って行われる。上述のとおり“ＷｒｉｔｅＥｖｅｎｔ”は、ターゲットソフトウェアによる対象領域の書き込み直後にコールされるため、この処理によりターゲットソフトウェアによる書込値を取得し、接続先のシミュレータに最新の信号値を通知することができる。また、Ｓ５０５でアクセス領域に配線定義領域が含まれないと判断した場合には何もせずに処理を終了する。この処理により、ＣＰＵモデル（即ち、ソフトウェアシミュレータ１１２）が他のシミュレータと信号接続定義されていない領域へのターゲットソフトウェアのアクセス時に不要な処理が働くことを抑止できる。
【００５１】
以上説明したように、本実施形態に係る情報処理装置は、ターゲットＣＰＵからは外部のモデルとなる外界モデルへのアクセスを行う外部アクセス命令を、シミュレーション対象であるターゲットコードの中から特定する。さらに、特定された外部アクセス命令に対応するターゲットコード中の箇所に外界モデルとの入出力を模擬するための外部Ｉ／Ｆ処理を付加する。よって、本実施形態によれば、ターゲットソフトウェアをホストネイティブコードで実行する際に必要な外部Ｉ／Ｆを自動で設定することができ、かつ、不要な外部接続をなくして効率的な装置シミュレーションの実行が可能になる。
【００５２】
＜第２の実施形態＞
以下では、図６及び図７を参照して、第２の実施形態について説明する。上記第１の実施形態では、ターゲットソフトウェアのホストネイティブコードへの外部Ｉ／Ｆ処理の付加を、ペリフェラルレジスタ領域、及び、外部バス領域に限定して設定している。しかし、ユーザによる装置シミュレータ１０３の用途によっては、ターゲットのＲＡＭ上に定義された変数領域を外部接続する必要が発生する場合もある。
【００５３】
例えば、上記第１の実施形態の図４における配線定義情報の例では、画像形成装置のシミュレーションシステムの例が示されている。この例における、定着装置のフィードバック制御系のような場合で、定着器制御の検証のみを目的とする場合には、定着器温度センサ値についてＡＤコンバータモデルを使用しない方がより効率のよい外界モデルを形成できる。この制御系モデルを図６のブロック図で改めて説明する。
【００５４】
図６（Ａ）は、上記第１の実施形態で図４に示される配線定義情報で想定している定着装置の装置シミュレータ１０３の構成を示す。ターゲットソフトウェアの機能として、定着ヒータ駆動制御、Ａ／Ｄ変換割込みハンドラの各制御モジュールとメイン、サブ各サーミスタの温度値の情報を有している。定着ヒータ駆動制御は定着器の温度状態に応じて定着ヒータの駆動率を調整する。定着ヒータの駆動率はタイマのＰＷＭ出力機能を使用して制御する。本シミュレータにおいてはＨＷモデル１１４のタイマ１、２に対応するモデルが各々ターゲットソフトウェアの設定に応じたＰＷＭ信号出力を模擬する。実機においてはＰＷＭ信号が定着ヒータ駆動回路に入力されて、定着ヒータ駆動回路がＰＷＭ信号に応じたヒータ駆動を行う。そして、定着器温度検知センサとしてのサーミスタが定着器の温度に応じた電圧をマイコンのアナログ入力端子に入力する。
【００５５】
本シミュレータにおいては制御対象モデルである定着装置の装置シミュレータ１０３がタイマモデルからのＰＷＭ信号（ＨｉｇｈレベルとＬｏｗレベルの時間値として渡される）に応じて、所定の演算を行い、メイン、サブ各々のサーミスタ電圧値を算出する。そして、ターゲットソフトウェアのＡ／Ｄコンバータ設定に応じてＡ／Ｄコンバータがアナログ入力端子の入力を順次量子化し、結果をＡ／Ｄ変換レジスタに設定して割込み要求を発生する。ターゲットソフトウェアは、割込み要求により実行されるＡ／Ｄ変換割込みハンドラで、Ａ／Ｄ変換値をＡ／Ｄコンバータへの設定条件に応じて対応する変数領域に格納する。本シミュレータではこの動作をＨＷモデル１１４のＡ／Ｄコンバータモデル、及び、割込みコントローラが模擬する。その結果、メイン、サブ各サーミスタの温度値情報が更新される。このように、図６（Ａ）に示す上記第１の実施形態に対応するシミュレータでは、実際の装置のユニット構成を忠実に再現している。
【００５６】
しかし、定着ヒータ駆動制御の評価を行う場合、本構成のサーミスタ電圧値算出、量子化、割込み、温度データ設定の一連の処理は不要である。この場合、定着装置の装置シミュレータ１０３がメイン、サブ各サーミスタの温度値として直接量子化した値を求め、ソフトウェアシミュレータ１１２の該当する変数に設定することで十分、かつ、シミュレーションの処理としてはより効率的である。そこで、本実施形態に係るシミュレータ構成を、図６（Ｂ）を参照して説明する。
【００５７】
本実施形態に係るシミュレータ構成では、上述の構成を想定しているため、ターゲットソフトウェア上のメイン、サブサーミスタの各温度値設定変数と制御対象モデルを直結する必要がある。そこで、本実施形態の情報処理装置１０１においては、ターゲットソースコード上の外部アクセス命令相当箇所の特定条件として、変数領域へのアクセス処理を加える。ただし、変数領域全てを対象とするとターゲットソースコードの多くの箇所が対象となり、前処理の効率、及び、シミュレーション実行処理の効率共に低下する。そこで、この場合には、配線定義情報に定義された変数領域のみ外部接続対象とする。
【００５８】
本実施形態のシミュレータ構成は、上記第１の実施形態と同じであるが、外部アクセス命令特定部１１０の処理が一部異なる。まず、ユーザは、配線定義情報において、ペリフェラルレジスタや外部バス領域と同様にアドレスを直接定義することで変数領域を外部接続対象とすることができる。しかし、多くの場合、変数は、プログラマがアドレスを特定せずコンパイラによってリロケータブルに配置されるように定義される。この場合、配線定義情報で実アドレスを指定する定義方法では、ターゲットソフトウェアのプログラムを変更する毎に、マップファイルから変数アドレスを特定して、配線定義情報を変更する必要が発生する。そこで、配線定義情報には変数のシンボル名を指定できるようにする。この配線定義情報の例を、図７に示す。
【００５９】
図７は、図６（Ｂ）のシミュレータ構成を前提としたもので、ＣＰＵモデルのメイン、サブ各々のサーミスタ温度値設定変数と制御対象モデルを直結する定義となっている。配線定義情報における変数のシンボル指定は、ＣＰＵモデルのアドレス欄に“＆”＋“シンボル名”を設定することで定義する。この例では、メインサーミスタ温度値の変数名が“ｔｈｒｍ１”、サブサーミスタ温度値の変数名が“ｔｈｒｍ２”である事例となっている。なお、本事例の装置シミュレータ１０３のシミュレータ接続部１１３は、同じデータを異なるモデルに接続することができ、そのための配線定義としては、同じデータを異なる信号として定義する。図７の例で、仮想信号名「メインサーミスタ温度値（評価用）」、「サブサーミスタ温度値（評価用）」がこの事例で、各々、「メインサーミスタ温度値」、「サブサーミスタ温度値」と同じターゲットソフトウェア上の変数を評価用機能に接続している。これは、これらの値を評価用機能でモニタするための設定の事例である。
【００６０】
ここで、外部アクセス命令特定部１１０は、図７のような配線定義情報に基づき、ソースコード上の該当する変数へのアクセス箇所を特定する。まず、直接、変数のアドレス値が指定されている場合には、上記第１の実施形態のペリフェラルレジスタ、外部バス領域と同様に求めることができる。また、変数のシンボル名で指定されている場合、ソースコードからソースコードの言語仕様に基づき求めることが可能である。外部アクセス処理置換部１１１による外部Ｉ／Ｆ機能の付加処理は、上記第１の実施形態におけるペリフェラルレジスタ領域、外部バス領域への設定と同様の処理で可能である。
【００６１】
例えば、外部接続データ１１７が上記第１の実施形態のように定義されており、ターゲットソースコードに以下のようなコードがあって、“ａｂｃｄ”が配線定義情報でシンボル名として接続定義されている場合、
#define ABCD (*(volatile unsigned char *) 0x123456)
unsigned char    abcd;
ABCD = abcd;
abcd = 10;
ここで、０ｘ１２３４５６はペリフェラルレジスタ領域であるとする。
外部アクセス処理置換部１１１は、ターゲットソースコードを以下のように置き換える。
#define ABCD (*(volatile unsigned char *) 0x123456)
unsigned char    abcd;
ReadEvent(0x00789a, 1);
io_data[0x123456] = io_data[0x00789a];
WriteEvent(0x123456, 1);
io_data[0x00789a] = 10;
WriteEvent(0x00789a, 1);
上記例は、ターゲットアドレス空間上の変数“ａｂｃｄ”のアドレスが、“０ｘ００７８９ａ”である場合（外部アクセス処理置換部１１１がターゲットビルド情報から参照する）を想定している。
【００６２】
以上説明したように、本実施形態に係る情報処理装置１０１は、上記第１の実施形態による外部アクセス命令の特定方法とは異なり、ターゲットコード中の変数のシンボル名を検索することにより特定する。従って、本実施形態では、ユーザによる装置シミュレータ１０３の用途によっては、ターゲットのＲＡＭ上に定義された変数領域を外部接続する必要が発生した場合であっても、上記第１の実施形態と同様の効果を得ることができる。なお、本実施形態は、上記第１の実施形態と組み合わせて実現できることは言うまでもない。
【００６３】
＜第３の実施形態＞
上記第１及び第２の実施形態では、ターゲットソフトウェアによるアクセス対象領域が動的に変化しない領域を外界モデルとの接続領域の対象とする事例である。しかし、実際のソフトウェア処理においては、ポインタ変数によってアクセスする領域を外界モデルとの接続対象とする必要があり得る。例えば、ステッピングモータの駆動パルスを生成するハードウェア回路に対して、所定のスローアップ、スローダウン動作のパラメータ（連続して順次変化するパルス幅データ）を連続するレジスタ領域にソフトウェアから設定するような場合などである。この場合、ソフトウェアが所定のテーブル上に用意したスローアップ時の一連のパルス幅データを、設定領域の先頭からポインタ変数を使用して設定することは一般的に考えられる。そこで、本実施形態においては、ターゲットソフトウェアがポインタ変数によってアクセスするプログラムコードにも外部Ｉ／Ｆ処理を付加することとする。
【００６４】
＜シミュレータ構成＞
図８を参照して、本実施形態における情報処理装置１０１上に構成されるシミュレータの構成について説明する。ここでは、上記第１の実施形態と異なる部分について主に説明する。本実施形態に係るシミュレータ構成は、上記第１の実施形態に係るシミュレータ構成（図１）の外部Ｉ／Ｆ付加部１０４に、ポインタアクセス命令特定部１１９と外部アクセス変数置換部１２０とが付加される。ポインタアクセス命令特定部１１９は、ターゲットソースコード中のポインタ変数に対して、データ（アドレス値）を設定する命令、及び、そのポインタを使用したアクセス命令を抽出する。これは公知の技術により可能である。
【００６５】
次に、外部アクセス変数置換部１２０は、ポインタ変数の指示先にデータを設定する命令の設定値を外部接続データ１１７へのポインタに置き換える。更に、外部アクセス処理置換部１１１は、ポインタ変数にデータを設定する命令の箇所に外部Ｉ／Ｆ機能を付加する。
【００６６】
例えば、下記のようなコードがある場合、
#define ABCD (*(volatile unsigned char *) 0x123456)
unsigned char    *ptr;
ptr = ＆ABCD;
ptr++;
*ptr = 10;
ポインタアクセス命令特定部１１９は、ポインタ変数にデータを設定する箇所（上記例の３行目）を検出し、外部アクセス変数置換部１２０による変数置き換え処理を行う。
【００６７】
また、ポインタアクセス命令特定部１１９は、ポインタ変数を使用したアクセス命令（上記例の４行目）を検出し、外部アクセス処理置き換え処理による外部Ｉ／Ｆ付加処理を行う。
#define ABCD (*(volatile unsigned char *) 0x123456)
unsigned char    *ptr;
ptr = &io_data[0x123456];
ptr++;
ptr = 10;
WriteEvent((ptr - io_data), 1);
読み出し処理の場合も同様に対応できる。
【００６８】
＜前処理部の処理＞
次に、図９を参照して、上述した外部Ｉ／Ｆ付加部１０４の外部接続データ生成部１０９、外部アクセス命令特定部１１０、ポインタアクセス命令特定部１１９、外部アクセス変数置換部１２０、外部アクセス処理置換部１１１、及びネイティブコード生成部１０５を使用した前処理部１０２による一連の処理手順について説明する。以下で説明する処理は、ＣＰＵ２０１がＲＯＭ２０２や外部記憶装置２０９に格納された制御プログラムをＲＡＭ２０３に読み出すことによって実現される。Ｓ３０１乃至Ｓ３０６、及びＳ３０７の処理は、上記第１の実施形態で説明した図３のフローチャートと同じであるため、説明を省略する。
【００６９】
本実施形態では、Ｓ３０６とＳ３０７との処理の間にＳ３０８乃至Ｓ３１３の処理が追加される。即ち、上記第１及び第２の実施形態の基準に基づく置き換え処理終了後に、ネイティブコード生成前に、ポインタアクセス命令特定部１１９による対象箇所特定と、外部アクセス変数置換部１２０及び外部アクセス処理置換部１１１による置き換え処理を行う。
【００７０】
Ｓ３０８において、ポインタアクセス命令特定部１１９は、ポインタによるアクセス命令の検索処理を行い、ポインタ変数の設定箇所、及び、ポインタ変数を使用したアクセス（ポインタ指示領域へのアクセス）箇所を検索する。続いて、Ｓ３０９において、ポインタアクセス命令特定部１１９は、ポインタ変数設定箇所が検出されたか否かを判定する。ポインタ変数設定箇所が検出された場合は、Ｓ３１０に進み、そうでなければＳ３１１に進む。Ｓ３１１において、ポインタアクセス命令特定部１１９は、ポインタ指示領域へのアクセスが検出されたか否かを判定する。ここで、ポインタ指示領域へのアクセスが検出された場合は、Ｓ３１２へ進み、そうでなければＳ３１３に進む。
【００７１】
Ｓ３１０において、外部アクセス変数置換部１２０は、外部アクセス変数の置き換え処理を実行し、Ｓ３１３に進む。一方、Ｓ３１２において、外部アクセス処理置換部１１１は、外部アクセス処理の置き換え処理を実行し、Ｓ３１３に進む。Ｓ３１３において、前処理部１０２は、ターゲットソースコードの全域についての処理が終了したか否かを判定し、終了したと判定すると処理を終了する。
【００７２】
なお、上述のポインタアクセスに対する処理は、ポインタ変数への設定領域が通常の変数領域の場合も同様に対応する。この場合、ポインタ変数への設定領域は配線定義情報に接続定義がなされているか否かに関わらず、全領域について上記の置き換えを行う。理由は、ポインタ変数は動的に変更されるため、プログラム実行の結果として配線定義情報で外部接続が定義されている領域へのアクセスが発生する可能性があるからである。この場合、実際の外界モデルとの接続判定は、シミュレータ接続部１１３によって配線定義情報に基づき行われる。
【００７３】
以上説明したように、本実施形態によれば、ターゲットソフトウェアでのポインタアクセスによる外界モデルとの接続にも対応できるようになる。装置組込みソフトウェアを、ホストＰＣ上でホストネイティブコードとして実行する際の、外界モデルとのＩ／Ｆ追加処理を自動で行うことができ、手作業による漏れ、間違いを防ぐとともに、作業の効率化が図れる。また、外部アクセス領域が動的に変化するポインタアクセスにも対応できるため、より広範なプログラムに対応できる。更に、外部アクセス処理をユーザ作成の外部接続定義に基づき制限することができ、効率的なシミュレーションの実行が可能となる。
【００７４】
＜その他の実施形態＞
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（又はＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2015133084.tif 000003
【図２】
2015133084.tif 000004
【図３】
2015133084.tif 000005
【図４】
2015133084.tif 000006
【図５】
2015133084.tif 000007
【図６】
2015133084.tif 000008
【図７】
2015133084.tif 000009
【図８】
2015133084.tif 000010
【図９】
2015133084.tif 000011