(57)【要約】【課題】大規模なソフトウェアであっても処理遅延を抑制でき、周期処理を効率的に行える自動車用電子制御装置及びその検証方法を提供する。【解決手段】書き換え対象モジュールをＲＡＭのプログラムとして設定し、該当部分のみＲＡＭ上から動作させ、検証ツール３００側でこの状態を再現することにより、変更制御内容の検証を行う。マルチコアマイクロコンピュータ１１０を用いて、周期処理中に、モジュールを分割して複数のメモリ上へ分散して展開し、分割したモジュールを１つのメモリに転送して合成する。これによって、モジュール受信処理とプログラム実行処理を並列して行うことができ、効率化と高速化を図れる。また、ソフトウェアの大規模化によって引き起こされる処理遅延を低減できる。【選択図】図１４
2015179465.tif 000002
【特許請求の範囲】
【請求項１】
複数のコアを有するプロセッサを備え、プログラム領域の一部のデータが、各コアに対応する書き換え可能な複数のメモリにそれぞれモジュール毎に格納され、格納対象となるプログラムまたは制御データが、モジュール毎に本来のプログラム領域と切り替えられて機能検証が行われる自動車用電子制御装置であって、
周期処理中に、前記モジュールを分割して前記複数のメモリ上へ分散して展開し、分割したモジュールを１つのメモリに転送して合成する、ことを特徴とする自動車用電子制御装置。
【請求項２】
前記周期処理中に、モジュール受信処理とプログラム実行処理を並列して行う、ことを特徴とする、請求項１に記載の自動車用電子制御装置。
【請求項３】
複数のコアを有するプロセッサを備え、プログラム領域の一部のデータが、各コアに対応する書き換え可能な複数のメモリにそれぞれモジュール毎に格納され、格納対象となるプログラムまたは制御データが、モジュール毎に本来のプログラム領域と切り替えられて機能検証が行われる自動車用電子制御装置の検証方法であって、
周期処理中に、前記モジュールを分割して前記複数のメモリ上へ分散して展開し、
分割したモジュールを１つのメモリに転送して合成する、ことを特徴とする自動車用電子制御装置の検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、書き換え可能なメモリに格納されたプログラムまたは制御データが、本来のプログラム領域と切り替えられて機能検証が行われる自動車用電子制御装置及びその検証方法に関する。
【背景技術】
【０００２】
自動車に搭載される電子制御装置では、各種機能を分割したモジュール単位で制御プログラムが開発されている。制御プログラムの検証段階においては、例えば、新規な制御を追加する、制御対象のアクチュエータが変更になるなど、電子制御装置に格納されているモジュールの一部を変更する場合がある。この場合、例えば特許文献１では、該当のモジュールを実際に制御ソフトに組み込んだ検証用ソフトウェアを作成して検証している。
【０００３】
ところで、近年は、制御プログラムなどの組み込みソフトウェアの大規模化が進み、これに伴ってモジュール数が増加している。このようにソフトウェアが肥大化する中で、一度に多くのモジュールを検証するケースも多い。そこで、特許文献２には、より効率的に検証を行うために、ソフトウェアの設計作業なしに、制御プログラムの切り替えを行うシステムが開示されている。この特許文献２の技術では、ソフトウェアの初期化後の周期処理で検証を行うモジュールを外部のツールから通信手段を用いてＥＣＵへ転送する。転送されたモジュールは、ＥＣＵ内のメモリに展開され、該ＥＣＵ内で制御の切り替えによって実行される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−１７３６３３号公報
【特許文献２】特開２０１２−１０８５７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１のような検証用ソフトの組み込み作業は手間がかかるため、複数箇所の同時変更の場合や、小変更を繰り返しながら検証する場合などでは作業効率が悪い場合があった。このため、ソフトウェアの大規模化が進むと検証に時間を要する。
一方、特許文献２の技術でも、外部ツールからＥＣＵへモジュールを転送し、展開・実行処理する際に、将来的にソフトウェアが更に大規模化すると処理遅延が懸念される。即ち、転送されたデータを全てメモリに展開し終えてからモジュールの周期処理を開始するため、データ転送量が多い場合に、処理遅延が発生する可能性があった。
【０００６】
本発明は上記のような事情に鑑みてなされたもので、その目的とするところは、大規模なソフトウェアであっても処理遅延を抑制でき、周期処理を効率的に行える自動車用電子制御装置及びその検証方法を提供することにある。
【課題を解決するための手段】
【０００７】
本発明の自動車用電子制御装置及びその検証方法は、複数のコアを有するプロセッサを備え、プログラム領域の一部のデータが、各コアに対応する書き換え可能な複数のメモリにそれぞれモジュール毎に格納され、格納対象となるプログラムまたは制御データが、モジュール毎に本来のプログラム領域と切り替えられて機能検証が行われる自動車用電子制御装置であって、周期処理中に、前記モジュールを分割して前記複数のメモリ上へ分散して展開し、分割したモジュールを１つのメモリに転送して合成する、ことを特徴とする。
【発明の効果】
【０００８】
本発明によれば、周期処理内でデータ転送とプログラム実行処理を並列して行うことができ、効率化と高速化を図れる。また、ソフトウェアの大規模化によって引き起こされる処理遅延を低減できる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施形態に係る自動車用電子制御装置を検証する際のシステム構成例を示す図である。
【図２】図１に示した電子制御装置の一例を示す内部構造図である。
【図３】図１に示したツールの一例を示す内部構造図である。
【図４】制御プログラムのモジュールに組み込まれた処理の説明図である。
【図５】電子制御装置の機能を検証する手順の概要図である。
【図６】ツールにおける初期化処理の一例を示すフローチャートである。
【図７】電子制御装置における初期化処理の一例を示すフローチャートである。
【図８】電子制御装置のＲＡＭ（Random Access Memory）に展開される変更モジュールの一例の説明図である。
【図９】電子制御装置におけるモジュール実行処理の一例を示すフローチャートである。
【図１０】電子制御装置のＲＯＭ（Read Only Memory）及びＲＡＭに格納されるモジュール及び変更モジュールの具体的事例の説明図である。
【図１１】切替要求がない場合のモジュール実行過程の説明図である。
【図１２】切替要求がある場合のモジュール実行過程の説明図である。
【図１３】制御プログラムのモジュールに組み込まれた処理の他の例を示し、（Ａ）は組み込み処理の概要図、（Ｂ）は１回目のコール時の動作の説明図、（Ｃ）は２回目以降のコール時の動作の説明図である。
【図１４】図２におけるプロセッサの構成例を示すブロック図である。
【図１５】図１４において、ＲＡＭとＲＯＭに展開される制御プログラムを分散させて配置した状態を示す模式図である。
【図１６】モジュールの転送について示す模式図である。
【図１７】図１６に続くモジュールの転送について示す模式図である。
【図１８】図１７におけるモジュールのメモリイメージを示す模式図である。
【図１９】モジュールの切替動作を示す模式図である。
【図２０】モジュールの削除動作を示す模式図である。
【図２１】モジュールの応答について説明する図である。
【図２２】ＣＡＮ  ＩＤの分割について説明する図である。
【図２３】分割モジュールの定義と、ＣＡＮデータ受信からＲＡＭへの展開までの流れについて説明する図である。
【図２４】ＥＣＵでの処理時間について説明する図である。
【図２５】同一ネットワークケーブル上にお互いが存在する場合の、ユーザーとツールの通信開始とインターフェースについて説明するシステム構成図である。
【図２６】異なる速度領域帯にお互いが存在する場合の、ユーザーとツールの通信開始とインターフェースについて説明するシステム構成図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態について図面を参照して説明する。
図１は、本発明の実施形態に係る自動車用電子制御装置（ＥＣＵ：Electronic Control Unit）を検証する際のシステム構成例を示している。
検証対象となるＥＣＵ１００は、ＣＡＮ（Controller Area Network）、シリアル通信、ＦｌｅｘＲａｙ（登録商標）などのネットワークケーブル２００を介して、作業者がＥＣＵ１００の検証作業を行う、ツール３００（検証装置）に着脱可能に接続される。
ＥＣＵ１００は、自動車に搭載された各種機器、例えば燃料噴射弁、変速機、電動ブレーキシステム、ＡＢＳ（Antilock Brake System）、可変バルブタイミング機構、及びブラシレスモータなどを制御する電子機器であって、マイクロコンピュータを内蔵している。
【００１１】
ＥＣＵ１００は、具体的には、図２に示すように、ＣＰＵ（Central Processing Unit）などのプロセッサ１１０と、ネットワークに接続するための通信回路１２０と、不揮発性メモリの一例としてのＲＯＭ１３０と、揮発性メモリの一例としてのＲＡＭ１４０と、プロセッサ１１０、通信回路１２０、ＲＯＭ１３０及びＲＡＭ１４０を相互に接続するバス１５０と、を有している。ここで、通信回路１２０は、ネットワークケーブル２００を着脱可能に接続するコネクタ（図示せず）を含む。また、ＲＯＭ１３０には、制御対象の車載機器を制御するための制御プログラムとして、各種機能を任意の単位（例えば、関数ごと）で分割したモジュールのすべてが格納されている。制御プログラムをモジュール化すると、一部のモジュールのみを書き換えることで、制御プログラムを変更できるので好都合である。なお、不揮発メモリとして、電気的にデータを消去及び書換可能なフラッシュＲＯＭを使用することもできる。
【００１２】
ツール３００は、作業者がＥＣＵ１００の検証作業を行う電子機器であって、例えばパーソナルコンピュータなどのコンピュータから構成される。具体的には、ツール３００は、図３に示すように、ＣＰＵなどのプロセッサ３１０と、ネットワークに接続するための通信回路３２０と、ハードディスク装置、ＳＳＤ（Solid State Drive）などのストレージ３３０と、作業者へのインターフェースとなる入出力装置３４０と、を有している。ここで、通信回路３２０は、ネットワークケーブル２００を着脱可能に接続するコネクタ（図示せず）を含む。また、入出力装置３４０は、ＬＣＤ（Liquid Crystal Display）などのディスプレイと、キーボードと、マウスなどのポインティングデバイスと、を含む。なお、ストレージ３３０は、例えば、図示しないネットワークに接続されたＮＡＳ（Network Attached Storage）、サーバのストレージなどであってもよい。
【００１３】
ストレージ３３０には、ＥＣＵ１００のＲＯＭ１３０に格納された制御プログラムのうち、少なくとも一部の機能を変更したモジュール（以下「変更モジュール」という）１〜Ｎが格納されている。変更モジュール１〜Ｎは、例えば、制御プログラムを開発するシステムで作成され、図示しないネットワークを介してツール３００のストレージ３３０に格納される。なお、ストレージ３３０には、変更モジュールが少なくとも１つ格納されていればよい。
【００１４】
ＥＣＵ１００において、ＲＯＭ１３０に格納された制御プログラムのモジュールに代えて、任意の変更モジュールを実行可能なように、次のような工夫がなされている。即ち、ＲＯＭ１３０に格納された制御プログラムのモジュールの一例として、図４に示すように、外部、例えばツール３００からの切替要求の有無に応じて、所定の演算を行う演算命令と、変更モジュールのコール命令と、を切り替える処理が組み込まれている。図示のモジュールでは、関数ｆ（）について、切替要求がない場合には、Ｘ＝Ａ＊Ｂ，Ｙ＝Ａ−Ｂという演算を行う一方、切替要求がある場合には、変更モジュールの関数ｆ’（）をコールすることが記述されている。なお、Ａ，Ｂ，Ｘ及びＹは、広域変数である。
【００１５】
図５は、変更モジュールを使用して、ＥＣＵ１００の機能を検証する手順の概要を示している。
ステップＳ１では、作業者が、ネットワークケーブル２００及び電源ケーブル（図示せず）を介して、ツール３００にＥＣＵ１００を接続する。ツール３００にＥＣＵ１００が接続されると、ＥＣＵ１００への電源供給が開始され、例えばブートローダにより、ＲＯＭ１３０に格納された制御プログラムの実行が開始される。
ステップＳ２では、ツール３００を操作する作業者の指示に応答して、ツール３００が、作業者が選択した少なくとも１つの変更モジュールをＥＣＵ１００へ送信する「初期化」を実行する。
【００１６】
ステップＳ３では、ツール３００を操作する作業者の指示に応答して、ツール３００が、ＥＣＵ１００の機能検証を行う。ツール３００は、例えば、ＥＣＵ１００から送信された車両情報、外部から入力された他の情報、作業者により入力された他の情報などを使用して、シミュレーションなどによって車両を代用し、ＥＣＵ１００が所望の機能を実現しているか否かを診断する機能検証を行う。なお、ＥＣＵ１００の機能検証作業においては、ツール３００を操作する作業者は、対話型形式で作業を進めることができる。
【００１７】
ステップＳ４では、ツール３００が、作業者により終了指示が入力されたか否かを介して、ＥＣＵ１００の機能検証が終了したか否かを判定する。そして、ツール３００は、ＥＣＵ１００の機能検証が終了したと判定すれば処理をステップＳ５へと進める一方（Ｙｅｓ）、ＥＣＵ１００の機能検証が終了していないと判定すれば処理をステップＳ２へと戻す（Ｎｏ）。なお、この判定処理は、作業者が行うようにしてもよい。
ステップＳ５では、作業者が、ＥＣＵ１００からネットワークケーブル２００及び電源ケーブルを取り外すことで、ツール３００からＥＣＵ１００を取り外す。なお、ツール３００からＥＣＵ１００を取り外す前に、ツール３００からＥＣＵ１００へとシャットダウン指令を送信し、ＥＣＵ１００を前もって停止させるようにしてもよい。
【００１８】
図６は、ツール３００を操作する作業者が変更モジュールを選択し、例えば、「初期化実行」ボタンを押したことを契機として、ツール３００のプロセッサ３１０が実行する初期化処理の一例を示す。ここで、変更モジュールの選択は、例えばツール３００の入出力装置３４０を用いた対話型形式で行うようにしてもよい。なお、ツール３００のプロセッサ３１０は、変更モジュールを列挙した初期化指令を受けた場合に、初期化処理を実行するようにしてもよい。
【００１９】
ステップＳ１１では、プロセッサ３１０が、作業者により選択された少なくとも１つの変更モジュールをＥＣＵ１００へと送信する。
ステップＳ１２では、プロセッサ３１０が、ＥＣＵ１００から展開完了通知、即ち、ＥＣＵ１００が変更モジュールをＲＡＭ１４０に展開したことを示す通知があったか否かを判定する。そして、プロセッサ３１０は、ＥＣＵ１００から展開完了通知があったと判定すれば処理をステップＳ１３へと進める一方（Ｙｅｓ）、ＥＣＵ１００から展開完了通知がないと判定すれば処理をステップＳ１２へと戻す（Ｎｏ）。要するに、プロセッサ１３０は、ＥＣＵ１００に変更モジュールを送信してからその応答があるまで待機する。
【００２０】
ステップＳ１３では、プロセッサ３１０が、ＥＣＵ１００に切替要求、即ち、ＥＣＵ１００のＲＯＭ１３０に格納されている制御プログラムのモジュールに代えて、変更モジュールを実行すべき旨の要求を送信する。切替要求を受信したＥＣＵ１００は、例えば、フラグを使用して、切替要求があったことを保持する。
なお、ＥＣＵ１００への切替要求の送信は、ツール３００を操作する作業者の指示に応答して行うようにしてもよい。このようにすれば、ＥＣＵ１００に変更モジュールを送信した後、任意のタイミングでモジュールを切り替えることができる。
【００２１】
図７は、ＥＣＵ１００が変更モジュールを受信したことを契機として、ＥＣＵ１００のプロセッサ１１０が実行する初期化処理の一例を示す。
ステップＳ２１では、プロセッサ１１０が、ツール３００から送信されてきたすべての変更モジュールをＲＡＭ１４０に展開する。このとき、ＲＡＭ１４０の各変更モジュール、例えば、変更モジュール１には、図８に示すように、変更モジュール１内でのみ使用（参照）する変数Ａ，Ｂ，Ｘ及びＹ（専用変数）を格納する専用領域が確保されている。また、ＲＡＭ１４０には、ＲＯＭ１３０に格納されている制御プログラムの各モジュールが共用して使用（参照）する、変数Ａ，Ｂ，Ｘ及びＹ（共用変数）を格納する共用領域が確保されている。なお、変更モジュールに識別子の一例としてのＩＤを付し、このＩＤを使用して制御プログラムのモジュールとの関連付けを行う。
ステップＳ２２では、プロセッサ１１０が、展開完了通知をツール３００に送信する。
【００２２】
かかる初期化処理によれば、ツール３００において作業者が変更モジュールを選択して初期化実行を指示すると、ツール３００からＥＣＵ１００へと変更モジュールが送信される。そして、変更モジュールを受信したＥＣＵ１００では、変更モジュールの実行を可能とすべく、変更モジュールがＲＡＭ１４０に展開される。このため、ＥＣＵ１００のＲＯＭ１３０に格納された制御プログラムのモジュールに代えて、任意の変更モジュールを実行する準備を行うことができる。
【００２３】
図９は、制御プログラムの実行が開始されたことを契機として、ＥＣＵ１００のプロセッサ１１０が所定時間（例えば、１００ｍｓ）ごとに実行するモジュール実行処理の一例を示す。なお、モジュール実行処理は、制御対象の制御内容に応じたモジュールの順番で順次実行される。
ステップＳ３１では、プロセッサ１１０が、ツール３００から切替要求があったか否かを判定する。そして、プロセッサ１１０は、ツール３００から切替要求があったと判定すれば処理をステップＳ３２へと進める一方（Ｙｅｓ）、ツール３００から切替要求がなかったと判定すれば処理をステップＳ３５へと進める（Ｎｏ）。
【００２４】
ステップＳ３２では、プロセッサ１１０が、ＩＤを使用して実行対象のモジュールに関連付けられている変更モジュールを特定し、ＲＡＭ１４０の共用領域に格納されている変数を変更モジュールの専用領域にコピーする。
ステップＳ３３では、プロセッサ１１０が、実行対象のモジュールを実行する。実行対象のモジュールを実行すると、ツール３００から切替要求があることから、そのモジュールから変更モジュールがコールされる。そして、変更モジュールは、その専用領域に格納されている変数を使用して所定の演算などを行い、その演算結果を専用領域に格納する。
【００２５】
ステップＳ３４では、プロセッサ１１０が、専用モジュールの専用領域に格納されている変数をＲＡＭ１４０の共用領域にコピーする。これにより、制御プログラムの他のモジュールが、共用領域に格納された変数を使用して各処理を行うことができる。
ステップＳ３５では、プロセッサ１１０が、実行対象のモジュールを実行する。実行対象のモジュールを実行すると、そのモジュールは共用領域に格納されている変数を使用して所定の演算などを行い、その演算結果を共用領域に格納する。
かかるモジュール実行処理によれば、ツール３００から切替要求がない場合には、実行対象のモジュールが実行される。
【００２６】
一方、ツール３００から切替要求がある場合には、ＲＡＭ１４０の共用領域に格納されている変数を、実行対象のモジュールに関連付けられている変更モジュールの専用領域にコピーした後、モジュールが実行される。即ち、変更モジュールは、制御プログラムが使用する共用領域のアドレスを知り得ないため、変更モジュールを実行する前に、共用領域の変数を専用領域にコピーすることで、変数を使用できるようになる。そして、実行対象のモジュールが実行されると、そのモジュールに関連付けられている変更モジュールがコールされ、変更モジュールの専用領域に格納されている変数を使用して所定の演算などが行われ、その演算結果が専用領域に格納される。その後、変更モジュールの専用領域に格納された変数がＲＡＭ１４０の共用領域にコピーされ、他のモジュールから使用できるようになる。
【００２７】
従って、ＥＣＵ１００が外部からの切替要求を受信することで、制御プログラムのモジュールに代えて、そのモジュールに関連付けられている変更モジュールを実行することができる。このとき、ツール３００からＥＣＵ１００へと切替要求を一度送信すればよく、ネットワークの通信速度よりも高速な、ＥＣＵ１００の内部処理においてモジュールの切り替えが行われる。このため、通信負荷の増大の抑制を通してレスポンスが向上し、ＥＣＵ１００の機能検証の効率を向上させることができる。
【００２８】
ここで、かかるモジュール実行処理の理解を容易ならしめるために、具体的な事例を想定して説明する。その前提条件として、図１０に示すように、ＥＣＵ１００のＲＯＭ１３０には、前述したモジュール１が格納されていると共に、ＥＣＵ１００のＲＡＭ１４０には、ＲＯＭ１３０のモジュール１に関連付けられている変更モジュール１が格納されているものとする。ＲＡＭ１４０に格納されている変更モジュール１は、関数ｆ’（）として、Ｘ＝Ａ＋Ｂ，Ｙ＝Ｘ＊Ｂを演算する。そして、ＲＡＭ１４０の共用領域には、変数Ａ，Ｂ，Ｘ及びＹの一例として、３，７，−及び−が夫々格納されているものとする。ここで、変数Ｘ及びＹの値「−」は、値が不定であることを示している。
【００２９】
切替要求がない場合には、図１１に示すように、共用領域に格納されている変数を使用して、ＲＯＭ１３０に格納されているモジュール１の演算が実行される。モジュール１では、変数Ａと変数Ｂとを乗算した値を変数Ｘに代入すると共に、変数Ｘから変数Ｂを減算した値を変数Ｙに代入する。この演算により、共用領域の変数Ｘ及びＹは、夫々、２１及び１４に更新される。
【００３０】
一方、切替要求がある場合には、図１２に示すように、共用領域に格納されている変数が変更モジュール１の専用領域にコピーされ、ＲＯＭ１３０に格納されているモジュール１が実行される。このとき、モジュール１から変更モジュール１がコールされ、その専用領域に格納されている変数を使用した演算が実行される。変更モジュール１では、変数Ａと変数Ｂとを加算した値を変数Ｘに代入すると共に、変数Ｘと変数Ｂとを乗算した値を変数Ｙに代入する。この演算により、専用領域の変数Ｘ及びＹは、夫々、１０及び７０に更新される。その後、変更モジュール１の専用領域に格納された変数がＲＡＭ１４０の共用領域にコピーされる。
【００３１】
ＥＣＵ１００のＲＯＭ１３０に格納されたモジュールは、図１３（Ａ）に示すようにしてもよい。即ち、関数ｆ（）の処理として、同図の（１）には、関数ｆ（）の１回目のコールでは何もせず、２回目以降のコールでは変更モジュールをコールした後、関数ｆ（）の終了アドレスへとジャンプする命令を記述する。また、同図の（２）には、関数ｆ（）の１回目のコールでは関数ｆ（）の終了アドレスを記憶し、２回目以降のコールでは何もしない命令を記述する。
【００３２】
このようにすれば、関数ｆ（）の１回目のコールでは、図１３（Ｂ）に示すように、（１）では何もせず、（２）では関数ｆ（）の終了アドレスが記憶される。また、関数ｆ（）の２回目以降のコールでは、図１３（Ｃ）に示すように、（１）では変更モジュールのコール後、１回目のコールで記憶された終了アドレスにジャンプし、（２）では何もしない。従って、モジュールから任意の変更モジュールをコールすることができる。
【００３３】
次に、上述した動作を複数のコアを有するプロセッサ（マルチコアマイクロコンピュータ）を用いて実現する自動車用電子制御装置及びその検証方法について説明する。本実施形態では、下記（ａ）〜（ｆ）のような構成あるいは方法を用いることで、制御プログラムが大規模化しても処理遅延を抑制し、周期処理を効率的に行えるようにしている。
（ａ）マルチコアマイクロコンピュータを使用
（ｂ）ＲＡＭプログラムを分散させて配置
（ｃ）モジュール受信処理とプログラム実行処理を並列して行う
（ｄ）終了通知を外部ツールに送信
（ｅ）モジュールの優先度を選定
（ｆ）ＣＡＮ  ＩＤを分割
以下、（ａ）〜（ｆ）について詳しく説明する。
【００３４】
（ａ）マルチコアマイクロコンピュータを使用
図１４は、図２におけるプロセッサ（ＣＰＵ）１１０の構成例を示している。プロセッサ１１０は、マルチコアマイクロコンピュータであり、コア数分のローカルＲＡＭにツール３００から転送されたモジュールを分割して展開するようになっている。図１４では、メインコア１１１とサブコア１１２で構成された例を示しており、メインコア１１１とサブコア１１２に、ＲＯＭ１１３とグローバルＲＡＭ１１４が共通に相互接続されている。メインコア１１１には、ローカルＲＡＭ１（１１５）が接続され、モジュール（１）〜（４）が展開される。また、サブコア１１２には、ローカルＲＡＭ２（１１６）が接続され、モジュール（５），（６），…，（Ｘ）が展開される。
【００３５】
（ｂ）ＲＡＭプログラムを分散させて配置
図１５は、上記図１４において、ＲＡＭとＲＯＭに展開される制御プログラムを分散させて配置した状態を示す模式図である。まず、バイパス対象となるモジュールを実行するコアを設定する。バイパスするモジュールは、ＩＤによってＲＯＭのモジュールとＲＡＭに展開される予定のモジュールで関連付けされている。ユーザーが予めコンパイルの段階で、どちらのコアにどのモジュールを割り当てるのかを設定ファイルで分割しておくことにより、ＲＯＭ上のプログラムがどちらのコアに割り当てられるか決定される。本例の場合、ＲＯＭに記憶されているモジュールＡ，Ｂがコア１（メインコア１１１）で実施され、ＲＯＭに記憶されているモジュールＣがコア２（サブコア１１２）で実施される。
【００３６】
同様に、転送されてくるモジュールに対しても、ＲＯＭ上のプログラムの割り当てと同等になるように、予め振り分け処理（テーブル）を実装しておく。転送データの受領時には、予め用意されている振り分け処理によって、ＲＯＭ上のプログラムと同等のコアに割り当てられて処理される。図１５では、転送されてきたモジュールＡ’，Ｂ’がローカルＲＡＭ１に格納されてコア１（メインコア１１１）で処理され、転送されてきたモジュールＣ’がローカルＲＡＭ２に格納されてコア２（サブコア１１２）で処理される例を示している。
このように、通常制御で使用されるコアとバイパス処理によって使用されるコアに違いが生じないようになっている。
【００３７】
（ｃ）モジュール受信処理とプログラム実行処理を並列して行う
次に、モジュール受信処理とプログラム実行処理の並列処理について、図１６乃至図２０により詳しく説明する。図１６乃至図１８はモジュール転送について示す模式図である。ここでは、モジュールＡを所定のバイト数で３分割した場合を示しており、分割したモジュール（以下「分割モジュール」という）Ａ１〜Ａ３を転送するものとする。
図１６では、ツール側動作（ツール３００側の要求の流れ）、ＥＣＵ側の動作（ＥＣＵ１００側での処理の流れ）、及びツール３００から送られてきたモジュールのメモリイメージを模式的に表現している。作業者によりツール３００が操作されて、該ツール３００でモジュール転送操作を受領すると（ステップＳ４０）、リトライカウンタをクリアし（ステップＳ４１）、分割モジュールＡ１（スタートビット付き）をツール３００からＥＣＵ１００中のメインコア１１１に送信し（ステップＳ４２）、分割モジュールＡ２をサブコア１１２に送信する（ステップＳ４３）。
【００３８】
メインコア１１１は、ツール３００から送信されたアドレスＡ１を受信してＣＡＮバッファ（ＣＡＮ Buffer）に格納し（ステップＳ４４）、該ＣＡＮバッファからローカルＲＡＭ１１５の分割モジュールＡ１に対応する位置（アドレス）へコピーする（ステップＳ４５）。一方、サブコア１１２は、ツール３００から送信された分割モジュールＡ２を受信してＣＡＮバッファに格納し（ステップＳ４６）、該ＣＡＮバッファからグローバルＲＡＭ１１４の分割モジュールＡ２に対応する位置へコピーする（ステップＳ４７）。これによって、メモリイメージに示すように、ローカルＲＡＭ１には分割モジュールＡ１が、グローバルＲＡＭ１１４には分割モジュールＡ２がそれぞれ格納される。
【００３９】
次に、分割モジュールＡ３（エンドビット付き）をツール３００からＥＣＵ１００中のメインコア１１１に送信する（ステップＳ４８）。メインコア１１１は、ツール３００から送信されたアドレスＡ３を受信してＣＡＮバッファに格納し（ステップＳ４９）、該ＣＡＮバッファからローカルＲＡＭ１の分割モジュールＡ３に対応する位置（アドレス）へコピーする（ステップＳ５０）。この状態では、メモリイメージに示すようにローカルＲＡＭ１には分割モジュールＡ１，Ａ３が、グローバルＲＡＭ１１４には分割モジュールＡ２がそれぞれ格納された状態となる。
そして、最後に受領したコア、即ちメインコアが転送完了をツール３００に対して送信し（ステップＳ５１）、ツール３００で転送完了を受信する（ステップＳ５２）。
【００４０】
図１７に示すステップＳ５３では、転送が正しく行われたか否かを判定し、転送が正しく行われていれば（Ｙｅｓ）、ステップＳ５４で作業者にモジュール転送完了を通知する。転送が正しく行われていなければ（Ｎｏ）、ステップＳ５５でリトライカウンタを更新（カウントアップ）し、リトライが３回目か否かを判定する（ステップＳ５６）。リトライが３回目であれば（Ｙｅｓ）、モジュール転送エラーを通知し（ステップＳ５７）、リトライが３回目でなければ（Ｎｏ）、ステップＳ４２に戻って分割モジュールの転送動作を再び実行する。
【００４１】
一方、ＥＣＵ１００側では、スタートからエンドまでの転送が完了しているか否かを判定し（ステップＳ５８）、完了していれば（Ｙｅｓ）モジュールがローカルＲＡＭ１の配置か否かを判定する（ステップＳ５９）。完了していなければ（Ｎｏ）、ＲＡＭのプログラム領域を開放し（ステップＳ６０）、モジュールの転送待ち状態とする（ステップＳ６１）。
ステップＳ５９でローカルＲＡＭ１の配置であると判定されると（Ｙｅｓ）、グローバルＲＡＭのデータをローカルＲＡＭ１へコピーし（ステップＳ６２）、ローカルＲＡＭ１の配置でないと判定されると（Ｎｏ）、グローバルＲＡＭのデータをローカルＲＡＭ２へコピーする（ステップＳ６３）。
【００４２】
次のステップＳ６４ではプログラム領域とＲＡＭプログラム領域のアドレスを接続し（ステップＳ６４）、プログラム領域とＲＡＭプログラム領域のデータ受け渡し領域を確保して（ステップＳ６５）、モジュール切り替え待ち状態となる（ステップＳ６６）。
上述したような動作を行うことで、図１８に示すようにグローバルＲＡＭの分割モジュールＡ２をグローバルＲＡＭよりも動作速度の速いローカルＲＡＭに移して処理することができる。このように、ＲＯＭ上の制御モジュールからローカルＲＡＭの分割モジュールＡ１，Ａ２，Ａ３へ処理を移し、分割モジュールＡ１，Ａ２，Ａ３の処理が完了後にＲＯＭの制御モジュールへ処理が移る。
【００４３】
図１９は、モジュールの切り替え動作を示す模式図である。ツール３００がモジュール切替操作を受領すると（ステップＳ７０）、ツール３００からＥＣＵ１００のメインコアに切替要求を送信する（ステップＳ７１）。メインコアではバイパス処理か否かを判定し（ステップＳ７２）、バイパス処理であれば（Ｙｅｓ）バイパス処理を行い（ステップＳ７３）、バイパス処理でなければ（Ｎｏ）通常処理を行う（ステップＳ７４）。
【００４４】
図２０は、モジュールの削除動作を示す模式図である。ツール３００がモジュールの削除操作を受領すると（ステップＳ８０）、ツール３００からＥＣＵ１００のメインコアに削除要求を送信する（ステップＳ８１）。メインコアではＲＡＭプログラム領域を開放し（ステップＳ８２）、ツール３００にクリア完了を送信する（ステップＳ８３）。これを受けて、ツール３００は、モジュール削除通知を出力する（ステップＳ８４）。これによって、メモリイメージに示すように、ローカルＲＡＭ１内のデータが削除される（破線で示す）。
【００４５】
（ｄ）終了通知を外部ツールに送信
ツール３００から転送された分割モジュールのデータを、ＥＣＵ１００に転送し終えた後は、モジュール個別（モジュールＡ，Ｂ，Ｃ）に応答を返すことにより、各々のモジュールのテスト開始時間を短くする。即ち、図２１（Ａ）に示すようにモジュールＡ，Ｂ，Ｃのデータ量が異なる場合には、ＥＣＵ１００に全てのメモリ展開完了後にツール３００に応答を返すと、モジュール転送にかかるユーザーの待ち時間が長くなる。これに対し、図２１（Ｂ），（Ｃ），（Ｄ）に示すように各モジュールＡ，Ｂ，Ｃのメモリ展開完了後それぞれでツール３００に応答を返すことで、モジュール転送にかかるユーザーの待ち時間を短縮できる。
【００４６】
（ｅ）モジュールの優先度を選定
転送するモジュールの優先順位は、検証を行いたいユーザーが任意で決定するとよい。例えばモジュールＡ，Ｂの優先順位を高くし、モジュールＣの優先順位を低くして、それぞれの分割個数を設定する。そして、ツール３００でモジュールの優先順位を判断し、優先順位の高いものから順に送信する。
【００４７】
（ｆ）ＣＡＮ  ＩＤを分割
通常の制御を行いながらの評価のため、専用のＣＡＮ  ＩＤを設けて転送データを送信する。例えば、送信時に「０ｘ７００＋ｉ」のＣＡＮ  ＩＤでモジュールｉのデータを送る。受信時には「０ｘ８００＋ｉ」で応答する。要求用ＩＤと応答用ＩＤの一例を図２２（Ａ），（Ｂ）にそれぞれ示す。
ここで、転送するモジュールのデータサイズは、図２３（Ａ）に示すように「モジュール×分割ｎ」を７バイト（Ｂｙｔｅ）と定義している。また、ＣＡＮデータフィールドでの残り１バイトには、送信するモジュールの情報、例えば切替要求、クリア要求、モジュールのスタートビットとエンドビット、及び分割が何回目かなどを乗せることに用いる。これを複数のＩＤで送り複数コアで処理できるようにする。
【００４８】
ＣＡＮデータ受信からＲＡＭへの展開までの流れは、通常と変わらず、マイクロコンピュータ内でのＲＡＭの展開方法に工夫がある。即ち、図２３（Ｂ）に示すように、「モジュール×分割ｎ」、「モジュール×分割ｎ＋１」、「モジュール×分割ｎ＋２」、「モジュール×分割ｎ＋３」…をＣＡＮバッファに入力した後、ＣＡＮバッファからローカルＲＡＭ１、グローバルＲＡＭ及びローカルＲＡＭ２に振り分けている。
【００４９】
なお、転送データは、シングル・マルチどちらのマイクロコンピュータの構成であっても、同一タイミングで複数送信することも可能であるが、転送データの暗号化から複合化により展開処理に時間がかかる。また、セキュリティ面を考慮すると、周期別に分割して送信するのが好ましい。
【００５０】
上記のような構成によれば、ソフトウェアの高機能化により大規模化しても、周期処理内でデータ転送とプログラム実行処理を並列して行うことで、処理遅延を改善することができる。また、周期処理を効率的に行って評価をすることができ、作業時間も短縮できる。
図２４は、一例として７００バイトのモジュールＡを１００分割して送信した場合におけるＥＣＵ１００の処理時間を、シングルコアの場合とマルチコアの場合で比較して示している。シングルコアの場合には、図２４（Ａ）に示すように、１０ｍｓ毎に分割モジュールＡ１，Ａ２，Ａ３，…，Ａ１００を転送すると１秒程度の時間がかかる。これに対し、マルチコアの場合には、図２４（Ｂ）に示すように、コア１に１０ｍｓ毎に分割モジュールＡ１，Ａ３，Ａ５，…，Ａ９９を転送し、且つコア２に１０ｍｓ毎に分割モジュールＡ２，Ａ４，Ａ６，…，Ａ１００を転送するので、５００ミリ秒程度で済む。
【００５１】
次に、ユーザーとツールの通信開始とインターフェースの変形例について説明する。ここでは、「Ｗａｋｅｕｐ」を用い、ＥＣＵ１００がイグニッション（ＩＧ）用でツール３００が外部電源であることを前提にしている。
（接続例１）
接続例１は、図２５に示すように、同一ネットワークケーブル（ＣＡＮ）２００上にツール３００、ＥＣＵ１００及びユニットＡ〜ユニットＨ（４１０〜４８０）が存在する場合である。
＜パターン１＞
パターン１は、ツール３００から一方的に通信を開始するものである。ユーザーは、任意のタイミングで、ツール３００からＥＣＵ１００に向けて要求メッセージを送信し、通信を開始する。この際、初回は、ダミーデータをネットワークケーブル２００上に流す。ダミーデータを受領したＥＣＵ１００から応答があった後、正常の要求データを流す。そして、通信可能である場合には、完了通知が帰ってくるので処理を継続する。一方、通信不可能である場合には、処理ビジーもしくは展開エラーが帰ってくるので処理を停止する。
【００５２】
＜パターン２＞
パターン２は、ＥＣＵ１００のデータの受け入れ体勢を待ってから通信を開始するものである。ＥＣＵ１００からツール３００に向けて、周期的にデータ受信可能状態（イグニッションＯＮ、イニシャル処理終了）であることを通知する。ツール３００は、ＥＣＵ１００からの受信可能状態を受けてから、ユーザーに対して転送データ可能であることを通知し、処理を継続する。本パターン２は、通信可能状態からの通信開始のため、通信可能状態になるまではデータ転送を開始することはできない。
【００５３】
＜パターン３＞
パターン３は、ネットワークマネジメント上にお互いが存在する場合である。この場合には、ツール３００とＥＣＵ１００がお互いウェイクアップ状態であることを確認できてからユーザーに通信可能であることを伝えて、処理を継続する。ここで、ＥＣＵ１００がスリープ状態（イグニッションＯＦＦや通信断など）では、通信可能状態とならないため、データ転送を開始することはできない。
【００５４】
＜パターン４＞
パターン４は、パターン２の双方向版である。双方向からウェイクアップ状態と通信可能状態を通知し合う。そして、ツール３００側から見て、ＥＣＵ１００から通信可能状態を受信できていたら通信を開始可能であることをユーザーに伝えて処理を継続する。ここでは、パターン２と同様に、通信可能状態からの通信開始のため、通信可能状態になるまではデータ転送を開始することはできない。
【００５５】
＜パターン５＞
パターン５は、ＥＣＵ１００のイグニッション状態を監視し、通信を開始するものである。ツール３００は、ＥＣＵ１００の電源状態を監視する。そして、イグニッションＯＮによりＥＣＵ１００がウェイクアップを検知し、イニシャル処理が完了するのを待ち、所定時間経過次第ユーザーに準備完了を通知し、処理を継続する。
【００５６】
（接続例２）
接続例２は、図２６に示すように、ネットワークケーブルがゲートウェイユニット５００で分離され、異なる速度領域帯にお互いが存在する場合である。ネットワークケーブル２００−１上にツール３００とユニットＡ，Ｂ，Ｃ（４１０，４２０，４３０）が接続され、ネットワークケーブル２００−２上にＥＣＵ１００とユニットＤ，Ｆ（４４０，４６０）が接続されている。
このようにゲートウェイ上であっても、上述したパターン１〜５は当てはまるので、接続例１と同様な処理が可能である。
【符号の説明】
【００５７】
１００…ＥＣＵ、１１０…プロセッサ（マルチコアマイクロコンピュータ）、１１１…メインコア、１１２…サブコア、１１３…ＲＯＭ、１１４…グローバルＲＡＭ、１１５…ローカルＲＡＭ１、１１６…ローカルＲＡＭ２、２００…ネットワークケーブル、３００…ツール
【図１】
2015179465.tif 000003
【図２】
2015179465.tif 000004
【図３】
2015179465.tif 000005
【図４】
2015179465.tif 000006
【図５】
2015179465.tif 000007
【図６】
2015179465.tif 000008
【図７】
2015179465.tif 000009
【図８】
2015179465.tif 000010
【図９】
2015179465.tif 000011
【図１０】
2015179465.tif 000012
【図１１】
2015179465.tif 000013
【図１２】
2015179465.tif 000014
【図１３】
2015179465.tif 000015
【図１４】
2015179465.tif 000016
【図１５】
2015179465.tif 000017
【図１６】
2015179465.tif 000018
【図１７】
2015179465.tif 000019
【図１８】
2015179465.tif 000020
【図１９】
2015179465.tif 000021
【図２０】
2015179465.tif 000022
【図２１】
2015179465.tif 000023
【図２２】
2015179465.tif 000024
【図２３】
2015179465.tif 000025
【図２４】
2015179465.tif 000026
【図２５】
2015179465.tif 000027
【図２６】
2015179465.tif 000028