(57)【要約】ＰＣシミュレーション環境の実行タイミングを実ＥＣＵに近づける為の遅延処理を追加する機能を備えたシミュレーション装置を提供する事を目的とする。アプリケーションソフトを実行コードに変換して検証し、検証後の実行コードを他の計算機装置に移植するためのシミュレーション装置であって、アプリケーションのソースコードの関数単位で関数開始時、または終了時に時刻調整処理を行い、他の計算機装置における実行タイミングを調整することを特徴とするシミュレーション装置。
2019244472.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションソフトを実行コードに変換して検証し、検証後の実行コードを他の計算機装置に移植するためのシミュレーション装置であって、
アプリケーションのソースコードの関数単位で関数開始時、または終了時に時刻調整処理を行い、前記他の計算機装置における実行タイミングを調整することを特徴とするシミュレーション装置。
【請求項２】
請求項１に記載のシミュレーション装置であって、
前記時刻調整処理を可能とするプログラミング言語として、Ｃ言語、Ｃ＋＋言語、ＪＡＶＡのいずれかを採用することを特徴とするシミュレーション装置。
【請求項３】
請求項１または請求項２に記載のシミュレーション装置であって、
前記シミュレーション装置の方が前記他の計算機装置よりも高速である場合に、前記時刻調整処理として遅延処理を行うことを特徴とするシミュレーション装置。
【請求項４】
請求項１または請求項２に記載のシミュレーション装置であって、
前記シミュレーション装置の方が前記他の計算機装置よりも低速である場合に、前記時刻調整処理として時間短縮処理を行うことを特徴とするシミュレーション装置。
【請求項５】
請求項１または請求項２に記載のシミュレーション装置であって、
前記シミュレーション装置の方が前記他の計算機装置よりも低速である場合に、前記時刻調整処理として前記シミュレーション装置と前記他の計算機装置の速度比率に基づく低倍速での演算を行うことを特徴とするシミュレーション装置。
【請求項６】
請求項１から請求項５のいずれか１項に記載のシミュレーション装置であって、
前記他の計算機装置は、異なる制御周期で動作するマルチタスク方式の計算機装置であり、前記シミュレーション装置は、複数のタスクの夫々について前記時刻調整処理を行い、割り込み処理を再現することを特徴とするシミュレーション装置。
【請求項７】
請求項１から請求項６のいずれか１項に記載のシミュレーション装置であって、
コンパイルオプションの指定の有無により実行タイミング調整処理を着脱する事が出来ることを特徴とするシミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行タイミングを合わせる機能を備えるシミュレーション装置に係り、例えば自動車の電子制御装置（ＥＣＵ：Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）のソフトウェア開発時に開発者が使用するシミュレーション装置に関する。
【背景技術】
【０００２】
ＥＣＵ向けソフトウェアの開発は、最初にパソコンＰＣ上で設計した後、ＰＣ環境（シミュレーション環境）で動作確認を行い、ＰＣ環境で検証したソフトを実ＥＣＵ環境へ移植し、動作確認を行う流れが一般的である。【０００３】
この開発の流れにおいて、パソコンＰＣとＥＣＵのＨＷ（ハードウェア）性能差に起因し、ＰＣ環境と実ＥＣＵ環境でアプリケーションソフトの動作結果に差が出てしまう事が良く発生する。【０００４】
ＰＣ環境と実ＥＣＵ環境でアプリケーションソフトの実行タイミングに差が出る事により、どちらか片方の環境でのみ発生するような不具合が出てくる。【０００５】
ＰＣシミュレータが使用されるソフトウェア開発の上流工程でソフトウェアの品質を高める為には、ＰＣシミュレーション環境での処理タイミングを実ＥＣＵ処理タイミングに近づける事が重要となっている。【０００６】
これらの点に関連して、特許文献１の請求項２には、「シミュレーション開発環境が開発マシンのマイクロプロセッサユニットを実際に使用した時間だけを測定対象にしたクロック割込みのシミュレーションが可能であり、」という記載がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平５−２８２１６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１では、クロック割込みによる処理開始タイミングを合わせることは出来るが、それ以降の処理タイミングについては調整できない為、ＨＷ性能による差が出てしまう。【０００９】
例えば、マルチタスクオペレーティングシステム上で複数アプリを動作させる場合、タスク間で共有する変数の更新タイミングが、シミュレーション環境と実ＥＣＵ環境で差が出てしまう事がある。この結果として、変数を参照するタイミングが変わる事によりアプリケーションソフトの動作に差が出てしまう事がある。【００１０】
そこで、本発明では、ＰＣシミュレーション環境の実行タイミングを実ＥＣＵに近づける為の遅延処理を追加する機能を備えたシミュレーション装置を提供する事を目的とする。
【課題を解決するための手段】
【００１１】
以上のことから本発明においては、「アプリケーションソフトを実行コードに変換して検証し、検証後の実行コードを他の計算機装置に移植するためのシミュレーション装置であって、アプリケーションのソースコードの関数単位で関数開始時、または終了時に時刻調整処理を行い、他の計算機装置における実行タイミングを調整することを特徴とするシミュレーション装置」としたものである。
【発明の効果】
【００１２】
関数呼び出し単位で遅延処理を注入する事により、ＰＣシミュレーション環境での細かい処理単位で実行タイミングを実ＥＣＵへ近づけることができる。
【図面の簡単な説明】
【００１３】
【図１】シミュレーション装置を構成するパソコンＰＣのハードウェア構成並びに主な処理機能について示す図。
【図２】シミュレーション装置を用いて、ＥＣＵ装置に移植するソフトウェアを作成するまでの生成過程を示す図。
【図３】本発明の実施例１に係るアプリ開発第一段階に関わる処理を示す図。
【図４】本発明で使用するＣ言語プログラム例を示す図。
【図５】タイミング調整情報テーブル１２３のテーブル設定例を示す図。
【図６】実ＥＣＵと、タイミング調整が無い場合と、タイミング調整を実施した場合のシミュレータでの実行タイミング例を示す図。
【図７】実施例１でのタイミング調整処理のフローチャートを示す図。
【図８】ＥＣＵの処理速度がパソコンの処理速度よりも早い場合のタイミング例を示す図。
【図９】タスクＡとＢのタスクの優先度の関係を示す図。
【図１０】マルチタスクにおける割り込み処理の場合におけるタイミング調整の考え方を示す図。
【図１１】実ＥＣＵのＣＰＵクロック数とシミュレータが動作するパソコンＰＣのクロック数の比率を示す図。
【図１２】実ＥＣＵで実行した場合の処理タイミングと、ＰＣシミュレータで実行した場合の処理タイミングを示す図。
【発明を実施するための形態】
【００１４】
以下、図面を参照して本発明の実施例について説明する。
【００１５】
なお、以下の説明においては、本発明の実施例の説明に入る前に、シミュレーション装置を構成するパソコンＰＣのハードウェア構成並びに主な処理機能について説明する。またシミュレーション装置を用いて、ＥＣＵ装置に移植するソフトウェアを作成するまでの生成過程について説明する。
【００１６】
まず、シミュレーション装置を構成するパソコンＰＣのハードウェア構成並びに主な処理機能について図１を用いて説明する。
【００１７】
図１のシミュレーション装置は、一般的なパソコンＰＣで構成されており、そのハードウェア構成としては、パソコンＰＣのシステムバス１０１上に、ＣＰＵ１０２、主記憶装置（ＲＡＭ）１０３、ハードディスクドライブ（ＨＤＤ）１０４、キーボード１０５、マウス１０６、ディスプレイ１０７などが接続されている。
【００１８】
また図１のシミュレーション装置を処理機能面で表すと、ハードディスクドライブ１０４内に形成される各種機能或は生成物として表すことができる。具体的には、ハードディスクドライブ１０４内には、ＥＣＵアプリケーションソフトについてのＥＣＵソースコード１１１、実ＥＣＵ向けの実行ファイルを生成する為のクロスコンパイラ１１２、ＰＣシミュレーション用の実行ファイルを生成する為のコンパイラ１１３、クロスコンパイラ１１２を使用してアプリケーションソフト１１１をビルドする事により生成された実ＥＣＵ用実行ファイル１１４、コンパイラ１１３を使用してアプリケーションソフト１１１をビルドする事により生成されたＰＣシミュレータ用実行ファイル１１５が保持され、あるいは形成される。
【００１９】
図１によれば、ＥＣＵアプリケーションソフトのソースコード１１１からＰＣシミュレータ用実行ファイル１１５を形成する処理フローＦ１と、ＥＣＵアプリケーションソフトのソースコード１１１から実ＥＣＵ用実行ファイル１１４を形成する処理フローＦ２が存在するが、これらの処理フローＦ１、Ｆ２は、図２に示し後述する手順で実行されている。
【００２０】
なおＥＣＵソースコード１１１には、実ＥＣＵとＰＣシミュレータ両方で動作するＥＣＵアプリケーションソフト１２１と、ＰＣシミュレータ環境のみで動作する遅延注入用関数１２２と、ＰＣシミュレータ環境のみで動作するタイミング調整情報テーブル１２３を持つ。
【００２１】
またＰＣシミュレータ用コンパイラ１１３には、遅延注入用機能呼び出し処理をＥＣＵソフト内にフッキングする為のコンパイルオプション１３１を持つ。ＥＣＵソースコード１１１をコンパイラ１１３でコンパイルオプション１３１を指定してコンパイルすると、ＰＣシミュレータ用実行ファイル１１５内に、遅延注入用実行コード１４１が含まれる。
【００２２】
なお処理フローＦ１でのコンパイル処理により、ＰＣシミュレータ用実行ファイル１１５内にはＥＣＵアプリケーション実行コード１４２と遅延注入用実行コード１４１が生成記憶され、処理フローＦ２でのコンパイル処理により、実ＥＣＵ用実行ファイル１１４内にはＥＣＵアプリケーション実行コード１４３が生成記憶される。
【００２３】
なお、ここで説明する構成と処理は、一実施例として説明するものである、本発明の技術的範囲をこの実施例に限定して解釈する意図はない事を理解されたい。
【００２４】
図２は、シミュレーション装置を用いて、ＥＣＵに移植するソフトウェアを作成するまでの従来における生成過程を示す図である。
【００２５】
図２の（ａ）は、アプリ開発第一段階を表しており、例えばＥＣＵにおけるブレーキ操作についてのＥＣＵアプリケーションソフト１２１が、ＰＣシミュレータ用コンパイラ１１３により変換されて、ＰＣシミュレータ用実行ファイル１１５内にＥＣＵアプリケーション実行コード１４２を生成する。この処理の流れが処理フローＦ１で示されている。
【００２６】
またこの段階では、ＥＣＵアプリケーション実行コード１４２を用いた各種のシミュレーションがパソコンＰＣ内で実行され、その結果が適宜ディスプレイ１０７などに表示されている。設計者Ｍは、ディスプレイ１０７に表示されたシミュレーションの結果を受けてマウス１０６、キーボード１０５などの入力手段を用いてＥＣＵアプリケーションソフト１２１を適宜改変し、最終的にアプリケーションソフト１２１Ａを得る。また最終的にＥＣＵアプリケーション実行ファイルコード１４２Ａ（図示せず）を得る。
【００２７】
図２の（ｂ）は、アプリ開発第二段階を表しており、アプリ開発第一段階で最終的に生成したＥＣＵアプリケーションソフト１２１Ａを、実ＥＣＵ用クロスコンパイラ１１２により変換して、実ＥＣＵ用実行ファイル１１４内にＥＣＵアプリケーション実行コード１４３を生成する。この処理の流れが処理フローＦ２で示されている。
【００２８】
図２の（ｃ）は、ＥＣＵ確認段階を表しており、アプリ開発第二段階において最終的に得られたＥＣＵアプリケーション実行コード１４３をＥＣＵに移植し、実機による各種の検査などを実行する。
【００２９】
図２に示す上記の手順は、シミュレーション装置を用いて、ＥＣＵに移植するソフトウェアを作成するまでの従来における生成過程を示しているが、この場合の問題点がシミュレーション装置を構成する第１の計算機であるパソコンＰＣと、ＥＣＵを構成する第２の計算機との間のＨＷ性能差（ハードウェア性能差）に起因し、パソコンＰＣ環境とＥＣＵ環境でアプリケーションソフトの動作結果に差が出てしまうという事であった。
【００３０】
なお第１の計算機と、第２の計算機との間のＨＷ性能差として、以下の例ではクロック周波数の差を例にとり説明するものとする。なお実施例１ではＥＣＵのクロック周波数ｆｅが１０００Ｈｚ、パソコンＰＣのクロック周波数ｆｐが３０００Ｈｚであり、パソコンＰＣの方がＥＣＵよりも高性能な事例を示している。また実施例２ではＥＣＵの方がパソコンＰＣよりも高性能な事例を示している。
【実施例１】
【００３１】
本発明の実施例１は、図２の（ａ）アプリ開発第一段階に関わる処理を改善したものである。図３は、本発明の実施例１に係るアプリ開発第一段階に関わる処理を示している。【００３２】
図３のアプリ開発第一段階では、図２の（ａ）アプリ開発第一段階にさらに以下の機能や処理が追加されている。これらは、ＥＣＵソースコード１１１に追加された遅延注入用関数１２２、タイミング調整情報テーブル１２３、ＰＣシミュレータ用コンパイラ１１３に追加された関数結合オプション１３１、ＰＣシミュレータ用実行ファイル１１５に追加された遅延注入用実行コード１４１である。【００３３】
なお図３の構成によれば、コンパイルオプションの指定の有無により実行タイミング調整処理を着脱する構成のものとする事が出来る。【００３４】
これらの追加された機能は、要するに最終的に形成されるプログラム（ＰＣシミュレータ用実行ファイル１１５に生成されたＥＣＵアプリケーション実行コード１４２）中に、「予め定めたタイミングに予め定めた遅延時間を設定する」ものであり、このため本発明の計算機におけるプログラミング言語はＣ言語、Ｃ＋＋言語、ＪＡＶＡ（登録商標）を採用するのがよい。なお、これらの言語は以下単にＣ言語と略称する。【００３５】
図４は、本発明で使用するＣ言語プログラム例を示す図である。Ｃ言語プログラムでは、図４に例示するようにＭａｉｎ関数の中でｆｕｎｃ１関数を呼び出し、ｆｕｎｃ１関数終了後にＭａｉｎ関数の残りを実行する単純なプログラムである。なお、Ｍａｉｎ関数の中では、複数のｆｕｎｃ関数を呼び出して処理を行わせることができる。なおＭａｉｎ関数を親関数、ｆｕｎｃ関数を子関数と呼ぶことがある。【００３６】
図１のＥＣＵソースコード１１１に追加された遅延注入用関数１２２は、Ｃ言語のｆｕｎｃ関数のうち、「予め定めたタイミングに予め定めた遅延時間を設定する」機能を果たすための関数であり、プログラムの先頭位置に遅延時間を設定する目的で使用するのがｐｒｏｌｏｇｕｅ関数であり、プログラムの後尾に遅延時間を設定する目的で使用するのがｅｐｉｌｏｇｕｅ関数である。【００３７】
なお、ＥＣＵは車両に組み込まれて使用される、いわゆる制御用計算機である。このため例えばシングルタスクのＥＣＵは１０（ｍｓ）周期で起動され、起動の都度Ｍａｉｎ関数に記述された一連の処理をこの期間内で余裕をもって処理完了するように運用される。従って、シミュレーション装置であるパソコンＰＣも同様に制御用計算機として取り扱うことを前提として、構成運用されている。なおマルチタスクのＥＣＵの場合には、例えば５（ｍｓ）周期で起動される別体系の制御周期を有し、適宜の優先順位で運用されるものとされる。【００３８】
図５には、図１で規定したタイミング調整情報テーブル１２３の本実施例でのテーブル設定例を記している。ここでは、Ｍａｉｎ関数、ｆｕｎｃ関数、Ｄｅｆａｕｌｔについて、遅延時間設定位置の区別、呼び出し元関数名、遅延係数（遅延時間）、備考としての要件などを記述している。【００３９】
例えばＤｅｆａｕｌｔについての行２０１では、本例でのデフォルト設定として遅延係数３を設定している。Ｄｅｆａｕｌｔでは、特記事項が無い場合は、実ＥＣＵとＰＣのＣＰＵクロック数比から遅延係数を設定する。【００４０】
Ｍａｉｎ関数についての行２０２では、Ｍａｉｎ関数のＰｒｏｌｏｇｕｅ関数（以下この関数による処理をプロローグ処理という）で実行する遅延係数として０を設定している。なおＭａｉｎ関数の実行開始時はタイミング調整不要なことが遅延係数として０を設定する理由である。【００４１】
ｆｕｎｃ関数についての行２０３では、ｆｕｎｃ１関数のＰｒｏｌｏｇｕｅ関数におけるタイミング調整用係数として５を設定している。例外的にタイミング調整時間をデフォルト値以外の設定を行う必要がある場合にこのような個別設定を行っている。なおこの例では、Ｍａｉｎ関数の開始時処理に外部ＲＡＭとのアクセスが多いので、ｆｕｎｃ関数についての遅延係数を高めるものとしている。【００４２】
なおＤｅｆａｕｌｔとは、Ｍａｉｎ関数あるいはｆｕｎｃ関数などで定義していない部分について標準的に設定を行う事を意味している。例えばＭａｉｎ関数についての行２０２では、Ｍａｉｎ関数のＰｒｏｌｏｇｕｅ関数で実行する遅延係数として０を設定しているが、Ｅｐｉｌｏｇｕｅ関数（以下この関数による処理をエピローグ処理という）については設定していない。この場合に設定がされていないということは、Ｄｅｆａｕｌｔでの設定に従い遅延係数として３を設定するものである。【００４３】
図６は、実ＥＣＵでの実行タイミングと、タイミング調整が無い場合のＰＣシミュレータでの実行タイミングと、タイミング調整を実施した場合のＰＣシミュレータでの実行タイミング例を記している。【００４４】
まず図６左側のＥＣＵでの実行タイミングについて説明する。先にも述べたように、このタイミング処理は、ＥＣＵの１０（ｍｓ）の制御周期、かつ１０００Ｈｚのクロック周波数の下で実行された場合のタイミングである。ここでは時刻ｔ０において、１０（ｍｓ）の制御周期が開始されたものとする。【００４５】
この例では、プログラムはＭａｉｎ関数の前段処理にΔｔＥ１時間、ｆｕｎｃ１関数の処理にΔｔＥ２時間、Ｍａｉｎ関数の後段処理にΔｔＥ３時間を要し、かつこの合計時間はＥＣＵの１０（ｍｓ）の制御周期内で十分な余裕をもって完了される。なお、Ｍａｉｎ関数の前段処理完了時刻をｔ１、ｆｕｎｃ１関数の処理完了時刻をｔ２、Ｍａｉｎ関数の後段処理完了時刻をｔ３として表記している。【００４６】
これに対し、パソコンＰＣを用いたシミュレーション装置の内部では、ＥＣＵでの実行タイミングと同じタイミングを実現できるものであることが望まれる。【００４７】
この点に関し、図２で示した時間調整を実行しない従来方式（図６中央）によれば、実行開始時点は、実ＥＣＵもＰＣシミュレーション環境でも同じ時刻ｔ０であるとしているが、パソコンＰＣのクロック周波数が３０００Ｈｚであることもあり、短時間で一連の処理を完了してしまう。具体的には、Ｍａｉｎ関数の前段処理にΔｔ１時間、ｆｕｎｃ１関数の処理にΔｔ２時間、Ｍａｉｎ関数の後段処理にΔｔ３時間を要しているが、これらの時間は実ＥＣＵの各時間よりも十分に早いものであるために、実行タイミングが実ＥＣＵのそれとはまったく異なるものになっている。【００４８】
このことから本発明では、関数の前後に適宜遅延時間を設定することで、図６左側のＥＣＵでの実行タイミングに近いものを実現する。なお図６右側のタイミング調整有の事例において、他の場合と同様に制御周期の開始時点はｔ０である。【００４９】
このとき、プログラムはＭａｉｎ関数から開始する。最初に図５のタイミング調整情報テーブル１２３を参照して、行２０２のＭａｉｎ関数のプロローグ処理を実行するが、図５のタイミング調整テーブル１２３では、ｍａｉｎ関数のプロローグ処理は遅延時間が０となっているので、遅滞なくＭａｉｎ関数の処理に入る。ｍａｉｎ関数を実行していくと、Δｔ１時間後にｆｕｎｃ１関数が呼ばれる。【００５０】
プログラムは次に、図５のタイミング調整情報テーブル１２３を参照して、行２０３のｆｕｎｃ１関数のプロローグ処理を実行するが、ここでは遅延係数として５が設定されているので、遅延時間Δｔ５の経過後にｆｕｎｃ１関数の処理を実行する。これによりｆｕｎｃ１関数の処理開始時刻を、ＥＣＵにおけるｆｕｎｃ１関数の処理開始時刻ｔ１に合わせることができる。【００５１】
ｆｕｎｃ１関数の実行時間は、タイミング調整なしのケースと同じΔｔ２である。なおＤｅｆａｕｌｔ関数での設定により、ｆｕｎｃ１関数のエピローグ調整処理として遅延係数３が設定されており、遅延係数３で定まる遅延時間Δｔ６を設定することにより、ｍａｉｎ関数の後段処理開始時刻を、ＥＣＵにおけるｍａｉｎ関数の処理開始時刻ｔ２に合わせることができる。【００５２】
同様にＤｅｆａｕｌｔ関数での設定により、ｍａｉｎ関数のエピローグ調整処理として遅延係数３が設定されており、遅延係数３で定まる遅延時間Δｔ７を設定することにより、ｍａｉｎ関数の後段処理終了時刻を、ＥＣＵにおけるｍａｉｎ関数の後段処理終了時刻ｔ３に合わせることができる。【００５３】
なお図５のタイミング調整テーブル１２３では、ｆｕｎｃ１関数の遅延係数は５である。これは実ＥＣＵの方が、５倍処理時間がかかっている事を示しており、ｆｕｎｃ１プロローグでのタイミング調整時間は、ｔ×（５−１）の時間になることを意味している。【００５４】
またｆｕｎｃ１関数のプロローグ処理で時間を待った（無限ループ処理などで時間を経過させる）後でｆｕｎｃ１プロローグ処理を終了し、ｆｕｎｃ１の実処理を開始する。プロローグ処理でのタイミング調整により、ｆｕｎｃ１関数の実処理タイミングを実ＥＣＵでの処理タイミングに近づけることが出来る。【００５５】
ｆｕｎｃ１プロローグ終了からｆｕｎｃ１エピローグ開始までにかかった時間をΔｔ２とする。図５のタイミング調整テーブル１２３を見ると、ｆｕｎｃ１関数のエピローグ処理の遅延係数は３となっている。実ＥＣＵの方が、３倍時間がかかるであろうという事から設定されており、ｆｕｎｃ１エピローグでのタイミング調整時間はΔｔ２×（３−１）の時間になる。【００５６】
ｆｕｎｃ１のエピローグ処理で２×Δｔ２時間を待った後でｆｕｎｃ１エピローグ処理を終了し、Ｍａｉｎ関数のｆｕｎｃ１関数実行後の処理を開始する。ｆｕｎｃ１エピローグ処理でのタイミング調整により、Ｍａｉｎ関数内、ｆｕｎｃ１呼び出し終了後の実施タイミングを実ＥＣＵでの処理タイミングに近づけることが出来る。【００５７】
Ｍａｉｎ関数の残りを実行した後でｍａｉｎ関数のエピローグ処理が呼ばれる。【００５８】
図３のタイミング調整テーブル１２３では、ｍａｉｎ関数エピローグの遅延係数はデフォルトの３である。ｆｕｎｃ１エピローグ処理実施後からｍａｉｎエピローグ開始までの時間をΔｔ６とする。実ＥＣＵの方が、３倍処理時間がかかっている事を示しており、Ｍａｉｎエピローグでのタイミング調整時間は、Δｔ６×（３−１）の時間になる。Ｍａｉｎのエピローグ処理で２×ｕ時間を待った後（処理ステップＳ３０９）でＭａｉｎ関数を終了する。【００５９】
Ｍａｉｎエピローグ処理でのタイミング調整により、Ｍａｉｎ関数終了のタイミングを実ＥＣＵでの処理タイミングに近づけることが出来る。【００６０】
実施例１に係る本例でのタイミング調整処理のフローチャートを図７に記す。図７のフローによれば、最初の処理ステップＳ４０１においてプロローグ関数、もしくはエピローグ関数開始時点で現在時間を取得する。次に処理ステップＳ４０２において前回のタイミング調整処理実行後時間からの経過時間を計算する。処理ステップＳ４０２で計算した経過時間と、図５に記載のタイミング調整テーブルから取得した遅延係数を元に、処理ステップＳ４０３においてタイミング調整時間を計算する。なお遅延係数については、実ＥＣＵとＰＣのＣＰＵ性能比などから求める案など、さまざまな方法がある。処理ステップＳ４０４では、処理ステップＳ４０３で求めたタイミング調整時間分のタイミング調整処理を実行する。最後に処理ステップＳ４０５では、タイミング調整実行後の時刻を取得し、前回のタイミング調整処理実行後時間として保存する。【００６１】
なお、各関数での遅延時間の設定に当たり、これを絶対時刻（例えば制御周期の開始時刻）からの時間で設定するか、前回イベント（例えば各関数の開始、終了時刻）の発生時刻からの時間で設定するかは適宜採用可能である。【００６２】
このように本発明では、ＰＣシミュレーション環境においてのみ動作する遅延処理を実装、追加できる仕組みを実現する事により、ＰＣシミュレーション環境での処理タイミングを実ＥＣＵに使づけることができる。【００６３】
また遅延処理を入れる場所は「関数の開始時に呼び出されるプロローグ処理」または「関数の終了時に呼び出されるエピローグ処理」とする。どちらか一方で遅延処理を実装する事も出来るし、両方で遅延処理を入れることも可能である。【００６４】
さらに遅延注入関数の呼び出し処理はコンパイルオプションの追加で実施することができる。ＧＣＣの”−ｆｉｎｓｔｒｕｍｅｎｔ−ｆｕｎｃｔｉｏｎｓ”オプションのような、プロローグとエピローグ時に動作する関数を指定できる機能を使用するのがよい。ＰＣシミュレーション環境でのテスト用にアプリケーションソフト内でテストコードを呼び出す処理を追加する事は不要である。【００６５】
以上述べたように本発明は、アプリケーションソフトを実行コードに変換して検証し、検証後の実行コードを他の計算機装置に移植するためのシミュレーション装置であって、アプリケーションのソースコードの関数単位で関数開始時、または終了時に時刻調整処理を行い、前記他の計算機装置における実行タイミングを調整することを特徴とするシミュレーション装置としたものである。
【実施例２】
【００６６】
実施例１においては、ＥＣＵの処理速度がパソコンの処理速度よりも遅いことを前提にして、各関数の前或は後に遅延時間を設定することで、ＥＣＵとの間のタイミングを合致させたものである。つまり時刻調整処理として遅延処理を行ったものである。【００６７】
これに対しＥＣＵの処理速度がパソコンの処理速度よりも早い場合がある。図８はＥＣＵの処理速度がパソコンの処理速度よりも早い場合のタイミング例を示す図である。この場合における対応を示したものであり、例えばＭａｉｎ関数の処理にＥＣＵがΔｔＥ１かかるところ、パソコンではそれ以上の時間を要してしまうことが想定される。この場合には、パソコンでのＭａｉｎ関数の処理に要した時間に適宜の係数を乗じてＥＣＵにおける処理時間ΔｔＥ１にすべく、調整するのがよい。これは時刻調整処理として時間短縮化処理を行ったものである。
【実施例３】
【００６８】
実施例３もまた、ＥＣＵの処理速度がパソコンＰＣの処理速度よりも早い場合の対応策を想定している。【００６９】
実施例３について、図１１、及び図１２を使用し、シミュレーション速度を実ＥＣＵ環境よりも下げて実行する場合の例を説明する。実ＥＣＵとシミュレータが動作するパソコンＰＣを比較し、実ＥＣＵの方が高速な場合のタイミング調整機能を適用した場合の実施例を説明する。【００７０】
図４に記したｍａｉｎ関数を周期的に実行する実施例で説明する。実ＥＣＵのＣＰＵクロック数とシミュレータが動作するパソコンＰＣのクロック数の比率を図１１に記す。本例は、実ＥＣＵの方がパソコンＰＣよりも２倍性能がよい環境を例にしている。【００７１】
図１２で、実ＥＣＵで実行した場合の処理タイミングと、ＰＣシミュレータで実行した場合の処理タイミングを記す。【００７２】
周期処理タイマイベント６０１、６０２が発生し、ｍａｉｎ関数を開始することで周期処理を開始する。Ｍａｉｎ関数の中からｆｕｎｃ１関数がコールされる（６０３、６０４）。Ｆｕｎｃ１関数実行後にｍａｉｎ関数へ戻り、ｍａｉｎ関数終了時点で周期処理が完了する（６０５、６０６）。次の周期処理タイマイベント発行（６０７、６０８）を受け、次回の周期処理がｍａｉｎ関数から開始されるが、本実施例の場合、ＰＣシミュレータ環境では、ＣＰＵ性能が低いことに起因して、前回分の周期処理が終わっていないことが、６０６、６０８のタイミングが入れ替わっていることから確認できる。【００７３】
ＰＣシミュレータ環境では、等倍速で実行した場合に、ＥＣＵと同じタイミングで処理することが出来ないため、ＣＰＵ比率を元に、１／２倍速することによりＰＣシミュレーション環境でのタイマイベントの発生間隔を２倍にすることにより、ＰＣシミュレーション環境での処理タイミングを実ＥＣＵに近い形で実行する事が可能となる。【００７４】
図１２の右側に、ＰＣシミュレーション環境で１／２倍速実行したときの処理タイミングを記す。タイマイベントの発生（６０９）、ｆｕｎｃ１関数の実行開始（６１０）、ｍａｉｎ関数の終了（６１１）は、ＰＣシミュレーション環境での等倍速再生時の実行タイミングと変わらないが、次の周期処理タイマイベント発生タイミング（６１２）が等倍速再生時よりも２倍後になることにより、ＰＣシミュレーション環境での周期処理を周期内に収めることが出来ている。なお、関数のＰＣでの実行時間がＥＣＵでの実行時間の２倍より、短い場合の、プロローグ・エピローグでの補正方法は、実施例１と同様である。【００７５】
タイマイベントを発生させる周期の変更は、プログラム初期化処理などで実行される関数のプロローグ処理またはエピローグ処理において実施する。【００７６】
本実施例のバリエーションとして、ＰＣでの実時間でなく、仮想的な時刻を備えて、プロローグ・エピローグにおいて、仮想的な時刻をＥＣＵにおいてそこに到達する時刻に補正する方式も可能である。この方式では、待ちを挿入する代わりに仮想的な時刻の補正行うため、シミュレーション時間を削減することが出来る。
【実施例４】
【００７７】
実施例１から実施例３においては、１つのタスクのみが一つのＣＰＵ上で動作するプログラム（いわゆるシングルタスク）に対し、タイミング調整機能を適用した場合の実施例を説明した。これに対し、マルチタスク方式のＥＣＵでは、複数のタスクＡ、Ｂが一つのＣＰＵ上で動作するプログラムに対して、タイミング調整機能を適用する必要がある。【００７８】
係るマルチタスクの方式では、一方のタスク実行中に優先度の高い他のタスクの処理要求が入り、前者を中断して後者の処理を行い、その処理終了後に再度前者のタスクの残余部分を実行するといった切替処理が発生する。【００７９】
図９は、タスクＡとＢのタスクの優先度の関係を示している。タスクＡは例えば１０（ｍｓ）の制御周期で起動され、タスクＢは例えば５（ｍｓ）の制御周期で起動されるものであり、タスクＢの優先度が高くされた事例を示している。【００８０】
図１０は、マルチタスクにおける割り込み処理の場合におけるタイミング調整の考え方を示している。図１０において左側は、ＥＣＵでの実処理を示しており、タスクＡとタスクＢは異なる制御周期の下で実行されている。ここではタスクＡの周期処理タイマ起動時刻がｔ０Ａ１、ｔ０Ａ２で、またタスクＢの周期処理タイマ起動時刻がｔ０Ｂで示されている。またこの例では時刻ｔ０Ａ１、ｔ０Ａ２間がタスクＡの制御周期であり、タスクＢの割り込む処理により、タスクＡの再開時刻がｔ１、タスクＡの終了時刻がｔ２になったことを表している。【００８１】
この図１０の例では、タスクＡが時刻ｔ０Ａ１のタイマイベントを契機に処理を開始する。その後タスクＡの処理実行中の時刻ｔ０ＢにタスクＢのタイマイベントが発行された。このとき、優先度の関係からタスクＡの実行を中断し、タスクＢの処理を開始する事となる。【００８２】
本例のイベント発生タイミングによれば、実ＥＣＵではタスクＡ実行処理がタスクＢ開始までに終了せず、タスクＢへの切替が発生している。タスクＢの処理終了後に、タスクＡの実行が再開されている。【００８３】
一方、図１０中央の従来における処理によれば、ＥＣＵよりも高速なＰＣシミュレータ環境であることから、タスクＡの実行がタスクＢ開始までに終了してしまうため、タスク切替は発生していない。つまり従来方式では、マルチタスクにおけるタスク切り替えを再現することができない。この結果として、ＰＣシミュレータ環境では１周期で実行でき、正しく動作していても、実ＥＣＵ環境に移植して動作確認をした場合に、１周期の期間内に処理が完了しないという問題などもよく発生する。【００８４】
ＰＣシミュレーション環境で関数のプロローグ、エピローグ処理でタイミング調整を入れた場合の本発明の動作を図１０の右側に記述している。この記述例によれば、適宜の遅延時間を加味することで、タスクＡの前段処理部分を形成することが可能であり、同様にタスクＢ、  タスクＡの後段処理部分を形成することができ、割り込み処理を実現することができる。【００８５】
このように、実施例１と同様に関数単位で細かくタイミング調整処理が入る為、実ＥＣＵとＰＣシミュレータで同じタイミングでタスクＡ及びタスクＢのタイマイベントが発生した場合に、ＰＣシミュレータ上でもタスクの切替が発生する事となる。つまり、異なる制御周期で動作するマルチタスク方式の場合にシミュレーション装置は、複数のタスクの夫々について時刻調整処理を行い、割り込み処理を再現することができる。【００８６】
なおマルチタスク方式では、タイミングを調整する為に記憶する実行時間はタスクごとに管理し、タスクが切り替わった後のタイミング調整処理でリソースを奪われたタスクの実行時間のカウントアップを止める処理を実行するのがよい。【００８７】
本例ではタスクＢの周期処理開始時のプロローグ関数でタスクＡの実行を止めることになる。タスクＢ開始時のプロローグ関数でタスクＡの処理時間カウントを止め、タスクＢの処理終了時のエピローグ関数内でタスクＡの実行時間カウントアップを再開する。その後タイミング調整タイミングが来た時に、タスクＢにリソースを奪われる前と復帰後の実行時間からタイミング調整時間を計算して、タイミング調整を行う。
【符号の説明】
【００８８】
１０１：システムバス
１０２：ＣＰＵ
１０３：主記憶装置（ＲＡＭ）
１０４：ハードディスクドライブ（ＨＤＤ）
１０５：キーボード
１０６：マウス
１０７：ディスプレイ
１１１：ＥＣＵソースコード
１１２：クロスコンパイラ
１１３：コンパイラ
１１４：実ＥＣＵ用実行ファイル
１１５：ＰＣシミュレータ用実行ファイル
１２１：ＥＣＵアプリケーションソフト
１２２：遅延注入用関数
１２３：タイミング調整情報テーブル
１３１：コンパイルオプション
１４１：遅延注入用実行コード
１４２、１４３：ＥＣＵアプリケーション実行コード
Ｆ１、Ｆ２：処理フロー低速
【図１】
2019244472.tif 000003
【図２】
2019244472.tif 000004
【図３】
2019244472.tif 000005
【図４】
2019244472.tif 000006
【図５】
2019244472.tif 000007
【図６】
2019244472.tif 000008
【図７】
2019244472.tif 000009
【図８】
2019244472.tif 000010
【図９】
2019244472.tif 000011
【図１０】
2019244472.tif 000012
【図１１】
2019244472.tif 000013
【図１２】
2019244472.tif 000014
【国際調査報告】
2019244472.tif 000015
2019244472.tif 000016