[本開示の実施形態の説明]
最初に本開示の実施態様を列挙して説明する。また、以下に記載する実施形態の少なくとも一部を任意に組み合わせてもよい。
(1)本開示の一態様に係る車載装置は、複数のプログラムを実行する制御部と、該制御部によって起動される仮想化オペレーティングシステムが記憶されている記憶部とを備え、前記仮想化オペレーティングシステムを起動することにより、前記プログラムの動作環境となる複数の仮想装置が生成され、前記仮想装置は、前記記憶部が領域分割されて割り当てられ、複数の前記仮想装置の間の通信において授受される通信データが書き込まれる通信バッファを含み、他の仮想装置と通信を行う際、該他の仮想装置への前記通信データを自仮想装置の前記通信バッファに書き込み、複数の前記仮想装置を管理する管理部は、前記仮想装置が動作していない期間に、前記仮想装置の前記通信バッファに書き込まれた前記通信データを読み出し、読み出した前記通信データを、前記管理部がアクセス可能な記憶領域に書き込み、前記通信データの送信先である前記他の仮想装置が動作していない期間に、前記記憶領域に書き込んだ前記通信データを前記他の仮想装置の前記通信バッファに書き込み、前記他の仮想装置は、自仮想装置の前記通信バッファに書き込まれた前記仮想装置からの前記通信データを読み出す。
本態様にあたっては、制御部が仮想化オペレーティングシステムを起動することにより、複数の仮想装置は生成される。仮想装置は、例えば制御部が時分割されて周期的に割り当てられる仮想制御部と、通信バッファとを含む。複数の仮想装置は、管理部によって管理される。管理部は、仮想化オペレーティングシステムによって生成された仮想装置を管理するための管理プログラムを実行するにあたり生成されたプロセスに相当する。複数の仮想装置のうちの一の仮想装置は、他の仮想装置と通信する際、当該他の仮想装置へ送信する通信データを、一の仮想装置の通信バッファに書き込む。一の仮想装置が動作していない期間、例えば制御部に対して一の仮想装置の仮想制御部の割り当てが行われていない期間に、管理部は、一の仮想装置の通信バッファに書き込まれた通信データを読み出す。管理部は、読み出した通信データを記憶領域に書き込む。上記の通信データの送信先である他の仮想装置が動作していない期間、例えば当該他の仮想装置の仮想制御部の割り当てが制御部に対して行われていない期間に、管理部は、記憶領域に書き込んだ通信データを上記の他の仮想装置の通信バッファに書き込む。他の仮想装置は、当該他の仮想装置の通信バッファに書き込まれた通信データを読み出す。一の仮想装置の通信バッファには、他の仮想装置から一の仮想装置へ送信される通信データが、記憶領域を介して書きこまれる。一の仮想装置は、一の仮想装置の通信バッファに書き込まれる他の仮想装置からの通信データを読み出す。一の仮想装置と他の仮想装置との間において通信データの授受が、管理部によって記憶領域を介して行われる。言い換えると一の仮想装置と他の仮想装置との間の通信が記憶領域を介して行われる。通信データの授受は管理部によって記憶領域を介して行われるので、一の仮想装置が通信データを通信バッファに書き込んでいる間に、他の仮想装置が当該通信データを読み出すことはない。管理部は通信データの書き込み及び読み出しを、仮想装置が動作していない期間に行うので、仮想装置による通信バッファへの通信データの書き込みと、管理部による通信バッファからの通信データの読み出しとは競合しない。また、管理部による通信バッファへの通信データの書き込みと、仮想装置による通信バッファからの通信データの読み出しとは競合しない。従って、複数の仮想装置の間において、通信データの書き込み及び読み出しが競合することなく、適切に通信データの授受を行うことができるので、複数の仮想装置の間において、効率的に通信データの授受を行うことができる。
(2)本開示の一態様に係る車載装置は、前記制御部は、複数の演算装置を含み、複数の前記演算装置のうち、1つの前記演算装置は、前記管理部として機能し、複数の前記演算装置のうち、残りの前記演算装置は、前記仮想装置として機能する。
本態様にあたっては、制御部は複数の演算装置を含む。例えば制御部が複数のコアを有するマルチコアCPUである場合、演算装置はコアである。複数の演算装置のうち、1つの演算装置は管理部として機能する。複数の演算装置のうち、残りの演算装置において仮想装置は生成される。残りの演算装置は生成された仮想装置として機能する。複数の仮想装置の間における通信データの授受において、1つの演算装置による管理部は、送信元の仮想装置の通信バッファに書き込まれる通信データを記憶領域に書き込む。また上記の管理部は、記憶領域に書き込まれた通信データを記憶領域から読み出し、当該通信データを送信先の仮想装置の通信バッファへ書き込む。1つの演算装置による管理部が記憶領域に対する通信データの書き込み及び読み出しを行うので、記憶領域に対する通信データの書き込み及び読み出しが競合することなく、複数の仮想装置の間における通信データの授受を行うことができる。
(3)本開示の一態様に係る車載装置は、前記制御部は、複数の演算装置を含み、前記演算装置それぞれは、前記管理部として機能し、前記仮想装置として機能し、前記管理部として機能する期間と、前記仮想装置として機能する期間とを周期的に切り替え、複数の前記演算装置のうち、一の前記演算装置が前記管理部として機能する期間と、複数の前記演算装置のうち、他の前記演算装置が前記管理部として機能する期間とは重複しない。
本態様にあたっては、制御部は複数の演算装置を含む。演算装置それぞれは、管理部として機能する期間と、仮想装置として機能する期間とを周期的に切り替える。演算装置が仮想装置として機能する期間においては、演算装置にて仮想装置が生成される。また当該演算装置は生成される仮想装置として機能する。演算装置は管理部として機能する期間においては、管理部として機能し、上述のように、通信バッファに対する通信データの書き込み及び読み出しと、記憶領域に対する通信データの書き込み及び読み出しとを行う。演算装置が管理部として機能する期間と、演算装置が仮想装置として機能する期間とを切り替える周期は、一の演算装置が管理部として機能する期間と、他の演算装置が管理部として機能する期間とが重複しないように、演算装置ごとに設定される。一の演算装置が管理部として機能する期間と、他の演算装置が管理部として機能する期間とは重複しないので、記憶領域に対する通信データの書き込み及び読み出しが競合することなく、複数の仮想装置の間における通信データの授受を行うことができる。
(4)本開示の一態様に係る車載装置は、一の前記演算装置は、一の前記演算装置において生成される前記仮想装置を管理する前記管理部として機能し、一の前記演算装置において生成される前記仮想装置を管理する前記管理部は、一の前記演算装置において生成される前記仮想装置の前記通信バッファと、前記記憶領域とにアクセス可能であり、他の前記演算装置において生成される前記仮想装置の前記通信バッファにアクセス不可能であり、前記仮想装置は、自仮想装置の前記通信バッファにアクセス可能であり、前記他の仮想装置の前記通信バッファと、前記記憶領域とにアクセス不可能である。
本態様にあたっては、各演算装置において1又は複数の仮想装置が生成される。複数の演算装置のうちの一の演算装置は、当該一の演算装置において生成される仮想装置として機能する。また一の演算装置は、当該一の演算装置において生成される仮想装置を管理する管理部としても機能する。一の演算装置が管理部として機能する際、当該管理部は、一の演算装置において生成される1又は複数の仮想装置の通信バッファと、記憶領域とにアクセス可能である。また、上記の管理部は、一の演算装置以外の他の演算装置において生成される仮想装置の通信バッファにアクセス不可能である。上記の管理部が誤って、他の演算装置において生成される仮想装置の通信バッファに対して通信データの書き込み及び読み出しを行うことを防止することができる。複数の演算装置において生成される複数の仮想装置のうち、一の仮想装置は、当該一の仮想装置の通信バッファにアクセス可能であるが、生成される複数の仮想装置のうちの他の仮想装置の通信バッファと、記憶領域とにアクセス不可能である。一の仮想装置が誤って、通信データを他の仮想装置の通信バッファに書き込むことを防止することができる。また一の仮想装置が誤って、他の仮想装置の通信バッファに書き込まれた通信データを読み出すことを防止することができる。上述のように仮想装置及び管理部による通信バッファへのアクセスを制限することによって、通信データが誤って意図しない通信バッファに書き込まれることと、誤って意図しない通信データが通信バッファから読み出されることとを防止することができる。記憶領域は、管理部のみがアクセス可能なので、仮想装置が誤って記憶領域に対して通信データの書き込み及び読み出しを行うことを防止することができる。
(5)本開示の一態様に係る車載装置は、前記通信バッファは、前記仮想装置が受信する前記通信データが書き込まれる受信バッファを含み、前記仮想装置は、前記受信バッファに書き込まれる前記通信データが更新されている旨を示す受信バッファ更新フラグがオン状態である場合、前記受信バッファに書き込まれた前記通信データを読み出し、前記通信データの読み出し後、前記受信バッファ更新フラグをオン状態からオフ状態へ変更する。
本態様にあたっては、各通信バッファは、仮想装置が受信する通信データが書き込まれる受信バッファを含む。各受信バッファには、受信バッファ更新フラグが設けられる。受信バッファ更新フラグがオフ状態である場合、受信バッファの通信データは更新されていない。受信バッファ更新フラグがオン状態である場合、受信バッファの通信データは更新されているので、受信バッファには新たな通信データが書き込まれている。仮想装置は、当該仮想装置の受信バッファの受信バッファ更新フラグがオン状態である場合、当該受信バッファに書き込まれた新たな通信データを読み出す。仮想装置は通信データの読み出し後、上記の受信バッファ更新フラグをオン状態からオフ状態へ変更するので、読み出した通信データを再度、読み出してしまうことを防止することができる。仮想装置は、受信バッファ更新フラグに基づき、受信バッファに書き込まれた通信データを読み出すことによって、新たに送信された通信データを適切に取得することができる。
(6)本開示の一態様に係る車載装置は、前記通信バッファは、前記仮想装置が前記他の仮想装置へ送信する前記通信データが書き込まれる送信バッファを含み、前記仮想装置は、前記通信データを前記送信バッファに書き込んだ後、前記送信バッファに書き込まれる前記通信データが更新されている旨を示す送信バッファ更新フラグをオン状態にし、前記管理部は、前記送信バッファ更新フラグがオン状態である場合、前記仮想装置の前記送信バッファに書き込まれた前記通信データを前記記憶領域に書き込み、前記記憶領域への前記通信データの書き込み後、前記送信バッファ更新フラグをオン状態からオフ状態に変更し、更に、前記記憶領域に書き込まれる前記通信データが更新されている旨を示す記憶領域更新フラグをオン状態にし、前記記憶領域更新フラグがオン状態である場合、前記記憶領域に書き込まれた前記通信データを、前記他の仮想装置の前記受信バッファに書き込み、前記受信バッファへの前記通信データの書き込み後、前記受信バッファ更新フラグをオン状態にし、更に、前記記憶領域更新フラグをオン状態からオフ状態にする。
本態様にあたっては、各通信バッファは、仮想装置が他の仮想装置へ送信する通信データが書き込まれる送信バッファを含む。各送信バッファには、送信バッファ更新フラグが設けられる。送信バッファ更新フラグがオフ状態である場合、送信バッファの通信データは更新されていない。送信バッファ更新フラグがオン状態である場合、送信バッファの通信データは更新されているので、送信バッファには新たな通信データが書き込まれている。仮想装置は、当該仮想装置の送信バッファに新たな通信データを書き込んだ後、当該送信バッファの送信バッファ更新フラグをオン状態にする。送信バッファ更新フラグがオン状態である場合、管理部は、送信バッファに書き込まれた新たな通信データを読み出し、読み出した通信データを記憶領域に書き込む。記憶領域には、記憶領域更新フラグが設けられている。記憶領域更新フラグがオフ状態である場合、記憶領域の通信データは更新されていない。記憶領域更新フラグがオン状態である場合、記憶領域の通信データは更新されているので、記憶領域には新たな通信データが書き込まれている。管理部は、新たな通信データの記憶領域への書き込み後、送信バッファ更新フラグをオン状態からオフ状態に変更し、更に記憶領域更新フラグをオン状態にする。記憶領域更新フラグがオン状態である場合、管理部は、記憶領域に書き込まれた新たな通信データを読み出し、読み出した通信データを送信先の仮想装置の受信バッファに書き込む。管理部は、受信バッファへの通信データの書き込み後に、当該受信バッファの受信バッファ更新フラグをオン状態にし、更に記憶領域更新フラグをオン状態からオフ状態へ変更する。送信先の仮想装置は上述のように、受信バッファ更新フラグに基づき、当該仮想装置の受信バッファに書き込まれた新たなデータを読み出す。送信バッファ更新フラグがオン状態である場合に、送信バッファに書き込まれた通信データの読み出しが行われるので、送信バッファにおいて通信データの書き込み及び読み出しが競合することを防止することができる。管理部は受信バッファへの通信データの書き込み後に、記憶領域更新フラグをオフ状態にするので、管理部は記憶領域に書き込まれた通信データのうち、受信バッファに書き込まれていない通信データを判別することができる。管理部は受信バッファへの通信データの書き込み後に、受信バッファ更新フラグをオン状態にするので、受信バッファにおいて通信データの書き込み及び読み出しが競合することを防止することができる。
(7)本開示の一態様に係る車載装置は、前記通信バッファは、前記仮想装置が前記他の仮想装置へ送信する前記通信データが書き込まれる送信バッファを含み、前記仮想装置は、前記通信データを前記送信バッファに書き込んだ後、前記送信バッファに前記通信データが書き込まれた回数を示す送信バッファカウント値を更新し、前記管理部は、前記送信バッファカウント値と、前記記憶領域に前記通信データが書き込まれた回数を示す記憶領域カウント値とが異なる場合、前記仮想装置の前記送信バッファに書き込まれた前記通信データを前記記憶領域に書き込み、前記記憶領域への前記通信データの書き込み後、前記記憶領域カウント値を、前記送信バッファカウント値と同一の値に更新し、前記記憶領域カウント値と、前記受信バッファに前記通信データが書き込まれた回数を示す受信バッファカウント値とが異なる場合、前記記憶領域に書き込まれた前記通信データを前記他の仮想装置の前記受信バッファに書き込み、前記受信バッファへの前記通信データの書き込み後、前記受信バッファカウント値を前記記憶領域カウント値と同一の値に更新し、更に、前記受信バッファ更新フラグをオン状態にする。
本態様にあたっては、各通信バッファは送信バッファを含む。送信バッファには、送信バッファカウント値が設けられる。記憶領域には、記憶領域カウント値が設けられる。受信バッファには、受信バッファカウント値が設けられる。送信バッファカウント値、記憶領域カウント値、及び受信バッファカウント値それぞれは、例えばメッセージID等の通信データの識別子ごとに設けられる。送信元の仮想装置は、当該仮想装置の送信バッファに通信データを書き込んだ後、送信バッファカウント値を更新する。例えば上記の仮想装置は、上記の通信データに関する識別子の送信バッファカウント値を1増やす。送信バッファカウント値と記憶領域カウント値とが異なる場合、管理部は、送信バッファに書き込まれた上記の通信データを記憶領域に書き込む。送信バッファカウント値と記憶領域カウント値とが異なる場合は、同一の識別子に対応する送信バッファカウント値及び記憶領域カウント値の値が異なる場合である。管理部は、記憶領域への通信データの書き込み後、記憶領域カウント値を送信バッファカウント値と同一の値に更新する。記憶領域カウント値と受信バッファカウント値とが異なる場合、管理部は、記憶領域に書き込まれた上記の通信データを送信先の仮想装置の受信バッファに書き込む。記憶領域カウント値と受信バッファカウント値とが異なる場合は、同一の識別子に対応する記憶領域カウント値及び受信バッファカウント値の値が異なる場合である。管理部は、受信バッファへの通信データの書き込み後、受信バッファカウント値を記憶領域カウント値と同一の値に更新し、受信バッファ更新フラグをオン状態にする。送信先の仮想装置は、受信バッファ更新フラグに基づき、当該仮想装置の受信バッファに書き込まれた新たなデータを読み出す。送信バッファカウント値及び記憶領域カウント値に基づき、送信バッファに書き込まれた通信データの読み出しが行われるので、送信バッファにおいて通信データの書き込み及び読み出しが競合することを防止することができる。管理部は記憶領域への通信データの書き込み後に記憶領域カウント値を更新するので、記憶領域において通信データの書き込み及び読み出しが競合することを防止することができる。管理部は受信バッファへの通信データの書き込み後に、受信バッファカウント値を更新し、受信バッファ更新フラグをオン状態にするので、受信バッファにおいて通信データの書き込み及び読み出しが競合することを防止することができる。
(8)本開示の一態様に係る車載装置は、前記通信バッファは、前記プログラムを実行するためのプログラム実行用記憶領域を含み、前記管理部は、前記記憶領域に書き込まれた前記通信データを送信先の前記仮想装置の前記プログラム実行用記憶領域に書き込む。
本態様にあたっては、通信バッファは、プログラムを実行するためのプログラム実行用記憶領域を含む。プログラム実行用記憶領域は、いわゆる変数領域であり、仮想装置ごとに設けられる。プログラム実行用記憶領域は、論理アドレスによって示される。プログラムの実行において、通信データはプログラム実行用記憶領域に書き込まれる。管理部は、記憶領域に書き込まれた通信データを、送信先の仮想装置のプログラム実行用記憶領域に書き込む。管理部が通信データをプログラム実行用記憶領域に直接、書き込むので、仮想装置は通信データをプログラム実行用記憶領域に書き込むための処理を行う必要がない。従って、仮想装置が行う処理を少なくすることができる。
(9)本開示の一態様に係る情報処理方法は、複数のプログラムの動作環境となる複数の仮想装置を車載装置において生成し、前記仮想装置が他の仮想装置と通信を行う際、該他の仮想装置への通信データを、前記仮想装置に含まれ、複数の前記仮想装置の間の通信において授受される前記通信データが書き込まれる通信バッファに書き込み、前記仮想装置が動作していない期間に、前記仮想装置の前記通信バッファに書き込まれた前記通信データを読み出し、読み出した前記通信データを、記憶領域に書き込み、前記通信データの送信先である前記他の仮想装置が動作していない期間に、前記記憶領域に書き込んだ前記通信データを前記他の仮想装置の前記通信バッファに書き込み、前記他の仮想装置の前記通信バッファに書き込まれた前記仮想装置からの前記通信データを読み出す。
本態様にあたっては、態様(1)と同様に、複数の仮想装置の間において、競合せずに、適切にデータの授受を行うことができるので、複数の仮想装置の間において、効率的に通信データの授受を行うことができる。
(10)本開示の一態様に係るコンピュータプログラムは、車両に搭載されるコンピュータに処理を実行させるコンピュータプログラムであって、複数のプログラムの動作環境となる複数の仮想装置を生成し、前記仮想装置が他の仮想装置と通信を行う際、該他の仮想装置への通信データを、前記仮想装置に含まれ、複数の前記仮想装置の間の通信において授受される前記通信データが書き込まれる通信バッファに書き込み、前記仮想装置が動作していない期間に、前記仮想装置の前記通信バッファに書き込まれた前記通信データを読み出し、読み出した前記通信データを、記憶領域に書き込み、前記通信データの送信先である前記他の仮想装置が動作していない期間に、前記記憶領域に書き込んだ前記通信データを前記他の仮想装置の前記通信バッファに書き込み、前記他の仮想装置の前記通信バッファに書き込まれた前記仮想装置からの前記通信データを読み出す処理をコンピュータに実行させる。
本態様にあたっては、コンピュータを、本開示の一態様の車載装置として機能させることができる。
[本開示の実施形態の詳細]
本開示をその実施形態を示す図面に基づいて具体的に説明する。本開示の実施形態に係る車載装置を、以下に図面を参照しつつ説明する。なお、本開示はこれらの例示に限定されるものではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
(実施形態1)
以下、実施の形態について図面に基づいて説明する。図1は、実施形態1に係る車載システムSの構成を例示する模式図である。車載システムSは、車両Cに搭載される複数の車載ECU2を含む。車載ECU2には車載機器3が接続される。
複数の車載ECU2は、車両Cの全体を制御する統合的な車載ECU2(統合ECU)、及び当該統合的な車載ECU2と通信可能に接続され、車載機器3と直接、接続される個別的な車載ECU2(個別ECU)を含むものであってもよい。統合的な車載ECU2は、図示しない車外通信装置を介して、インターネット等の外部ネットワークに接続される図示しない外部サーバと、通信可能に接続されるものであってもよい。車載ECU2は車載装置に相当する。
図1において、統合的な車載ECU2と、複数の個別的な車載ECU2とは、スター状のネットワークトポロジーを形成する車載ネットワーク4によって通信可能に接続される。当該統合的な車載ECU2は、スター状のネットワークトポロジーの中心に位置して設けられている。車載システムSにおけるネットワークトポロジーは上記の例に限定されない。車載システムSは、隣接する個々の個別的な車載ECU2同士が接続され、ループ状のネットワークトポロジーを構成し、双方向通信を可能として冗長化を図る構成であってもよい。
個別的な車載ECU2は、車両Cにおける各エリアに配置され、複数の車載機器3と接続される。個別的な車載ECU2は、接続される車載機器3と信号又はデータを送受信する。また個別的な車載ECU2は、統合的な車載ECU2と通信を行う。個別的な車載ECU2は、当該個別的な車載ECU2に接続される複数の車載機器3間の通信、又は車載機器3と他の車載ECU2との通信を中継するゲートウェイ又はイーサスイッチ等の車載中継装置として機能する中継制御ECUであってもよい。個別的な車載ECU2は、通信に関する中継に加え、蓄電装置から出力された電力を分配及び中継し、自ECUに接続される車載機器3に供給する電力分配装置としても機能してよい。
車載機器3は例えば、ドア開閉装置、及びモータ装置等のアクチュエータ30と、LiDAR(Light Detection and Ranging)、ライトセンサ、CMOSカメラ、及び赤外線センサ等の各種センサ31とを含む。車載機器3は上記の例に限定されず、ドアSW(スイッチ)、及びランプSW等のスイッチでもよく、ランプでもよい。
統合的な車載ECU2は、例えばヴィークルコンピュータ等の中央制御装置である。統合的な車載ECU2は、個別的な車載ECU2等の他の車載ECU2を介して中継された車載機器3からのデータに基づき、個々の車載機器3への制御信号を生成及び出力する。統合的な車載ECU2は、他の車載ECU2から出力される要求信号等の情報又はデータに基づき、当該要求信号の対象となるアクチュエータ30を制御するための制御信号を生成し、生成した制御信号を他の車載ECU2に出力する。本実施形態において車載システムSは、統合的な車載ECU2及び個別的な車載ECU2によって構成されるが、車載システムSは、統合的な車載ECU2及び個別的な車載ECU2による構成に限定されない。車載システムSは、例えばCAN(Controller Area Network)ゲートウェイ又はイーサスイッチ等の中継装置によってピアツーピアに接続された複数の車載ECU2によって構成されるものであってもよい。
図2は、車載ECU2の物理構成を例示するブロック図である。車載ECU2は、制御部20、記憶部21及び車内通信部22を含む。制御部20は、CPU又はMPU(Micro Processing Unit)等の演算処理装置によって構成される。制御部20は、記憶部21に予め記憶された制御プログラムP及びデータを読み出して実行することにより、種々の制御処理及び演算処理等を行うようにしてある。制御部20は、例えば、シングルコアのシングルCPU、シングルコアのマルチCPU、マルチコアのシングルCPU、及びマルチコアのマルチCPUを含む。制御部20は、CPU等のソフトウェア処理を行うソフトウェア処理部のみに限定されず、FPGA、ASIC又はSOC等のハードウェア処理にて種々の制御処理及び演算処理等を行うハードウェア処理部を含むものであってもよい。
制御部20は、例えばCPUの1つのコアによって構成される演算装置200を含む。本実施形態においては、制御部20がトリプルコアのCPUである例を説明する。制御部20はトリプルコアなので3つのコアを有する。制御部20は、第1のコアによって構成される第1演算装置201と、第2のコアによって構成される第2演算装置202と、第3のコアによって構成される第3演算装置203との3つの演算装置200を含む。なお演算装置200の個数は3つに限定されない。
記憶部21は、RAM(Random Access Memory)等の揮発性のメモリ素子又は、ROM(Read Only Memory)、EEPROM(Electrically Erasable Programmable ROM)若しくはフラッシュメモリ等の不揮発性のメモリ素子によって構成される。記憶部21は、上記の揮発性のメモリ素子及び不揮発性のメモリ素子等の記憶デバイスの組み合わせにより構成されてもよい。記憶部21には、制御プログラムP及び処理時に参照するデータが予め記憶してある。当該制御プログラムPは、例えば、各種の車載機器3を制御するためのプログラム、又はLiDAR又はCMOSカメラからの出力データ基づき自動化運転を行うための物標認識を行うプログラム等の複数のプログラムを含む。これらのプログラムはアプリケーションとも称される。更に、車載ECU2の記憶部21には、例えば、Hypervisor又はXen等の仮想化オペレーティングシステムが記憶されている。
なお記憶部21に記憶された制御プログラムPは、車載ECU2が読み取り可能な記録媒体Aから読み出された制御プログラムPを記憶したものであってもよい。また、図示しない通信網に接続されている図示しない外部コンピュータから制御プログラムPをダウンロードし、記憶部21に記憶させたものであってもよい。制御プログラムPは、コンピュータプログラムに相当する。
車内通信部22は、例えばCAN(Controller Area Network)又はイーサネット(Ethernet/登録商標)の通信プロトコルを用いた入出力インターフェイスである。制御部20は、車内通信部22を介して車載ネットワーク4に接続されている他の車載ECU2と相互に通信する。
図3は、車載ECU2の論理構成を例示するブロック図である。上述のように車載ECU2の記憶部21には、例えば、Hypervisor又はXen等の仮想化オペレーティングシステムが記憶されている。車載ECU2の制御部20は、仮想化オペレーティングシステムを用いて起動することにより、仮想化オペレーティングシステム上にて複数の仮想ECU5を構築することができる。各種の車載機器3を制御するためのプログラムは、これら複数の仮想ECU5のうちのいずれかの仮想ECU5を動作環境として、実行される。すなわち、これらプログラムは、いずれかの仮想ECU5上にて、実行されるものとなる。仮想ECU5がプログラムを実行することにより、当該プログラムの処理内容に応じて単一又は複数のタスクが生成される。当該タスクによって、より細分化又は区分化された処理単位が実行されるものとなる。
本実施形態においては、仮想化の方式が、仮想化オペレーティングシステムによって直接的に制御部20等のハードウェアリソースにアクセスするハイパーバイザ方式である例を説明するが、仮想化の方式はハイパーバイザ方式に限定されない。例えば仮想化の方式は、仮想化オペレーティングシステムとハードウェアリソースとの間にLinux(登録商標)等のオペレーティングシステムが介在するホストOS方式であってもよい。また仮想化の方式は、コンテナ方式の仮想化オペレーティングシステムを用いるものであってもよい。
仮想化オペレーティングシステムを用いて起動した車載ECU2は、仮想化オペレーティングシステムの機能により、複数の仮想ECU5を構築することができる。複数の仮想ECU5には、車載ECU2が備える制御部20及び記憶部21等のハードウェアリソースが割り当てられる。例えば仮想ECU5は、制御部20に割り当てられる仮想制御部5aと、記憶部21に割り当てられる図示しない仮想記憶部と、車内通信部22に割り当てられる図示しない仮想車内通信部とを含む。仮想ECU5は、仮想装置に相当する。
仮想ECU5それぞれの仮想記憶部それぞれには、例えばUbuntu(登録商標)等のゲストOSが記憶され、仮想ECU5それぞれはゲストOSを起動し、当該ゲストOSの上でプログラムを実行する。当該ゲストOSは、個々の仮想ECU5に応じて、異なる種類のOSであってもよい。上述のごとく仮想記憶部の実体は、仮想ECU5それぞれに割り当てられた記憶部21の記憶領域であるため、ゲストOSも仮想化オペレーティングシステムと同様に記憶部21に記憶されていることは、言うまでもない。コンテナ方式の仮想化オペレーティングシステムを用いる場合、ゲストOSを不要とし、当該仮想化オペレーティングシステムの上でコンテナを生成し、当該コンテナ上にてプログラムを実行するものであってもよい。この場合、コンテナは仮想ECU5に相当する。
仮想化オペレーティングシステムを用いて起動した車載ECU2の制御部20においては、複数の仮想ECU5が生成される。図3の制御部20においては、第1仮想ECU51、第2仮想ECU52、及び第3仮想ECU53の3つの仮想ECU5が生成される。制御部20は時分割されて周期的に、第1仮想ECU51の仮想制御部5a、第2仮想ECU52の仮想制御部5a、及び第3仮想ECU53の仮想制御部5aに割り当てられる。図3の例においては、第1演算装置201において第1仮想ECU51が周期的に生成される。第1演算装置201には、生成された第1仮想ECU51の仮想制御部5aが割り当てられる。言い換えると第1演算装置201は、第1仮想ECU51として機能する。
第2演算装置202において、第2仮想ECU52、及び第3仮想ECU53が周期的に交互に切り替わって生成される。第2演算装置202には、生成された第2仮想ECU52の仮想制御部5aが割り当てられる。また第2演算装置202には、生成された第3仮想ECU53の仮想制御部5aが割り当てられる。言い換えると第2演算装置202は、生成された第2仮想ECU52として機能する。また第2演算装置202は、生成された第3仮想ECU53として機能する。以下、演算装置200において仮想ECU5が生成されることと、当該演算装置200が生成された仮想ECU5として機能することとを、演算装置200が仮想ECU5を生成するとも称する。
第3演算装置203は、全ての仮想ECU5を管理する仮想ECU管理プログラムを実行する。第3演算装置203は、仮想ECU管理プログラムを実行することにより、仮想化オペレーティングシステムのコントロールパネルとして機能する。言い換えると第3演算装置203は、仮想ECU管理プログラムを実行することにより、複数の仮想ECU5を管理する管理部1として機能する。
管理部1は、例えば記憶部21に記憶されている割当時間情報を参照することにより、仮想ECU5に対し、第1演算装置201の利用時間、又は第2演算装置202の利用時間を割り当てる処理、いわゆるスケジューリングを行う。例えば割当時間情報は、第1仮想ECU51が生成される周期及び第1仮想ECU51が割り当てられる時間を含む。また割当時間情報は、第2仮想ECU52が生成される周期及び第2仮想ECU52が割り当てられる時間と、第3仮想ECU53が生成される周期及び第3仮想ECU53が割り当てられる時間とを含む。以下、仮想ECU5が割り当てられる時間を、仮想ECU5の割当時間とも称する。例えば、第1仮想ECU51が割り当てられる時間を、第1仮想ECU51の割当時間とも称する。
管理部1はスケジューリングを行い、第1仮想ECU51、第2仮想ECU52及び第3仮想ECU53それぞれの動作を開始させる。言い換えると管理部1はスケジューリングによって、第1演算装置201に対する仮想ECU5の切り替えと、第2演算装置202に対する仮想ECU5の切り替えとを行う。仮想ECU5の切り替えは、演算装置200に対して仮想ECU5の仮想制御部5aの割り当てが行われている活性状態と、演算装置200に対して仮想ECU5の仮想制御部5aの割り当てが行われていない非活性状態との切り替えを含む。以下、仮想ECU5を非活性状態から活性状態へと遷移させることを活性化と称する。仮想ECU5を活性状態から非活性状態へと遷移させることを非活性化と称する。
管理部1は、第1演算装置201に対する仮想ECU5の切り替えを行うことによって、第1演算装置201に第1仮想ECU51を周期的に生成(活性化)させる。第1演算装置201に対する仮想ECU5の切り替えによって、第1演算装置201において第1仮想ECU51は、再度、生成される。また、第1演算装置201は、再度生成された上記の第1仮想ECU51の仮想制御部5aに割り当てられる。言い換えると、第1演算装置201に対する仮想ECU5の切り替えによって、第1仮想ECU51は、非活性化され、非活性化された後に活性化される。
管理部1は、第2演算装置202に対する仮想ECU5の切り替えを行うことによって、第2演算装置202に第2仮想ECU52、及び第3仮想ECU53を周期的に交互に生成させる。第2演算装置202に対する仮想ECU5の切り替えによって、第2演算装置202において生成される仮想ECU5は、第2仮想ECU52及び第3仮想ECU53の一方から第2仮想ECU52及び第3仮想ECU53の他方へ切り替わる。第2演算装置202において、第2仮想ECU52及び第3仮想ECU53の他方が生成される。第2演算装置202は、第2仮想ECU52及び第3仮想ECU53の他方の仮想制御部5aに割り当てられる。言い換えると、第2演算装置202に対する仮想ECU5の切り替えによって、第2仮想ECU52及び第3仮想ECU53の一方は非活性化される。また、第2仮想ECU52及び第3仮想ECU53の他方は活性化される。
記憶部21は領域分割されて、第1通信バッファ61、第2通信バッファ62及び第3通信バッファ63を含む通信バッファ6に割り当てられる。通信バッファ6は、仮想ECU5に含まれる。詳しくは、第1通信バッファ61は、第1仮想ECU51に含まれる。第1通信バッファ61は、第1送信バッファ61a及び第1受信バッファ61bを含む。第1送信バッファ61aには、第1仮想ECU51が他の仮想ECU5と通信を行う際、当該他の仮想ECU5へ送信する通信データが書き込まれる。第1受信バッファ61bには、第1仮想ECU51が受信する他の仮想ECU5からの通信データが書き込まれる。
第2通信バッファ62は、第2仮想ECU52に含まれる。第2通信バッファ62は、第2送信バッファ62a及び第2受信バッファ62bを含む。第2送信バッファ62aには、第2仮想ECU52が他の仮想ECU5と通信を行う際、当該他の仮想ECU5へ送信する通信データが書き込まれる。第2受信バッファ62bには、第2仮想ECU52が受信する他の仮想ECU5からの通信データが書き込まれる。
第3通信バッファ63は、第3仮想ECU53に含まれる。第3通信バッファ63は、第3送信バッファ63a及び第3受信バッファ63bを含む。第3送信バッファ63aには、第3仮想ECU53が他の仮想ECU5と通信を行う際、当該他の仮想ECU5へ送信する通信データが書き込まれる。第3受信バッファ63bには、第3仮想ECU53が受信する他の仮想ECU5からの通信データが書き込まれる。
第1送信バッファ61a、第2送信バッファ62a及び第3送信バッファ63aは、送信バッファに含まれる。以下、第1送信バッファ61a、第2送信バッファ62a及び第3送信バッファ63aを総称して、送信バッファ6aとも称する。第1受信バッファ61b、第2受信バッファ62b及び第3受信バッファ63bは、受信バッファに含まれる。以下、第1受信バッファ61b、第2受信バッファ62b及び第3受信バッファ63bを総称して、受信バッファ6bとも称する。
仮想ECU5の仮想記憶部及び通信バッファ6に書き込まれる情報、例えば通信データは、当該仮想ECU5の生成が終了した場合においても、記憶部21において割り当てられる上記の仮想ECU5の仮想記憶部及び通信バッファに保持される。仮想ECU5の生成が終了した場合は、仮想ECU5が非活性状態である場合を含む。
送信バッファ6aそれぞれに対して、送信バッファ6aに書き込まれる通信データが更新されている旨を示す送信バッファ更新フラグが、メッセージID等の通信データの識別子ごとに設けられている。なお通信データの識別子は、メッセージIDに限定されず、例えば通信データに含まれるポート番号の情報、又はIPアドレスでもよい。
図4は、送信バッファ6aの構成を例示する模式図である。送信バッファ6aには、通信データと、当該通信データの識別子と、当該通信データのデータ長と、当該通信データの送信バッファ更新フラグとが関連付けられて保存される領域が、識別子ごとに設けられている。図4の送信バッファ6aは複数の通信データを区別して保存することができる。
仮想ECU5は、他の仮想ECU5と通信する際、他の仮想ECU5へ送信する通信データを、自仮想ECUに含まれる送信バッファ6aに書き込む。仮想ECU5は、送信バッファ6aに新たな通信データを書き込む際、新たな通信データを、送信バッファ6aにおいて当該新たな通信データの識別子と同一の識別子に関連付けられた通信データに上書きする。言い換えると送信バッファ6aにおいて上記の識別子の通信データが更新される。
送信バッファ更新フラグは、オフ状態とオン状態とを含む。送信バッファ更新フラグがオフ状態である場合、送信バッファ6aの通信データは更新されていない。送信バッファ更新フラグがオン状態である場合、送信バッファ6aの通信データは更新されているので、送信バッファ6aにおいて送信バッファ更新フラグがオン状態である通信データは、新たに送信バッファ6aに書き込まれた通信データである。
仮想ECU5は、通信データの書き込み後、当該通信データの送信バッファ更新フラグをオン状態にする。なお仮想ECU5が送信バッファ6aに書き込む通信データの個数は1つでもよく、複数でもよい。仮想ECU5は、送信バッファ6aに複数の通信データを書き込んだ場合、それぞれの通信データの送信バッファ更新フラグをオン状態にする。
例えば第1仮想ECU51は、第2仮想ECU52及び第3仮想ECU53の少なくとも一方へ送信する通信データを、第1送信バッファ61aに書き込む。第1仮想ECU51は、第1送信バッファ61aへの通信データの書き込み後、第1送信バッファ61aにおいて当該通信データの送信バッファ更新フラグをオン状態にする。第1仮想ECU51と同様に、第2仮想ECU52は、通信データを第2送信バッファ62aに書き込む。第2仮想ECU52は通信データの書き込み後、第2送信バッファ62aにおいて当該通信データの送信バッファ更新フラグをオン状態にする。第3仮想ECU53は、通信データを第3送信バッファ63aに書き込む。第3仮想ECU53は通信データの書き込み後、第3送信バッファ63aにおいて当該通信データの送信バッファ更新フラグをオン状態にする。
受信バッファ6bそれぞれに対して、受信バッファ6bに書き込まれる通信データが更新されている旨を示す受信バッファ更新フラグが、通信データの識別子ごとに設けられている。図5は、受信バッファ6bの構成を例示する模式図である。受信バッファ6bには、通信データと、当該通信データの識別子と、当該通信データのデータ長と、当該通信データの受信バッファ更新フラグとが関連付けられて保存される領域が、識別子ごとに設けられている。図5の受信バッファ6bは複数の通信データを区別して保存することができる。詳細は後述するが、管理部1が受信バッファに通信データを書き込む。管理部1は、受信バッファ6bに新たな通信データを書き込む場合、新たな通信データを、受信バッファ6bにおいて当該新たな通信データの識別子と同一の識別子に関連付けられた通信データに上書きする。言い換えると受信バッファ6bにおいて上記の識別子の通信データが更新される。
受信バッファ更新フラグは、オフ状態とオン状態とを含む。受信バッファ更新フラグがオフ状態である場合、受信バッファ6bの通信データは更新されていない。受信バッファ更新フラグがオン状態である場合、受信バッファ6bの通信データは更新されているので、受信バッファ6bにおいて受信バッファ更新フラグがオン状態である通信データは、新たに受信バッファ6bに書き込まれた通信データである。
仮想ECU5は、自仮想ECUの受信バッファ6bにおける受信バッファ更新フラグがオン状態である場合、更新された通信データを当該受信バッファ6bから読み出す。詳しくは受信バッファ更新フラグがオン状態である場合は、受信バッファ6bに書き込まれた通信データに関連付けられた受信バッファ更新フラグの少なくとも1つがオン状態である場合である。この場合、仮想ECU5は、自仮想ECUの受信バッファ6bにおいて受信バッファ更新フラグがオン状態である通信データを読み出す。例えば受信バッファ更新フラグがオン状態である通信データの個数が複数である場合、仮想ECU5は、複数の当該通信データを読み出す。仮想ECU5は、通信データの読み出し後、当該通信データの受信バッファ更新フラグをオン状態からオフ状態に変更する。仮想ECU5は、読み出した通信データを用いてプログラムを実行する。
例えば第1仮想ECU51は、第1受信バッファ61bの受信バッファ更新フラグがオン状態である場合、更新された通信データを第1受信バッファ61bから読み出す。第1仮想ECU51は通信データの読み出し後、第1受信バッファ61bの受信バッファ更新フラグをオフ状態にする。第2仮想ECU52は、第2受信バッファ62bの受信バッファ更新フラグがオン状態である場合、更新された通信データを第2受信バッファ62bから読み出す。第2仮想ECU52は通信データの読み出し後、第2受信バッファ62bの受信バッファ更新フラグをオフ状態にする。第3仮想ECU53は、第3受信バッファ63bの受信バッファ更新フラグがオン状態である場合、更新された通信データを第3受信バッファ63bから読み出す。第3仮想ECU53は通信データの読み出し後、第3受信バッファ63bの受信バッファ更新フラグをオフ状態にする。
図3に示すように記憶部21は、第1仮想ECU51、第2仮想ECU52、第3仮想ECU53、及び管理部1のうち、管理部1のみがアクセス可能な記憶領域210を含む。記憶領域210には、記憶領域210に書き込まれる通信データが更新されている旨を示す記憶領域更新フラグが、通信データの識別子ごとに設けられている。詳細は後述するが管理部1は、送信バッファ6aに書き込まれた通信データを記憶領域210に書き込み、当該通信データを記憶領域210に一時保存する。例えば通信データは、当該通信データの識別子と、当該通信データのデータ長と、当該通信データの記憶領域更新フラグと関連付けられて記憶領域210に書き込まれる。記憶領域210には、1又は複数の通信データが区別されて書き込まれる。管理部1は記憶領域210に新たな通信データを書き込む場合であって、当該新たな通信データの識別子と同一の識別子に関連付けられた通信データが記憶領域210に記憶されている場合、新たな通信データを上記の通信データに上書きする。言い換えると記憶領域210において上記の識別子の通信データは更新される。
記憶領域更新フラグは、オフ状態とオン状態とを含む。記憶領域更新フラグがオフ状態である場合、記憶領域210の通信データは更新されていない。記憶領域更新フラグがオン状態である場合、記憶領域210の通信データは更新されているので、記憶領域210において記憶領域更新フラグがオン状態である通信データは、新たに記憶領域210に書き込まれた通信データである。
管理部1は、3つの仮想ECU5のうち、一の仮想ECU5の送信バッファ6aにおける送信バッファ更新フラグがオン状態である場合、更新された通信データを当該送信バッファ6aから読み出す。詳しくは、上記の送信バッファ更新フラグがオン状態である場合は、上記の送信バッファ6aに書き込まれた通信データに関連付けられた送信バッファ更新フラグの少なくとも1つがオン状態である場合である。送信バッファ更新フラグがオン状態である場合、管理部1は、一の仮想ECU5の送信バッファ6aから送信バッファ更新フラグがオン状態である通信データを読み出す。管理部1は読み出した通信データを記憶領域210に書き込む。詳細は後述するが、仮想ECU5の送信バッファ6aからの通信データの読み出しは、演算装置200に対して上記の仮想ECU5の仮想制御部5aが割り当てられていない期間、即ち制御部20に対して上記の仮想ECU5の仮想制御部5aが割り当てられていない期間に行われる。以下、制御部20に対して仮想ECU5の仮想制御部5aが割り当てられていない期間を、制御部20に対して仮想ECU5が割り当てられていない期間とも称する。制御部20に対して仮想ECU5が割り当てられていない期間は、当該仮想ECU5が非活性状態である期間である。制御部20に対して仮想ECU5が割り当てられていない期間は、仮想ECU5が動作していない期間に相当する。
管理部1は、記憶領域210への通信データの書き込み後、一の仮想ECU5の送信バッファ6aにおいて当該通信データの送信バッファ更新フラグをオン状態からオフ状態に変更する。更に管理部1は、記憶領域210において上記の通信データの記憶領域更新フラグをオン状態にする。
例えば管理部1は、第1演算装置201に第1仮想ECU51の仮想制御部5aが割り当てられていない期間に、第1送信バッファ61aの送信バッファ更新フラグがオン状態であるかを判定する。上記の送信バッファ更新フラグがオン状態である場合、管理部1は、第1送信バッファ61aから送信バッファ更新フラグがオン状態である通信データを読み出す。管理部1は、当該送信バッファ更新フラグをオフ状態にする。管理部1は、読み出した通信データを記憶領域210に書き込む。管理部1は、書き込んだ通信データの記憶領域更新フラグをオン状態にする。
管理部1は、記憶領域210に書き込まれた通信データのうち、記憶領域更新フラグがオン状態である通信データであって、次に動作を開始させる仮想ECU5が送信先である通信データを、次に動作を開始させる仮想ECU5の受信バッファ6bに書き込む。送信元の仮想ECU5の送信バッファ6aに書き込まれた通信データは、記憶領域210を介して、送信先の仮想ECU5の受信バッファ6bへ書き込まれる。例えば管理部1は、通信データの送信先に関する情報に基づき、送信先の仮想ECU5を判別する。例えば送信先に関する情報は、通信データに含まれていてもよく、予め記憶部21に記憶してあってもよい。詳細は後述するが、管理部1による受信バッファ6bへの通信データの書き込みは、制御部20に仮想ECU5が割り当てられていない期間に行われる。
管理部1は、受信バッファ6bへの通信データの書き込み後、当該受信バッファ6bにおいて書き込んだ通信データの受信バッファ更新フラグをオン状態にする。更に管理部1は、記憶領域210において上記の通信データの記憶領域更新フラグをオフ状態にする。例えば複数の仮想ECU5が通信データの送信先である場合、管理部1は、送信先の仮想ECU5の受信バッファ6bの全てに当該通信データを書き込んだ後、当該通信データの記憶領域更新フラグをオフにする。送信先の仮想ECU5は、上述のように受信バッファ更新フラグに基づき、自仮想ECUの受信バッファ6bに書き込まれた通信データを読み出す。
例えば、管理部1が第1仮想ECU51の動作を開始させる場合、管理部1は、第1仮想ECU51の動作を開始させる前に、記憶領域更新フラグがオン状態であるかを判定する。記憶領域更新フラグがオン状態である場合は、記憶領域210に書き込まれた通信データの記憶領域更新フラグの少なくとも1つがオン状態である場合である。記憶領域更新フラグがオン状態である場合、管理部1は、記憶領域更新フラグがオン状態である通信データであって、送信先が第1仮想ECU51である通信データを、第1受信バッファ61bに書き込む。管理部1は、第1受信バッファ61bへの通信データの書き込み後、第1受信バッファ61bにおいて、書き込んだ通信データの受信バッファ更新フラグをオン状態にする。また管理部1は、記憶領域210において上記の通信データの記憶領域更新フラグをオフ状態にする。
例えば管理部1は、記憶領域更新フラグがオン状態である通信データを、当該通信データの送信元である仮想ECU5以外の全ての仮想ECU5の受信バッファ6bそれぞれに書き込んでもよい。即ち管理部1は、通信データの送信先を考慮せずに、次に動作させる仮想ECU5の受信バッファ6bに、記憶領域更新フラグがオン状態である通信データを書き込んでもよい。この場合、管理部1は、当該通信データの送信元である仮想ECU5以外の全ての仮想ECU5の受信バッファ6bに通信データを書き込んだ際に、記憶領域更新フラグをオン状態からオフ状態にする。各仮想ECU5は、受信バッファ6bに書き込まれた通信データを読み出す際、当該通信データが自仮想ECUの受信対象であるか否かを判定する。仮想ECU5は、通信データが自仮想ECUの受信対象である場合、受信バッファ6bから当該通信データを取得する。例えば仮想ECU5は、通信データが自仮想ECUの受信対象でない場合、当該通信データを破棄する。例えば受信バッファ6bは、当該受信バッファ6bを含む仮想ECU5が受信対象であるメッセージのみが書き込まれる構成でもよい。
図6は、複数の仮想ECU5の間における通信の一例を示す説明図である。図6の例において通信データの送信先は、送信元以外の全ての仮想ECU5である。上述のように、第3演算装置203は管理部1として機能する。図6において管理部1は、HV(Hypervisor)と示してある。管理部1は上述のように、周期的に、第1演算装置201に第1仮想ECU51を生成させ、生成させた第1仮想ECU51の仮想制御部5aを第1演算装置201に対して割り当てる。第1仮想ECU51が生成される期間と、再度、第1仮想ECU51が生成される期間との間には所定の時間が設けてある。
管理部1は上述のように、周期的に、第2演算装置202に第2仮想ECU52と第3仮想ECU53とを交互に生成させ、生成させた第2仮想ECU52又は第3仮想ECU53の仮想制御部5aを第2演算装置202に対して割り当てる。第2仮想ECU52が生成される期間と、第3仮想ECU53が生成される期間との間には所定の時間が設けてある。第1仮想ECU51に関する所定の時間と、第2仮想ECU52及び第3仮想ECU53に関する所定の時間とは同一の時間でもよく、異なる時間でもよい。図6において、第1仮想ECU51が生成される期間は、第2仮想ECU52が生成される期間及び第3仮想ECU53が生成される期間それぞれよりも長い。
図6において、管理部1は、第1演算装置201に第1仮想ECU51の生成を開始させ、第2演算装置202に第2仮想ECU52の生成を開始させる。仮想ECU5の生成の開始は、仮想ECU5の活性化を含む。第2仮想ECU52は、通信データを第2送信バッファ62aに書き込み、上述のように第2送信バッファ62aの送信バッファ更新フラグをオン状態にする。図6において、実線の矢印は仮想ECU5による通信データの書き込み又は読み出しを示す。破線の矢印は管理部1による通信データの書き込み又は読み出しを示す。管理部1は、第2演算装置202に第2仮想ECU52の生成を終了させ、第2演算装置202に第3仮想ECU53の生成を開始させる。言い換えると管理部1は、第2演算装置202に対する仮想ECU5の切り替えを行う。仮想ECU5の生成の終了は、仮想ECU5の非活性化を含む。
第2演算装置202が第2仮想ECU52の生成を終了した時点から、第2演算装置202が第3仮想ECU53の生成を開始する時点までの期間に、管理部1は以下の処理を行う。管理部1は上述のように送信バッファ更新フラグに基づき、第2送信バッファ62aの送信バッファ更新フラグがオン状態である通信データを第2送信バッファ62aから読み出し、当該通信データを記憶領域210に書き込む。上述のように管理部1は、第2送信バッファ62aにおいて読み出した通信データの送信バッファ更新フラグをオン状態からオフ状態に変更し、記憶領域210に書き込んだ通信データの記憶領域更新フラグをオン状態にする。なお、図6の記憶領域210においては説明のために、記憶領域210は通信データの送信元ごとに区別して示してある。
管理部1が次に動作を開始させる仮想ECU5は第3仮想ECU53であるので、管理部1は上述のように記憶領域更新フラグに基づき、記憶領域更新フラグがオン状態である通信データを記憶領域210から読み出し、当該通信データを第3受信バッファ63bに書き込む。図6の例において第3受信バッファ63bには、第2仮想ECU52が送信元である通信データが書き込まれる。管理部1は上述のように、第3受信バッファ63bにおいて書き込んだ通信データの受信バッファ更新フラグをオン状態にする。第2演算装置202が第2仮想ECU52の生成を終了した時点から、第2演算装置202が第3仮想ECU53の生成を開始する時点までの期間は、制御部20に対して仮想ECU5の仮想制御部5aが割り当てられていない期間に含まれる。
第2演算装置202において生成された第3仮想ECU53は、上述のように受信バッファ更新フラグに基づき、第3受信バッファ63bの受信バッファ更新フラグがオン状態である通信データを第3受信バッファ63bから読み出す。図6の例において第3仮想ECU53は、第2仮想ECU52が送信元である通信データを読み出す。第3仮想ECU53及び第2仮想ECU52の間において通信データが記憶領域210を介して授受される。即ち第3仮想ECU53及び第2仮想ECU52の間の通信が行われる。第3仮想ECU53は、読み出した通信データの受信バッファ更新フラグをオン状態からオフ状態に変更する。
第1仮想ECU51は、通信データを第1送信バッファ61aに書き込み、上述のように第1送信バッファ61aの送信バッファ更新フラグをオン状態にする。管理部1は、第1演算装置201に第1仮想ECU51の生成を終了させ、第1演算装置201に再度、第1仮想ECU51の生成を開始させる。言い換えると管理部1は、第2演算装置202に対する仮想ECU5の切り替えを行う。
第1演算装置201が第1仮想ECU51の生成を終了した時点から、第1演算装置201が再度、第1仮想ECU51の生成を開始する時点までの期間に、管理部1は以下の処理を行う。管理部1は上述のように送信バッファ更新フラグに基づき、第1送信バッファ61aの送信バッファ更新フラグがオン状態である通信データを第1送信バッファ61aから読み出し、当該通信データを記憶領域210に書き込む。上述のように管理部1は、第1送信バッファにおいて読み出した通信データの送信バッファ更新フラグをオン状態からオフ状態に変更し、記憶領域210に書き込んだ通信データの記憶領域更新フラグをオン状態にする。
管理部1が次に動作を開始させる仮想ECU5は、第1仮想ECU51であるので、管理部1は上述のように記憶領域更新フラグに基づき、記憶領域更新フラグがオン状態である通信データを記憶領域210から読み出し、当該通信データを第1受信バッファ61bに書き込む。図6の例において第1受信バッファ61bには、第2仮想ECU52が送信元である通信データが書き込まれる。管理部1は、第1受信バッファ61bにおいて書き込んだ通信データの受信バッファ更新フラグをオン状態にする。図6の例の各通信データの送信先は、送信元以外の全ての仮想ECU5である。第2仮想ECU52が送信元である通信データは、第1受信バッファ61b及び第3受信バッファ63bに書き込まれたので、管理部1は記憶領域210において、第2仮想ECU52が送信元である通信データの記憶領域更新フラグをオフ状態にする。第1演算装置201が第1仮想ECU51の生成を終了した時点から、第1演算装置201が再度、第1仮想ECU51の生成を開始する時点までの期間は、制御部20に対して仮想ECU5の仮想制御部5aが割り当てられていない期間に含まれる。
再度、第1演算装置201において生成された第1仮想ECU51は、上述のように受信バッファ更新フラグに基づき、第1受信バッファ61bの受信バッファ更新フラグがオン状態である通信データを第1受信バッファ61bから読み出し、当該通信データを取得する。第1仮想ECU51は、第1受信バッファ61bにおいて読み出した通信データの受信バッファ更新フラグをオン状態からオフ状態に変更する。
図6の例においては、第1演算装置201が第1仮想ECU51の生成を終了した時点から、第1演算装置201が再度、第1仮想ECU51の生成を開始する時点までの期間に、第3仮想ECU53は、通信データを第3送信バッファ63aに書き込み、第3送信バッファ63aにおいて書き込んだ通信データの送信バッファ更新フラグをオン状態にする。
管理部1は、第2演算装置202に第3仮想ECU53の生成を終了させ、第2演算装置202に第2仮想ECU52の生成を開始させる。言い換えると管理部1は、第2演算装置202に対する仮想ECU5の切り替えを行う。第2演算装置202が第3仮想ECU53の生成を終了した時点から、第2演算装置202が第2仮想ECU52の生成を開始する時点までの期間に、管理部1は以下の処理を行う。管理部1は上述のように送信バッファ更新フラグに基づき、第3送信バッファ63aの送信バッファ更新フラグがオン状態である通信データを第3送信バッファ63aから読み出し、当該通信データを記憶領域210に書き込む。上述のように管理部1は、読み出した通信データの送信バッファ更新フラグをオン状態からオフ状態に変更し、書き込んだ通信データの記憶領域更新フラグをオン状態にする。
管理部1が次に動作を開始させる仮想ECU5は第2仮想ECU52であるので、管理部1は上述のように記憶領域更新フラグに基づき、記憶領域更新フラグがオン状態である通信データを記憶領域210から読み出し、当該通信データを第2受信バッファ62bに書き込む。図6の例において第2受信バッファ62bには、第1仮想ECU51が送信元である通信データと、第3仮想ECU53が送信元である通信データとが書き込まれる。第2演算装置202が第3仮想ECU53の生成を終了した時点から、第2演算装置202が第2仮想ECU52の生成を開始する時点までの期間は、制御部20に対して仮想ECU5の仮想制御部5aが割り当てられていない期間に含まれる。
第2演算装置202において生成された第2仮想ECU52は、上述のように受信バッファ更新フラグに基づき、第2受信バッファ62bの受信バッファ更新フラグがオン状態である通信データを第2受信バッファ62bから読み出す。図6の例において第2仮想ECU52は、2つの通信データを読み出し、第2受信バッファ62bにおいて読み出した2つのデータの通信データの受信バッファ更新フラグをオフ状態にする。第2仮想ECU52は、新たな通信データを第2送信バッファ62aに書き込み、上述のように第2送信バッファ62aの送信バッファ更新フラグをオン状態にする。管理部1は、第2演算装置202に対する仮想ECU5の切り替えを行う。
第2仮想ECU52の生成の終了時点から第3仮想ECU53の生成の開始時点までの期間に、管理部1は以下の処理を行う。管理部1は、第2送信バッファ62aにおいて、第2送信バッファ62aの送信バッファ更新フラグがオン状態である通信データを記憶領域210に書き込む。管理部1は、上記の送信バッファ更新フラグをオン状態からオフ状態に変更し、書き込んだ通信データの記憶領域更新フラグをオン状態にする。
更に管理部1は、記憶領域更新フラグがオン状態である通信データを記憶領域210から読み出し、当該通信データを第3受信バッファ63bに書き込む。図6の例において第3受信バッファ63bには、第1仮想ECU51が送信元である通信データと、第2仮想ECU52が送信元である通信データとが書き込まれる。第1仮想ECU51が送信元である通信データは、第2受信バッファ62b及び第3受信バッファ63bに書き込まれたので、管理部1は記憶領域210において、第1仮想ECU51が送信元である通信データの記憶領域更新フラグをオフ状態にする。
生成された第3仮想ECU53は、受信バッファ更新フラグに基づき、第3受信バッファ63bの受信バッファ更新フラグがオン状態である通信データを第3送信バッファ63aから読み出す。第3仮想ECU53は、第3受信バッファ63bにおいて読み出した通信データの受信バッファ更新フラグをオフ状態にする、
上述のように、送信バッファ更新フラグ、記憶領域更新フラグ、及び受信バッファ更新フラグを含む更新フラグに基づき、通信データの読み出し又は書き込みは行われる。また通信データの読み出し又は書き込みに応じて、更新フラグは設定される。
図7は、管理部1として機能する第3演算装置203が行う処理と、仮想ECU5に割り当てられる演算装置200が行う仮想ECU5の生成に係る処理とを例示するフローチャートである。本実施形態において仮想ECU5に割り当てられる演算装置200は、第1演算装置201及び第2演算装置202である。例えば、第3演算装置203は、車両Cの図示しないIG(イグニッション)スイッチがオフ状態からオン状態へ遷移した際に、管理部1として以下の処理を行う。また仮想ECU5に割り当てられる演算装置200は、IGスイッチがオフ状態からオン状態へ遷移した際に、以下の処理を行う。以下、ステップをSと省略する。
仮想ECU5に割り当てられる演算装置200は、仮想ECU5の生成開始を示す生成開始信号を第3演算装置203から取得し(S101)、仮想ECU5の生成を開始する(S102)。詳しくは、上記の演算装置200のうち、第1演算装置201は第1仮想ECU51を生成する。また、第2演算装置202は第2仮想ECU52及び第3仮想ECU53の一方を生成する。
仮想ECU5に割り当てられる演算装置200は、生成した仮想ECU5の受信バッファ6bの受信バッファ更新フラグがオン状態であるか否かを判定する(S103)。受信バッファ更新フラグがオン状態でない場合(S103:NO)、即ち上記の受信バッファ更新フラグがオフ状態である場合、仮想ECU5に割り当てられる演算装置200は後述のS106の処理を行う。上記の受信バッファ更新フラグがオン状態でない場合は、生成された仮想ECU5の受信バッファ6bに書き込まれた通信データと関連付けられた受信バッファ更新フラグの全てがオフ状態である場合である。
受信バッファ更新フラグがオン状態である場合(S103:YES)、仮想ECU5に割り当てられる演算装置200は上述のように、受信バッファ更新フラグがオン状態である通信データを上記の受信バッファ6bから読み出す(S104)。上記の受信バッファ更新フラグがオン状態である場合は、生成された仮想ECU5の受信バッファ6bに書き込まれた通信データと関連付けられた受信バッファ更新フラグの少なくとも1つがオン状態である場合である。仮想ECU5に割り当てられる演算装置200は上述のように、読み出した通信データの受信バッファ更新フラグをオフ状態にする(S105)。仮想ECU5に割り当てられる演算装置200は、プログラムを実行する(S106)。なお当該プログラムは、仮想ECU5上にて実行される。例えば仮想ECU5に割り当てられる演算装置200は、S104の処理にて通信データを受信バッファ6bから読み出した際、読み出した通信データを用いてプログラムを実行する。
仮想ECU5に割り当てられる演算装置200は、生成した仮想ECU5の送信バッファ6aに通信データを書き込む(S107)。上記の演算装置200は上述のように、当該送信バッファ6aへの通信データの書き込み後、書き込んだ通信データの送信バッファ更新フラグをオン状態にする(S108)。仮想ECU5に割り当てられる演算装置200は、仮想ECU5の生成終了を示す生成終了信号を第3演算装置203から取得し(S109)、仮想ECU5の生成を終了する(S110)。仮想ECU5に割り当てられる演算装置200はS101の処理を行う。生成される仮想ECU5は切り替わる。詳しくは、上記の演算装置200のうち、第1演算装置201は、第1仮想ECU51の生成を終了し、再度、第1仮想ECU51の生成を開始する。また第2演算装置202は、第2仮想ECU52及び第3仮想ECU53の一方の生成を終了し、第2仮想ECU52及び第3仮想ECU53の他方の生成を開始する。仮想ECU5に割り当てられる演算装置200は、例えばIGスイッチがオン状態からオフ状態へ遷移した際に、処理を終了する。
第3演算装置203は、上述の割当時間情報に基づき、生成開始信号を仮想ECU5に割り当てられる演算装置200へ出力する(S111)。第3演算装置203は第1演算装置201に第1仮想ECU51の生成を開始させる。又は、第3演算装置203は第2演算装置202に、第2仮想ECU52及び第3仮想ECU53の一方の生成を開始させる。
第3演算装置203は、仮想ECU5に割り当てられる演算装置200に仮想ECU5の生成を開始させた時点から、仮想ECU5の割当時間が経過したか否かを判定する(S112)。例えば第3演算装置203は、第1演算装置201に第1仮想ECU51の生成を開始させた際、第1仮想ECU51の生成を開始させた時点から、第1仮想ECU51の割当時間が経過したか否かを判定する。
仮想ECU5の割当時間が経過していない場合(S112:NO)、第3演算装置203は、再度S112の処理を行うべくループ処理を行う。仮想ECU5の割当時間が経過した場合(S112:YES)、第3演算装置203は、割当時間情報に基づき、仮想ECU5に割り当てられる演算装置200へ生成終了信号を出力し(S113)、第1演算装置201又は第2演算装置202に仮想ECU5の生成を終了させる。
第3演算装置203は、S112の処理の代わりに、仮想ECU5に割り当てられる演算装置200に仮想ECU5の生成を開始させた時点から、仮想ECU5の割当時間が経過するまで待機処理を行ってもよい。第3演算装置203は、当該待機処理の後、S113の処理を行う。
第3演算装置203は、生成を終了させた上記の仮想ECU5の送信バッファ6aにおいて、送信バッファ更新フラグがオン状態であるか否かを判定する(S114)。上記の送信バッファ更新フラグがオン状態でない場合(S114:NO)、後述のS117の処理を行う。上記の送信バッファ更新フラグがオン状態でない場合は、上記の仮想ECU5の送信バッファ6aに書き込まれた通信データと関連付けられた送信バッファ更新フラグの全てがオフ状態である場合である。
送信バッファ更新フラグがオン状態である場合(S114:YES)、第3演算装置203は上述のように、送信バッファ更新フラグがオン状態である通信データを上記の送信バッファ6aから読み出し、当該通信データを記憶領域210に書き込む(S115)。上記の送信バッファ更新フラグがオン状態である場合は、上記の送信バッファ6aに書き込まれた通信データと関連付けられた送信バッファ更新フラグの少なくとも1つがオン状態である場合である。上述のように第3演算装置203は、記憶領域210への通信データの書き込み後、送信バッファ6aにおいて読み出した通信データの送信バッファ更新フラグをオン状態からオフ状態に変更し、記憶領域210において書き込んだ通信データの記憶領域更新フラグをオン状態にする。即ち、第3演算装置203は、送信バッファ更新フラグ、及び記憶領域更新フラグを更新する(S116)。
第3演算装置203は、記憶領域更新フラグがオン状態であるか否かを判定する(S117)。記憶領域更新フラグがオン状態である場合(S117:YES)、第3演算装置203は以下の処理を行う。第3演算装置203は上述のように、記憶領域210に書き込まれた通信データのうち、記憶領域更新フラグがオン状態である通信データであって、次に動作を開始させる仮想ECU5が送信先である通信データを、記憶領域210から読み出す。第3演算装置203は記憶領域210から読み出した通信データを、次に動作を開始させる仮想ECU5の受信バッファ6bに書き込む(S118)。上記の記憶領域更新フラグがオン状態である場合は、記憶領域210に書き込まれた通信データと関連付けられた記憶領域更新フラグの少なくとも1つがオン状態である場合である。なお第3演算装置203は上述のように、通信データの送信先を考慮せずに、次に動作させる仮想ECU5の受信バッファ6bに、記憶領域更新フラグがオン状態である通信データを書き込んでもよい。
上述のように第3演算装置203は、受信バッファ6bへの通信データの書き込み後、記憶領域210において読み出した通信データの記憶領域更新フラグをオン状態からオフ状態に変更する。更に第3演算装置203は、受信バッファ6bにおいて書き込んだ通信データの受信バッファ更新フラグをオン状態にする。即ち第3演算装置203は、記憶領域更新フラグ及び受信バッファ更新フラグを更新する(S119)。例えば通信データの送信先の個数が複数である際、第3演算装置203は、当該通信データを全ての送信先の仮想ECU5の受信バッファ6bに書き込んだ際に当該通信データの記憶領域更新フラグをオン状態からオフ状態に変更する。
第3演算装置203はS111の処理を行い、第1演算装置201又は第2演算装置202に対する仮想ECU5の切り替えを行う。詳しくは、第3演算装置203は第1演算装置201に再度、第1仮想ECU51の生成を開始させる。又は、第3演算装置203は第2演算装置202に、第2仮想ECU52及び第3仮想ECU53の他方の生成を開始させる。第3演算装置203は、例えばIGスイッチがオン状態からオフ状態へ遷移した際に、処理を終了する。
記憶領域更新フラグがオン状態でない場合(S117:NO)、第3演算装置203はS111の処理を行い、第1演算装置201又は第2演算装置202に対する仮想ECU5の切り替えを行う。上記の記憶領域更新フラグがオン状態でない場合は、記憶領域210に書き込まれた通信データと関連付けられた記憶領域更新フラグの全てがオフ状態である場合である。
本実施形態においては、車載ECU2において複数の仮想ECU5が生成される。制御部20に含まれる第1演算装置201、第2演算装置202及び第3演算装置203のうち、第3演算装置203は管理部1として機能する。第1演算装置201及び第2演算装置202それぞれに対して、仮想ECU5の仮想制御部5aが割り当てられる。第1演算装置201及び第2演算装置202それぞれは、仮想ECU5として機能する。仮想ECU5は、自仮想ECUの通信バッファ6に対して通信データの書き込み及び読み出しを行う。管理部1は、送信バッファ6aに書き込まれた通信データを読み出し、当該通信データを記憶領域210に書き込む。また管理部1は、記憶領域210に書き込んだ通信データを、送信先の仮想ECU5の受信バッファ6bに書き込む。複数の仮想ECU5の間において通信データが記憶領域210を介して授受される。即ち複数の仮想ECU5は、記憶領域210を介して通信する。記憶領域210は、管理部1のみがアクセス可能なので、仮想ECU5が誤って記憶領域210に対して通信データの書き込み及び読み出しを行うことを防止することができる。
通信データの授受は管理部1によって記憶領域210を介して行われるので、一の仮想ECU5が通信データを書き込んでいる間に、他の仮想ECU5が当該通信データを読み出すことはない。上述のように管理部1は通信データの書き込み及び読み出しを、第1演算装置201又は第2演算装置202に仮想制御部5aが割り当てられていない期間に行うので、仮想ECU5による通信バッファ6への通信データの書き込みと、管理部1による通信バッファ6からの通信データの読み出しとは競合しない。また、管理部1による通信バッファ6への通信データの書き込みと、仮想ECU5による通信バッファ6からの通信データの読み出しとは競合しない。詳しくは、送信バッファ6aにおいて通信データの書き込み及び読み出しが競合することを防止することができる。また、受信バッファ6bにおいて通信データの書き込み及び読み出しが競合することを防止することができる。従って、複数の仮想ECU5の間において、通信データの書き込み及び読み出しが競合せずに、適切に通信データの授受を行うことができる。また複数の仮想ECU5の間において、効率的に通信データの授受を行うことができる。即ちアクセスの競合が発生することなく、複数の仮想ECU5の間の通信を効率的に行うことができる。
上述のように第3演算装置203が管理部1として機能する。即ち1つの演算装置200が管理部1として機能する。1つの演算装置200による管理部1が記憶領域210に対する通信データの書き込み及び読み出しを行うので、記憶領域210に対する通信データの書き込み及び読み出しが競合することなく、複数の仮想ECU5の間における通信データの授受を行うことができる。
仮想ECU5は、当該仮想ECU5の受信バッファ6bの受信バッファ更新フラグがオン状態である場合、当該受信バッファ6bから通信データを読み出す。仮想ECU5は、通信データの読み出し後、受信バッファ更新フラグをオン状態からオフ状態へ変更するので、読み出し済みの通信データを再度読み出してしまうことを防止することができる。仮想ECU5は、受信バッファ更新フラグに基づき受信バッファ6bから通信データを読み出すことによって、新たに送信された通信データを適切に読み出すことができる。
仮想ECU5は送信バッファ6aに通信データを書き込んだ後、送信バッファ更新フラグをオン状態にする。送信バッファ更新フラグがオン状態である場合、管理部1は、送信バッファ6aに書き込まれた上記の通信データを記憶領域210に書き込み、送信バッファ6aへの通信データの書き込み後に送信バッファ更新フラグをオフ状態にする。送信バッファ更新フラグに基づき、送信バッファ6aに書き込まれた通信データの読み出しが行われるので、管理部1は、新たに送信された通信データを送信バッファ6aから適切に読み出すことができる。
管理部1は、送信バッファ6aへの通信データの書き込み後に記憶領域更新フラグをオン状態にする。記憶領域更新フラグがオン状態である場合、管理部1は、記憶領域210から通信データを読み出し、読み出した通信データを送信先の仮想ECU5の受信バッファ6bに書き込む。管理部1は受信バッファ6bへの書き込み後、受信バッファ更新フラグをオン状態にし、記憶領域更新フラグをオン状態からオフ状態へ変更する。記憶領域更新フラグに基づき、記憶領域210からの通信データの読み出し及び当該通信データの受信バッファ6bへの書き込みが行われるので、管理部1は記憶領域210に書き込まれた通信データのうち、受信バッファ6bに書き込まれていない通信データを判別することができる。管理部1は受信バッファ6bへの通信データの書き込み後に、受信バッファ更新フラグをオン状態にするので、仮想ECU5は、新たに送信された通信データを受信バッファ6bから適切に読み出すことができる。
(実施形態2)
実施形態2に係る構成の内、実施形態1と同様な構成部については同じ符号を付し、その詳細な説明を省略する。実施形態2は、通信データが更新された回数を示すカウント値に基づき、通信データを記憶領域210又は受信バッファ6bに書き込む車載ECU2に関する。
実施形態2の車載ECU2は、実施形態1と同様に、第1演算装置201、第2演算装置202及び第3演算装置203を含む制御部20を備える。実施形態1と同様、第1演算装置201は第1仮想ECU51を周期的に生成する。また、第2演算装置202は第2仮想ECU52及び第3仮想ECU53を周期的に、交互に生成する。また、第3演算装置203は管理部1として機能する。
第1仮想ECU51、第2仮想ECU52及び第3仮想ECU53を含む複数の仮想ECU5の送信バッファ6aそれぞれには、送信バッファ6aに通信データが書き込まれた回数を示す送信バッファカウント値が通信データの識別子ごとに設けられている。送信バッファカウント値は、実施形態1の送信バッファ更新フラグと同様に、送信バッファ6aにおいて、通信データの識別子ごとに通信データと関連付けられている。仮想ECU5は自仮想ECUの送信バッファ6aに通信データを書き込んだ後、送信バッファ6aにおいて、書き込んだ通信データの送信バッファカウント値を1増やす。即ち仮想ECU5は、当該送信バッファカウント値を更新する。例えば、仮想ECU5は、送信バッファカウント値が最大値である際に当該送信バッファカウント値を更新する場合、送信バッファカウント値を初期値、例えば0に更新する。なお仮想ECU5は実施形態1と同様に、送信バッファ6aへの通信データの書き込みにおいて、書き込む通信データを、既に書き込まれている同一の識別子の通信データに上書きする。
記憶領域210には、記憶領域210に通信データが書き込まれた回数を示す記憶領域カウント値が通信データの識別子ごとに設けられている。記憶領域カウント値は、実施形態1の記憶領域更新フラグと同様に、記憶領域210において、通信データの識別子ごとに通信データと関連付けられている。管理部1は記憶領域210に通信データを書き込んだ後、記憶領域210において、書き込んだ通信データの記憶領域カウント値を1増やす。即ち管理部1は、当該記憶領域カウント値を更新する。例えば、管理部1は、記憶領域カウント値が最大値である際に当該記憶領域カウント値を更新する場合、記憶領域カウント値を初期値、例えば0に更新する。
記憶領域210への通信データの書き込みは、実施形態1と同様に、制御部20に対して仮想ECU5の仮想制御部5aが割り当てられていない期間に、管理部1によって行われる。上記の期間に管理部1は送信バッファカウント値と、記憶領域カウント値とを比較し、送信バッファカウント値と記憶領域カウント値とが異なる場合に送信バッファ6aの通信データを記憶領域210に書き込む。詳しくは、送信バッファカウント値と記憶領域カウント値とが異なる場合は、送信バッファ6aにおける一の通信データの送信バッファカウント値と、記憶領域210における当該一の通信データの記憶領域カウント値とが異なる場合である。この場合、送信バッファ6aにおける一の通信データは、新たに仮想ECU5から送信される通信データである。このように送信バッファカウント値と記憶領域カウント値とが異なる場合に、管理部1は、記憶領域カウント値と異なる送信バッファカウント値の通信データを送信バッファ6aから読み出し、当該通信データを記憶領域210に書き込む。
管理部1は、記憶領域210への通信データの書き込み後に、当該通信データの記憶領域カウント値を、送信バッファカウント値と同一の値に更新する。詳しくは、管理部1は、記憶領域210へ書き込んだ通信データの記憶領域カウント値を、送信バッファ6aにて上記の通信データの識別子と同一の識別子の通信データと関連付けられた送信バッファカウント値と同一の値に更新する。
複数の仮想ECU5の受信バッファ6bそれぞれには、実施形態1と同様に、受信バッファ更新フラグが通信データの識別子ごとに設けられている。また複数の仮想ECU5の受信バッファ6bそれぞれには、受信バッファ6bに通信データが書き込まれた回数を示す受信バッファカウント値が通信データの識別子ごとに設けられている。受信バッファカウント値は、受信バッファ更新フラグと同様に、受信バッファ6bにおいて、通信データの識別子ごとに通信データと関連付けられている。管理部1は、送信先の仮想ECU5の受信バッファ6bに通信データを書き込んだ後、当該受信バッファ6bにおいて、書き込んだ通信データの受信バッファカウント値を1増やす。即ち管理部1は、当該受信バッファカウント値を更新する。例えば、管理部1は、受信バッファカウント値が最大値である際に当該受信バッファカウント値を更新する場合、受信バッファカウント値を初期値、例えば0に更新する。
なお管理部1は実施形態1と同様に、上述の記憶領域210への通信データの書き込み、及び受信バッファ6bへの通信データの書き込みにおいて、書き込む通信データを、既に書き込まれている同一の識別子の通信データに上書きする。
受信バッファ6bへの通信データの書き込みは、実施形態1と同様に、制御部20に対して仮想ECU5の仮想制御部5aが割り当てられていない期間に、管理部1によって行われる。上記の期間に管理部1は記憶領域カウント値と、次に動作させる仮想ECU5の受信バッファ6bの受信バッファカウント値とを比較し、記憶領域カウント値と当該受信バッファカウント値とが異なる場合に記憶領域210の通信データを受信バッファ6bに書き込む。詳しくは、記憶領域カウント値と受信バッファカウント値とが異なる場合は、記憶領域210における一の通信データの記憶領域カウント値と、上記の受信バッファ6bにおける当該一の通信データの受信バッファカウント値とが異なる場合である。この場合、記憶領域210における一の通信データは、新たに送信される通信データである。このように記憶領域カウント値と受信バッファカウント値とが異なる場合に、管理部1は、受信バッファカウント値と異なる記憶領域カウント値の通信データを記憶領域210から読み出し、当該通信データを受信バッファ6bに書き込む。
管理部1は受信バッファ6bへの通信データの書き込み後に、実施形態1と同様に、受信バッファ更新フラグをオン状態にする。更に管理部1は受信バッファ6bへの通信データの書き込み後に、当該通信データの受信バッファカウント値を、送信バッファカウント値と同一の値に更新する。詳しくは、管理部1は、受信バッファ6bへ書き込んだ通信データの受信バッファカウント値を、記憶領域210にて当該通信データの識別子と同一の識別子の通信データと関連付けられた記憶領域カウント値と同一の値に更新する。
仮想ECU5は、実施形態1と同様に自仮想ECUの受信バッファ6bから、受信バッファ更新フラグがオン状態である通信データを読み出す。仮想ECU5は、通信データの読み出し後に上記の受信バッファ更新フラグをオン状態からオフ状態に変更する。
本実施形態においては、上述のように記憶領域カウント値と各仮想ECU5の受信バッファカウント値とに基づき、通信データは各仮想ECU5の受信バッファ6bに書き込まれる。例えば、実施形態1のように記憶領域更新フラグに基づき通信データが各受信バッファ6bに書き込まれる場合、記憶領域更新フラグがオン状態である通信データが送信先の全ての仮想ECU5の受信バッファ6bに書き込まれた際に、記憶領域更新フラグはオフ状態に変更される。この場合、仮想ECU5の切り替え周期によっては、受信バッファ6bに既に書き込まれたデータが、再度、当該受信バッファ6bに書き込まれる場合がある。即ち仮想ECU5は、既に読み出した通信データと同一の通信データを読み出してしまう場合がある。管理部1が記憶領域カウント値と受信バッファカウント値とに基づき通信データを受信バッファ6bに書き込むことによって、仮想ECU5が既に読み出した通信データと同一の通信データを読み出してしまうことを防止することができる。
図8は、実施形態2の管理部1として機能する第3演算装置203が行う処理と、実施形態2の仮想ECU5に割り当てられる演算装置200が行う仮想ECU5の生成に係る処理とを例示するフローチャートである。本実施形態において仮想ECU5に割り当てられる演算装置200は、第1演算装置201及び第2演算装置202である。例えば、第3演算装置203は、車両Cの図示しないIGスイッチがオフ状態からオン状態へ遷移した際に、管理部1として以下の処理を行う。また仮想ECU5に割り当てられる演算装置200は、IGスイッチがオフ状態からオン状態へ遷移した際に、以下の処理を行う。
仮想ECU5に割り当てられる演算装置200は、S201及びS202の処理を行う。S201及びS202の処理は実施形態1のS101及びS102の処理と同様であるため、詳細な説明は省略する。第1演算装置201において第1仮想ECU51の生成が開始される。また、第2演算装置202において第2仮想ECU52及び第3仮想ECU53の一方の生成が開始される。
仮想ECU5に割り当てられる演算装置200は、S203の処理を行う。S203の処理は実施形態1のS103の処理と同様であるため、詳細な説明は省略する。受信バッファ更新フラグがオン状態でない場合(S203:NO)、仮想ECU5に割り当てられる演算装置200は後述のS206の処理を行う。
受信バッファ更新フラグがオン状態である場合(S203:YES)、仮想ECU5に割り当てられる演算装置200は、S204、S205、S206及びS207の処理を行う。S204、S205、S206及びS207の処理は実施形態1のS104、S105、S106及びS107の処理と同様であるため、詳細な説明は省略する。仮想ECU5に割り当てられる演算装置200は、上述のように送信バッファカウント値を更新する(S208)。
仮想ECU5に割り当てられる演算装置200は、S209及びS210の処理を行う。S209及びS210の処理は実施形態1のS109及びS110の処理と同様であるため、詳細な説明は省略する。更に、仮想ECU5に割り当てられる演算装置200はS201の処理を行う。生成される仮想ECU5は切り替わる。詳しくは、第1演算装置201は再度、第1仮想ECU51の生成を開始する。また第2演算装置202は、第2仮想ECU52及び第3仮想ECU53の他方の生成を開始する。仮想ECU5に割り当てられる演算装置200は、例えばIGスイッチがオン状態からオフ状態へ遷移した際に、処理を終了する。
第3演算装置203は、S211及びS212の処理を行う。S211及びS212の処理は実施形態1のS111及びS112の処理と同様であるため、詳細な説明は省略する。仮想ECU5の割当時間が経過していない場合(S212:NO)、第3演算装置203は、再度S212の処理を行うべくループ処理を行う。仮想ECU5の割当時間が経過した場合(S212:YES)、第3演算装置203はS213の処理を行う。S213の処理は実施形態1のS113の処理と同様であるため、詳細な説明は省略する。第3演算装置203は、S212の処理の代わりに、仮想ECU5に割り当てられる演算装置200に仮想ECU5の生成を開始させた時点から、仮想ECU5の割当時間が経過するまで待機処理を行ってもよい。第3演算装置203は、当該待機処理の後、S213の処理を行う。
第3演算装置203は、送信バッファカウント値と記憶領域カウント値とが異なるか否かを判定する(S214)。送信バッファカウント値と記憶領域カウント値とが異ならない場合(S214:NO)、即ち送信バッファカウント値と記憶領域カウント値とが同一の値である場合、第3演算装置203は、後述のS217の処理を行う。
送信バッファカウント値と記憶領域カウント値とが異なる場合(S214:YES)、第3演算装置203は上述のように、記憶領域カウント値と異なる送信バッファカウント値の通信データを送信バッファ6aから読み出し、当該通信データを記憶領域210に書き込む(S215)。第3演算装置203は上述のように、通信データの記憶領域210への書き込み後、当該通信データの記憶領域カウント値を、上記の送信バッファカウント値と同一の値に更新する(S216)。
第3演算装置203は、次に動作させる仮想ECU5の受信バッファ6bの受信バッファカウント値と、記憶領域カウント値とが異なるか否かを判定する(S217)。受信バッファカウント値と記憶領域カウント値とが異なる場合(S217:YES)、第3演算装置203は上述にように、受信バッファカウント値と異なる記憶領域カウント値の通信データを記憶領域210から読み出し、当該通信データを上記の受信バッファ6bに書き込む(S218)。
上述のように第3演算装置203は、受信バッファ6bへの通信データの書き込み後、当該通信データの受信バッファカウント値を更新する(S219)。更に第3演算装置203は、書き込んだ通信データの受信バッファ更新フラグをオン状態にする(S220)。第3演算装置203はS211の処理を行い、第1演算装置201又は第2演算装置202に対する仮想ECU5の切り替えを行う。詳しくは、第3演算装置203は第1演算装置201に再度、第1仮想ECU51の生成を開始させる。又は、第3演算装置203は第2演算装置202に、第2仮想ECU52及び第3仮想ECU53の他方の生成を開始させる。第3演算装置203は、例えばIGスイッチがオン状態からオフ状態へ遷移した際に、処理を終了する。
受信バッファカウント値と記憶領域カウント値とが異ならない場合(S217:NO)、即ち、受信バッファカウント値と記憶領域カウント値とが同一の値である場合、第3演算装置203はS211の処理を行う。即ち第3演算装置203は、第1演算装置201又は第2演算装置202に対する仮想ECU5の切り替えを行う。
本実施形態においては、送信バッファカウント値及び記憶領域カウント値に基づき、送信バッファ6aに書き込まれた通信データの読み出しが行われるので、送信バッファ6aにおいて更新されていない通信データの読み出しが行われることを防止することができる。
管理部1は、記憶領域210への通信データの書き込み後に記憶領域カウント値を更新する。管理部1は受信バッファカウント値及び記憶領域カウント値に基づき、記憶領域210から通信データを読み出すので、記憶領域210において更新されていない通信データの読み出しが行われることを防止することができる。
管理部1は受信バッファ6bへの通信データの書き込み後に、受信バッファカウント値を更新し、受信バッファ更新フラグをオン状態にするので、受信バッファ6bにおいて更新されていない通信データの読み出しが行われることを防止することができる。
例えば、送信バッファカウント値、受信バッファカウント値及び記憶領域カウント値のいずれかが、所定の時間以上更新されない場合、車載ECU2は、仮想ECU5間の通信の異常が発生したと判定してもよい。
(実施形態3)
図9は、実施形態3の車載ECU2の論理構成を例示するブロック図である。実施形態3に係る構成の内、実施形態1と同様な構成部については同じ符号を付し、その詳細な説明を省略する。実施形態3は、制御部20の演算装置200が管理部1として機能する期間と、仮想ECU5として機能する期間とを周期的に切り替える車載ECU2に関する。
図9に示すように、実施形態3の車載ECU2は、第1演算装置201及び第2演算装置202の2つの演算装置200を含む制御部20を備える。実施形態1と同様に、第1演算装置201において第1仮想ECU51は生成される。生成される第1仮想ECU51の仮想制御部5aが第1演算装置201に対して割り当てられる。更に第1演算装置201は、第1演算装置201が生成する仮想ECU5を管理する管理部1として機能する。即ち第1演算装置201は、第1仮想ECU51を管理する管理部1として機能する。以下、第1演算装置201が生成する仮想ECU5を管理する管理部1を、第1管理部11とも称する。第1管理部11は、第1演算装置201に対する仮想ECU5の切り替えを行い、第1演算装置201に周期的に第1仮想ECU51を生成させる。
実施形態1と同様に、第2演算装置202において周期的に第2仮想ECU52及び第3仮想ECU53が交互に生成される。生成される第2仮想ECU52の仮想制御部5aが第2演算装置202に対して割り当てられる。また、生成される第3仮想ECU53の仮想制御部5aが第2演算装置202に対して割り当てられる。更に第2演算装置202は、第2演算装置202が生成する仮想ECU5を管理する管理部1として機能する。即ち第2演算装置202は、第2仮想ECU52及び第3仮想ECU53を管理する管理部1として機能する。以下、第2演算装置202が生成する仮想ECU5を管理する管理部1を、第2管理部12とも称する。第2管理部12は、第2演算装置202に対する仮想ECU5の切り替えを行い、第2演算装置202に周期的に第2仮想ECU52及び第3仮想ECU53を交互に生成させる。
記憶部21は、第1通信バッファ61、第2通信バッファ62及び第3通信バッファ63を含む通信バッファと、記憶領域210とを含む。実施形態3の記憶部21においては、第1通信バッファ61、第2通信バッファ62、第3通信バッファ63、及び記憶領域210それぞれに対してアクセス可能な仮想ECU5及び管理部1が予め定められている。言い換えると通信バッファ6及び記憶領域210に対するアクセスは制限されている。アクセスは、通信データの書き込みと読み出しとを含む。アクセス制限によって、通信バッファ6と記憶領域210とは保護される。上述のアクセス制限には、例えばMPU(Memory Protection Unit)等のメモリ保護装置が用いられる。
図10は、通信バッファ6及び記憶領域210に対するアクセス制限の一例を示す説明図である。図10において「-」はアクセスが不可能である旨を示す。第1管理部11は、第1送信バッファ61a及び第1受信バッファ61bと、記憶領域210とにアクセス可能である。即ち第1管理部11は、第1演算装置201が生成する仮想ECU5の通信バッファ6と、記憶領域210とにアクセス可能である。第1管理部11は、第2演算装置202が生成する仮想ECU5の通信バッファ6にアクセス不可能である。第2演算装置202が生成する仮想ECU5の通信バッファ6は、第2送信バッファ62a、第2受信バッファ62b、第3送信バッファ63a及び第3受信バッファ63bである。
第1仮想ECU51は、第1送信バッファ61a及び第1受信バッファ61bにアクセス可能である。即ち第1仮想ECU51は、自仮想ECUの通信バッファ6にアクセス可能である。第1仮想ECU51は、記憶領域210と、第2送信バッファ62a及び第2受信バッファ62bと、第3送信バッファ63a及び第3受信バッファ63bとにアクセス不可能である。即ち第1仮想ECU51は、記憶領域210と、他の仮想ECU5の通信バッファ6とにアクセス不可能である。
第2管理部12は、第2送信バッファ62a及び第2受信バッファ62bと、第3送信バッファ63a及び第3受信バッファ63bと、記憶領域210とにアクセス可能である。即ち第2管理部12は、第2演算装置202が生成する仮想ECU5の通信バッファ6と、記憶領域210とにアクセス可能である。第2管理部12は、第1演算装置201が生成する仮想ECU5の通信バッファ6にアクセス不可能である。第1演算装置201が生成する仮想ECU5の通信バッファ6は、第1送信バッファ61a及び第1受信バッファ61bである。
第2仮想ECU52は、第2送信バッファ62a及び第2受信バッファ62bにアクセス可能である。即ち第2仮想ECU52は、自仮想ECUの通信バッファ6にアクセス可能である。第2仮想ECU52は、記憶領域210と、第1送信バッファ61a及び第1受信バッファ61bと、第3送信バッファ63a及び第3受信バッファ63bとにアクセス不可能である。即ち第2仮想ECU52は、記憶領域210と、他の仮想ECU5の通信バッファ6とにアクセス不可能である。
第3仮想ECU53は、第3送信バッファ63a及び第3受信バッファ63bにアクセス可能である。即ち第3仮想ECU53は、自仮想ECUの通信バッファ6にアクセス可能である。第3仮想ECU53は、記憶領域210と、第1送信バッファ61a及び第1受信バッファ61bと、第2送信バッファ62a及び第2受信バッファ62bとにアクセス不可能である。即ち第3仮想ECU53は、記憶領域210と、他の仮想ECU5の通信バッファ6とにアクセス不可能である。
図11は、実施形態3の複数の仮想ECU5の間における通信の一例を示す説明図である。図11において、第1管理部11はHV(1)と示してある。また第2管理部12はHV(2)と示してある。第1演算装置201は、第1管理部11として機能する期間と、第1仮想ECU51を生成する期間とを周期的に切り替える。言い換えると第1演算装置201は、第1管理部11として機能する期間と、第1仮想ECU51として機能する期間とを周期的に切り替える。第2演算装置202は、第2管理部12として機能する期間と、第2仮想ECU52を生成する期間と、第3仮想ECU53を生成する期間とを周期的に切り替える。言い換えると第2演算装置202は、第2管理部12として機能する期間と、第2仮想ECU52として機能する期間と、第3仮想ECU53として機能する期間とを周期的に切り替える。図11に示すように、第1演算装置201が第1管理部11として機能する期間と、第2演算装置202が第2管理部12として機能する期間とは、重ならないように設定されている。図11において、実線の矢印は仮想ECU5による通信データの書き込み又は読み出しを示す。破線の矢印は管理部1による通信データの書き込み又は読み出しを示す。
実施形態1と同様に、第1仮想ECU51は、通信データを第1送信バッファ61aに書き込み、当該通信データの送信バッファフラグをオン状態にする。また第1仮想ECU51は、第1受信バッファ61bにおいて、受信バッファ更新フラグがオン状態である通信データを第1受信バッファ61bから読み出し、読み出した通信データの受信バッファ更新フラグをオフ状態にする。
第1演算装置201は、第1仮想ECU51の生成を終了した時点から、再度、第1仮想ECU51の生成を開始する時点までの期間に、第1管理部11として機能する。第1演算装置201が第1管理部11として機能する期間は、第1演算装置201に対して第1仮想ECU51の仮想制御部5aが割り当てられていない期間である。言い換えると、第1演算装置201が第1管理部11として機能する期間は、第1仮想ECU51が動作していない期間である。第1演算装置201が第1管理部11として機能する期間において、第1管理部11は以下の処理を行う。
第1管理部11は、実施形態1の管理部1と同様に、第1送信バッファ61aにおいて送信バッファ更新フラグがオン状態である通信データを記憶領域210に書き込む。また第1管理部11は記憶領域210への通信データの書き込み後、書き込んだ通信データの記憶領域更新フラグをオン状態にし、更に上記の送信バッファ更新フラグをオフ状態にする。
更に第1管理部11は、記憶領域210に書き込まれた通信データのうち、記憶領域更新フラグがオン状態である通信データであって、次に動作を開始させる仮想ECU5が送信先である通信データを、次に動作を開始させる仮想ECU5の受信バッファに書き込む。即ち管理部1は、記憶領域更新フラグがオン状態である通信データであって、送信先が第1仮想ECU51である通信データを、第1受信バッファ61bに書き込む。第1管理部11は、第1受信バッファ61bへの通信データの書き込み後、書き込んだ通信データの受信バッファ更新フラグをオン状態にする。更に第1管理部11は、記憶領域210において上記の通信データの記憶領域更新フラグをオフ状態にする。第1管理部11は、第1演算装置201に対する仮想ECU5の切り替えを行う。第1仮想ECU51の生成が再度、第1演算装置201において開始される。
実施形態1と同様に、第2仮想ECU52は、通信データを第2送信バッファ62aに書き込み、当該通信データの送信バッファフラグをオン状態にする。また第2仮想ECU52は、第2受信バッファ62bにおいて、受信バッファ更新フラグがオン状態である通信データを第2受信バッファ62bから読み出し、読み出した通信データの受信バッファ更新フラグをオフ状態にする。
実施形態1と同様に、第3仮想ECU53は、通信データを第3送信バッファ63aに書き込み、当該通信データの送信バッファフラグをオン状態にする。また第3仮想ECU53は、第3受信バッファ63bにおいて、受信バッファ更新フラグがオン状態である通信データを第3受信バッファ63bから読み出し、読み出した通信データの受信バッファ更新フラグをオフ状態にする。
第2演算装置202は、第2仮想ECU52及び第3仮想ECU53の一方の生成を終了した時点から、第2仮想ECU52及び第3仮想ECU53の他方の生成を開始する時点までの期間に、第2管理部12として機能する。第2演算装置202が第2管理部12として機能する期間は、第2演算装置202に対して第2仮想ECU52及び第3仮想ECU53の両方の仮想制御部5aが割り当てられていない期間である。言い換えると、第2演算装置202が第2管理部12として機能する期間は、第2仮想ECU52及び第3仮想ECU53が動作していない期間である。第2演算装置202が第2管理部12として機能する期間において、第2管理部12は以下の処理を行う。
第2管理部12は、実施形態1の管理部1と同様に、第2送信バッファ62a又は第3送信バッファ63aにおいて送信バッファフラグがオン状態である通信データを記憶領域210に書き込む。また第2管理部12は記憶領域210への通信データの書き込み後、書き込んだ通信データの記憶領域更新フラグをオン状態にし、更に上記の通信データの送信バッファ更新フラグをオフ状態にする。
更に第2管理部12は、記憶領域210に書き込まれた通信データのうち、記憶領域更新フラグがオン状態である通信データであって、次に動作を開始させる仮想ECU5が送信先である通信データを、次に動作を開始させる仮想ECU5の受信バッファ6bに書き込む。例えば、次に動作を開始させる仮想ECU5が第2仮想ECU52である場合、第2管理部12は、記憶領域更新フラグがオン状態である通信データであって、送信先が第2仮想ECU52である通信データを、第2受信バッファ62bに書き込む。また、次に動作を開始させる仮想ECU5が第3仮想ECU53である場合、第2管理部12は、記憶領域更新フラグがオン状態である通信データであって、送信先が第3仮想ECU53である通信データを、第3受信バッファ63bに書き込む。
第2管理部12は、受信バッファ6bへの通信データの書き込み後、書き込んだ通信データの受信バッファ更新フラグをオン状態にする。更に第2管理部12は、記憶領域210において上記の通信データの記憶領域更新フラグをオフ状態にする。第2管理部12は、第2演算装置202に対する仮想ECU5の切り替えを行う。第2仮想ECU52及び第3仮想ECU53の他方の生成が、第2演算装置202において開始される。
本実施形態において、複数の仮想ECU5の間における通信データの授受には、送信バッファ更新フラグ、記憶領域更新フラグ及び受信バッファ更新フラグが用いられる。通信データの授受には、実施形態2のように送信バッファカウント値、記憶領域カウント値、及び受信バッファカウント値と、受信バッファ更新フラグとが用いられてもよい。
図12は、実施形態3の演算装置200が行う処理を例示するメインルーチンのフローチャートである。図13は、仮想ECU5の処理のサブルーチンに係る演算装置200の処理手順を例示するフローチャートである。図14は、管理部1の処理のサブルーチンに係る演算装置200の処理手順を例示するフローチャートである。例えば、演算装置200は、車両Cの図示しないIGスイッチがオフ状態からオン状態へ遷移した際に、以下の処理を行う。
演算装置200は、仮想ECU5の生成を開始する(S31)。詳しくは、第1演算装置201は第1仮想ECU51の生成を開始する。第2演算装置202は第2仮想ECU52及び第3仮想ECU53の一方の生成を開始する。演算装置200は、仮想ECU5の処理のサブルーチンを呼び出して実行する(S32)。
以下、図13を用いて、演算装置200が行う仮想ECU5の処理のサブルーチンに係る処理について説明する。演算装置200はS41の処理を行う。S41の処理は実施形態1のS103の処理と同様であるため、詳細な説明は省略する。受信バッファ更新フラグがオン状態である場合(S41:YES)、演算装置200は、S42、S43、S44、S45及びS46の処理を行う。S42、S43、S44、S45及びS46の処理は実施形態1のS104、S105、S106、S107及びS108の処理と同様であるため、詳細な説明は省略する。演算装置200は、メインルーチンへリターンする。受信バッファ更新フラグがオン状態でない場合(S41:NO)、演算装置200は、S44、S45及びS46の処理を行い、メインルーチンへリターンする。
図12に示すように、演算装置200は仮想ECU5の生成を終了する(S33)。詳しくは、第1演算装置201は第1仮想ECU51の生成を終了する。第2演算装置202は第2仮想ECU52及び第3仮想ECU53の一方の生成を終了する。演算装置200は、管理部1の処理のサブルーチンを呼び出して実行する(S34)。第1演算装置201は第1管理部11として機能する。第2演算装置202は第2管理部12として機能する。
以下、図14を用いて、演算装置200が行う管理部1の処理のサブルーチンに係る処理について説明する。演算装置200はS51の処理を行う。S51の処理は実施形態1のS114の処理と同様であるため、詳細な説明は省略する。
送信バッファ更新フラグがオン状態である場合(S51:YES)、演算装置200は、S52、S53及びS54の処理を行う。S52、S53及びS54の処理は実施形態1のS115、S116及びS117の処理と同様であるため、詳細な説明は省略する。送信バッファ更新フラグがオン状態でない場合(S51:NO)、演算装置200はS54の処理を行う。
記憶領域更新フラグがオン状態である場合(S54:YES)、演算装置200は、S55及びS56の処理を行い、メインルーチンへリターンする。S55及びS56の処理は実施形態1のS118及びS119の処理と同様であるため、詳細な説明は省略する。記憶領域更新フラグがオン状態でない場合(S54:NO)、メインルーチンへリターンする。
図12に示すように、演算装置200はS31の処理を行う。詳しくは、第1演算装置201は再度、第1仮想ECU51の生成を開始する。第2演算装置202は第2仮想ECU52及び第3仮想ECU53の他方の生成を開始する。演算装置200が管理部1として機能する期間と、演算装置200が仮想ECU5として機能する期間とは、周期的に切り替わる。演算装置200は、例えばIGスイッチがオン状態からオフ状態へ遷移した際に、処理を終了する。
本実施形態において、制御部20に含まれる複数の演算装置200それぞれは、管理部1として機能する期間と、仮想ECU5として機能する期間とを周期的に切り替える。一の演算装置200が管理部1として機能する期間と、他の演算装置200が管理部1として機能する期間とは重複しないので、記憶領域210に対する通信データの書き込み及び読み出しを競合させずに、複数の仮想ECU5の間における通信データの授受を行うことができる。
本実施形態において、第1演算装置201が管理部1として機能する第1管理部11は、第1演算装置201が生成する仮想ECU5の通信バッファ6にアクセス可能であるが、第2演算装置202が生成する仮想ECU5の通信バッファ6にアクセス不可能である。第1管理部11が誤って、第2通信バッファ62及び第3通信バッファ63に対して通信データの書き込み及び読み出しを行うことを防止することができる。第2演算装置202が管理部1として機能する第2管理部12は、第2演算装置202が生成する仮想ECU5の通信バッファ6にアクセス可能であるが、第1演算装置201が生成する仮想ECU5の通信バッファ6にアクセス不可能である。第2管理部12が誤って、第1通信バッファ61に対して通信データの書き込み及び読み出しを行うことを防止することができる。
仮想ECU5は、自仮想ECUの通信バッファ6にアクセス可能であるが、他の仮想ECU5の通信バッファ6と、記憶領域210とにアクセス不可能である。仮想ECU5が誤って、他の仮想ECU5の通信バッファ6に対して通信データの書き込み及び読み出しを行うことを防止することができる。また仮想ECU5が誤って、記憶領域210に対して通信データの書き込み及び読み出しを行うことを防止することができる。
(実施形態4)
実施形態4に係る構成の内、実施形態1と同様な構成部については同じ符号を付し、その詳細な説明を省略する。実施形態4は、管理部1が記憶領域210に書き込まれた通信データを送信先の仮想ECU5の後述するプログラム実行用領域に書き込む車載ECU2に関する。
実施形態4の車載ECU2において制御部20は、第1演算装置201、第2演算装置202及び第3演算装置203を含む。第1演算装置201及び第2演算装置202は、実施形態1と同様に仮想ECU5を生成する。第3演算装置203は、実施形態1と同様に管理部1として機能する。実施形態4の仮想ECU5の通信バッファ6は、仮想ECU5がプログラムを実行するためのプログラム実行用記憶領域を含む。詳しくは、プログラム実行用記憶領域は受信バッファ6bに含まれる。なお通信バッファ6は記憶部21に割り当てられているので、プログラム実行用記憶領域は、記憶部21に含まれる。従ってプログラム実行用記憶領域は、仮想ECU5ごとに記憶部21に含まれる。
プログラム実行用記憶領域は、いわゆる変数領域である。プログラムが実行される際、当該プログラムの実行に用いられる通信データは、プログラムを実行する仮想ECU5のプログラム実行用記憶領域に書き込まれる。プログラムの実行において、上記の通信データが書き込まれたプログラム実行用記憶領域は、論理アドレスとして示される。
仮想ECU5は、実施形態1と同様、通信データを送信バッファ6aに書き込み、送信バッファ更新フラグの設定を行う。管理部1は、実施形態1と同様、送信バッファ更新フラグに基づき、送信バッファ6aに書き込まれた通信データを記憶領域210に書き込み、記憶領域更新フラグの設定を行う。
記憶領域更新フラグがオン状態である場合、管理部1は、送信先の仮想ECU5の受信バッファ6bのうち、当該受信バッファ6bに含まれるプログラム実行用記憶領域に、記憶領域更新フラグがオン状態である通信データを書き込む。プログラム実行用記憶領域は、受信バッファ6bに含まれるので、記憶部21に含まれる。管理部1はプログラム実行用記憶領域に通信データを書き込む際、例えばアドレステーブルを参照し、通信データを、当該通信データを用いるプログラムが実行されるプログラム実行用記憶領域の論理アドレスに書き込む。詳しくは、管理部1は通信データを、記憶部21において上記の論理アドレスと対応する物理アドレスに書き込む。複数の仮想ECU5の間において通信データが授受される。図15は、アドレステーブルの内容を例示する概念図である。図15のアドレステーブルには、通信データの識別子と、当該通信データが書き込まれる論理アドレスと、当該通信データが書き込まれる物理アドレスとが、識別子ごとに格納される。管理部1は通信データの書き込み後、当該通信データの受信バッファ更新フラグをオン状態にする。仮想ECU5は、受信バッファ更新フラグがオン状態である場合、書き込まれた通信データを用いてプログラムを実行する。
管理部1がプログラム実行用記憶領域に通信データを書き込む方法は、アドレステーブルを用いる方法に限定されない。例えば管理部1は、通信データ又は通信データの識別子を入力した際に、当該通信データが書き込まれる論理アドレス、又は当該通信データが書き込まれる物理アドレスが出力される関数を用いて、通信データをプログラム実行用記憶領域に書き込んでもよい。アドレステーブル又は上記の関数は、記憶部21、例えば各仮想ECU5に含まれる仮想記憶部に記憶されている。
本実施形態において通信バッファ6は、プログラムを実行するためのプログラム実行用記憶領域を含む。プログラム実行用記憶領域は、いわゆる変数領域であり、仮想ECU5ごとに設けられる。プログラム実行用記憶領域は、論理アドレスによって示される。管理部1は、記憶領域210に書き込んだ通信データを、送信先の仮想ECU5のプログラム実行用記憶領域に書き込む。管理部1が通信データをプログラム実行用記憶領域に直接、書き込むので、仮想ECU5は通信データをプログラム実行用記憶領域に書き込むための処理を行う必要がない。従って、仮想ECU5が行う処理を少なくすることができる。
例えば実施形態1の受信バッファ6bは、プログラム実行用記憶領域を含んでいない。実施形態1の仮想ECU5はプログラムを実行するにあたり、受信バッファ6bに書き込まれた通信データを読み出し、上記の仮想ECU5に割り当てられた記憶部21の領域のうち、当該通信データの識別子に関連付けられた論理アドレスの領域に通信データを書き込む必要がある。即ち仮想ECU5はプログラムを実行する際、受信バッファ6bに書き込まれた通信データを読み出し、読み出した通信データをプログラム実行用記憶領域に書き込む必要がある。
車載ECU2は、複数の仮想ECU5の間における通信データの授受に、実施形態2のように送信バッファカウント値、記憶領域カウント値、及び受信バッファカウント値と、受信バッファ更新フラグとが用いられる構成でもよい。車載ECU2は、実施形態3のように、演算装置200それぞれが管理部1として機能する期間と、仮想ECU5として機能する期間とを切り替える構成でもよい。
今回開示された実施形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本開示の範囲は、上記した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。