(57)【要約】【課題】並列処理を行う複数のコア間の通信における遅延を抑制する技術を提供する。【解決手段】車両制御システム２のＥＣＵ３０２は、複数のコア４０１と、共有メモリ４０５とを有している。送信側のコア４０１−１は、コア間通信でデータを送信するとき、共有メモリ４０５に設けられた複数のバッファ部９０１にそれぞれ格納されている通信系統毎に管理されるカウンタ値により定まるバッファ部９０１に、該データと書き込み順序に応じて更新されたカウンタ値とを書き込む。受信側のコア４０１−２は、コア間通信でデータを受信するとき、複数のバッファ部９０１にそれぞれ格納されているカウンタ値により定まる、通信系統毎の最も新しいデータが格納されているバッファ部９０１からデータを読み出す。【選択図】図５
2019179309.tif 000002
【特許請求の範囲】
【請求項１】
複数のコアが並列処理を実行し、前記複数のコアにより、それぞれ別個の通信として区別される複数の通信系統のコア間通信を行う処理装置であって、
前記複数のコアが同時にアクセス可能であり、前記コア間通信に利用可能な複数のバッファ部が設けられる共有メモリと、
前記共有メモリを介するコア間通信において前記バッファ部にデータを書き込む送信コアと、
前記コア間通信において前記バッファ部からデータを読み出す受信コアと、を有し、
前記送信コアは、前記コア間通信でデータを送信するとき、前記複数のバッファ部にそれぞれ格納されている前記通信系統毎に管理されるカウンタ値により定まる前記バッファ部に、該データと書き込み順序に応じて更新されたカウンタ値とを書き込み、
前記受信コアは、前記コア間通信でデータを受信するとき、前記複数のバッファ部にそれぞれ格納されている前記カウンタ値により定まる、前記通信系統毎の最も新しいデータが格納されているバッファ部からデータを読み出す、
処理装置。
【請求項２】
前記バッファ部は、使用中または未使用を示すステータス値を格納し、
前記送信コアは、未使用のステータス値が格納されている前記バッファ部の中から最も古いカウンタ値が格納されている前記バッファ部を選択し、該バッファ部に前記データを書き込む前に使用中のステータス値を格納し、該バッファ部に前記データを書き込んだ後に未使用のステータス値を格納し、
前記受信コアは、未使用のステータス値が格納されている前記バッファ部の中から最も新しいカウンタ値が格納されているバッファ部を選択し、該バッファ部から前記データを読み出す前に使用中のステータス値を格納し、該バッファ部から前記データを読み込んだ後に未使用のステータスを格納する、
請求項１に記載の処理装置。
【請求項３】
前記送信コアは、前記バッファ部の故障の有無を確認し、故障のない前記バッファ部の中から最も古いカウンタ値が設定されている前記バッファ部を選択し、該バッファ部に前記データおよび最も新しいカウンタ値を書き込み、
前記受信コアは、前記バッファ部の故障の有無を確認し、故障のない前記バッファ部の中から最も新しいカウンタ値が格納されている前記バッファ部を選択し、該バッファ部から前記データを読み出す、
請求項１に記載の処理装置。
【請求項４】
前記バッファ部は、前記通信系統を一意に識別する通信識別子を格納し、
前記送信コアは、前記コア間通信でデータを送信するとき、該コア間通信に係る通信系統の通信識別子が格納されている前記バッファ部の中から最も古いカウンタ値が設定されているバッファ部を選択し、該バッファ部に前記データと、該通信系統における最も新しいカウンタ値と、該通信系統の通信識別子と、を書き込み、
前記受信コアは、前記コア間通信でデータを受信するとき、該コア間通信に係る通信系統の通信識別子が格納されている前記バッファ部の中から最も新しいカウンタ値が設定されている前記バッファ部を選択し、該バッファ部からデータを読み出す、
請求項１に記載の処理装置。
【請求項５】
前記送信コアが、該送信コアのマルチタスク処理または他の送信コアとの並列処理において一の通信系統に係る前記バッファ部へのデータの書き込みが複数発生した場合に、同時に書き込むことがないように競合制御する書き込み制御部を有している、
請求項１に記載の処理装置。
【請求項６】
前記送信コアは、前記通信系統のバッファ部の中で最も古いカウンタ値が格納されているバッファ部に前記データと最も新しいカウンタ値を書き込み、
前記受信コアは、前記通信系統のバッファ部の中で最も新しいカウンタ値が格納されているバッファ部からデータを読み出す、
請求項１に記載の処理装置。
【請求項７】
車両に搭載され、前記車両の状態および制御指示に基づいて前記車両を制御する車両制御用マルチコアマイコンである、請求項１に記載の処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のコアにより並列処理を行う処理装置のコア間通信の技術に関する。
【背景技術】
【０００２】
自動車等の車両の各部の制御を行う車両制御装置に用いられる処理装置として、複数のコアにより並列処理を行うマルチコアマイコンの活用が進んでいる。マルチコアマイコンでは、複数のコアにおいてそれぞれ実行される複数のソフトウェアが同じデータを共有したり、複数のソフトウェアの間でデータを同期させたりすることが求められる。データの共有や同期を実現するために、複数のコア間で相互に通信を行うことが必要となる。複数のコア間の通信をコア間通信という。
【０００３】
マルチコアマイコンでは、並列動作する複数のコアが、各コアの扱うデータを相互に共有したり同期したりしながら動作することにより、全体として１つのコアで動作するのと同等の一貫した制御が可能となる。
【０００４】
コア間通信の例として、複数のコアが共有するメモリ領域（共有メモリ領域）を設けておき、データを提供する側のコアが共有メモリ領域にデータを格納し、そのデータを利用する側のコアがその共有メモリ領域を参照してデータを取得するといった処理が行われる。複数のコアがそれぞれ独自のタイミングで共有メモリ領域にデータを書き込んだり、その共有メモリ領域のデータを読み出したりする場合、複数のコアによる同じ共有メモリ領域への同時アクセスが起こることがある。同時アクセスにはデータ競合の問題がある。データ競合によって、共有メモリ領域上のデータを破損したり、意図するタイミングとは異なるタイミングで書き込まれたデータを取得して車両の制御に使用したりしてしまう可能性がある。同一のコア内で複数のソフトウェアが動作するのであれば、各ソフトウェアは割込み禁止機能を用いて、意図しないタイミングでデータが書き換えられるのを防止することができる。しかし、割り込み禁止は複数のコアにわたって機能しない。
【０００５】
コア間でのデータ競合を避けるために同時アクセスを禁止する排他処理のひとつとしてスピンロックというアルゴリズムがある。スピンロックは、アクセス許可を得たことを示すフラグを用意し、各コアは、ある共有メモリ領域にアクセスする前に、その共有メモリ領域のフラグを取得する（ロック取得という）。ロック取得したコアは、対象の共有メモリ領域に対するデータの書き込み処理、あるいは、当該共有メモリ領域からのデータの読み出しの処理を実行する。そして、その処理を終えた後に共有メモリ領域のフラグを解放する（ロック解放という）。ロック取得ができなかったコアはロック取得ができるまでループ処理により待機する。このスピンロックのアルゴリズムを用いれば、あるコアが共有メモリ領域にアクセスしている最中に他のコアがその共有メモリにアクセスするというデータ競合を回避することができる。しかし、スピンロックのアルゴリズムを用いると、コアは、ロック取得ができないときにロック取得ができるまでループ処理で待機するので、その間は、当該共有メモリ領域にアクセスすることができない。そのため、そのコアにおける車両制御が遅れてしまうという問題がある。
【０００６】
特許文献１には、共有メモリにＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）を設け、複数のクライアントプロセスがそれぞれを識別する識別子をデータとともにＦＩＦＯに書き込み、ＦＩＦＯの読み出し側では読み出した識別子に応じてデータを振り分ける技術が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−０５２６６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１の技術においては、ＦＩＦＯの書き込み側においても、読み出し側においても、複数のコアが同時にアクセスすることはできない。そのため、ＦＩＦＯへの多数のアクセス要求が集中して発生した場合に処理の遅延が発生するおそれがある。
【０００９】
本発明の目的は、並列処理を行う複数のコア間の通信における遅延を抑制する技術を提供することである。
【課題を解決するための手段】
【００１０】
本発明の一態様による処理装置は、複数のコアが並列処理を実行し、前記複数のコアにより、それぞれ別個の通信として区別される複数の通信系統のコア間通信を行う処理装置であって、前記複数のコアが同時にアクセス可能であり、前記コア間通信に利用可能な複数のバッファ部が設けられる共有メモリと、前記共有メモリを介するコア間通信において前記バッファ部にデータを書き込む送信コアと、前記コア間通信において前記バッファ部からデータを読み出す受信コアと、を有し、前記送信コアは、前記コア間通信でデータを送信するとき、前記複数のバッファ部にそれぞれ格納されている前記通信系統毎に管理されるカウンタ値により定まる前記バッファ部に、該データと書き込み順序に応じて更新されたカウンタ値とを書き込み、前記受信コアは、前記コア間通信でデータを受信するとき、前記複数のバッファ部にそれぞれ格納されている前記カウンタ値により定まる、前記通信系統毎の最も新しいデータが格納されているバッファ部からデータを読み出す。
【００１１】
上記問題に対して、本発明は共有メモリにバッファ部を設け、カウントアップによりデータを書き込むバッファ部とデータを読み出すバッファとを切り替えることで解決する。
【００１２】
データを書き込む送信コアは、バッファ部に格納されたカウンタ値を基に、古いデータが格納されているバッファ部にデータを上書きし、データを読み出す受信コアは、カウンタ値を基に最も新しいデータが格納されているバッファ部からデータを読み出す。このようにカウンタ値を用いることで、ＦＩＦＯの読み出し待ちやスピンロックのような通信待機が発生しない。
【００１３】
また、通信識別子を用いることで、複数の通信系統においてバッファ部を共有することが可能となる。
【発明の効果】
【００１４】
本発明によれば、通信待機による制御の遅延が無くなる。また、複数の通信系統においてバッファ部を共有することで、バッファ部として必要なメモリ量を削減することができる。
【図面の簡単な説明】
【００１５】
【図１】実施例１における車両システムの構成を表した図である。
【図２】実施例１における車両制御システムの構成を表した図である。
【図３】実施例１におけるＥＣＵのＨ／Ｗ構成を表した図である。
【図４】実施例１におけるＥＣＵの機能モジュール構成を表した図である。
【図５】実施例１における各コアとコア間通信用のバッファ部の関係を表した図である。
【図６】実施例２における各コアとコア間通信用のバッファ部の関係を表した図である。
【図７】実施例３における各コアとコア間通信用のバッファ部の関係を表した図である。
【図８】実施例４における各コアとコア間通信用のバッファ部の関係を表した図である。
【図９】通信識別情報の一例を示す図である。
【図１０】実施例５における各コアとコア間通信用のバッファ部の関係を表した図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施例について説明する。ここでは本発明を適用する好適例である車両システムについて説明している。しかし、本発明がこれら実施例に限定されることはなく、車両システム以外への適用を妨げるものではない。
【実施例１】
【００１７】
以下に、第１の実施例について、図１〜図５を参照して説明する。
【００１８】
＜車両システムの構成＞
図１は本実施例の車両制御システムを有する車両システム構成例を示している。
【００１９】
図１に示すように、自動車に搭載される車両システム１は、車両制御システム２と、通信装置３と、他の車両制御システム４と、駆動装置５と、認識装置６と、出力装置７と、入力装置８と、通知装置９と、を有している。
【００２０】
車両制御システム２は、車載ネットワークおよび複数の電子制御ユニット（ＥＣＵ：Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ等）を有している。車両制御システム２は、通信装置３、他の車両制御システム４、駆動装置５、認識装置６、出力装置７、入力装置８および通知装置９と接続され、それぞれと制御信号や各種情報の送受信を行う。車両制御システム２の構成については後述する。
【００２１】
通信装置３は、車両制御システム２と車両システム１の外部との間の通信に用いられる。通信装置３は、車両システム１の外部と無線通信を行い、インフラや他車の情報を取得したり、自車に関する情報を外部に送信したりする。無線通信として、例えば移動体通信や公衆無線ＬＡＮ通信、車両間通信等が用いられる。また、通信装置３は、診断端子（ＯＢＤ：Ｏｎ−ｂｏａｒｄ  ｄｉａｇｎｏｓｔｉｃｓ）やＥｔｈｅｒｎｅｔ端子、外部記録媒体（例えばＵＳＢメモリ、ＳＤカード、等）を接続する端子などを有し、これら端子に外部装置が接続されて有線通信を行う。「Ｅｔｈｅｒｎｅｔ」は登録商標である。
【００２２】
他の車両制御システム４は、例えば上記車両制御システム２と同一または異なる通信プロトコルを用いた車載ネットワークおよび電子制御ユニット等により構成される。
【００２３】
駆動装置５は、車両制御システム２の制御に従い、車両運動を制御する機械および電気装置（例えばエンジン、トランスミッション、ホイール、ブレーキ、操舵装置等）の駆動を行うアクチュエータ等である。
【００２４】
認識装置６は、外界から入力される情報を取得し、外界認識情報を生成する。認識装置６は、例えばカメラ、レーダ、ＬＩＤＡＲ（Ｌｉｇｈｔ  Ｄｅｔｅｃｔｉｏｎ  ａｎｄ  Ｒａｎｇｉｎｇ、または、Ｌａｓｅｒ  Ｉｍａｇｉｎｇ  Ｄｅｔｅｃｔｉｏｎ  ａｎｄ  Ｒａｎｇｉｎｇ）、超音波センサなどの外界センサ、および、車両システム１の状態（運動状態、位置情報、等）を認識する力学系センサ（加速度、車軸回転数、ＧＰＳ：Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）等である。
【００２５】
出力装置７は、車両制御システム２から送出されるデータを受信し、メッセージ情報（例えば映像、音）など必要な情報を表示または出力する。出力装置７は、例えば液晶ディスプレイ、警告灯、スピーカ等である。
【００２６】
入力装置８は、ユーザによる操作に応じた入力信号を生成する。入力装置８は、入力信号を車両制御システム２に送信する。入力装置８は、例えばステアリング、ペダル、ボタン、レバー、タッチパネル等である。
【００２７】
通知装置９は、外部に対して車両の状態等を通知する。通知装置９は、例えばランプ、ＬＥＤ、スピーカ等である。
【００２８】
＜車両制御システムの構成＞
図２は、車両制御システム２のハードウェアの構成例を示している。
【００２９】
図２に示すように、車両制御システム２は、ネットワークリンク３０１と、複数の電子制御ユニット３０２と、ゲートウェイ３０３と、を有している。
【００３０】
ネットワークリンク３０１は、車載ネットワークであって、複数の電子制御ユニット３０２およびゲートウェイ３０３を接続する。ネットワークリンク３０１は、例えばＣＡＮ（Ｃｏｎｔｒｏｌｌｅｒ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）やＣＡＮＦＤ（ＣＡＮ  ｗｉｔｈ  Ｆｌｅｘｉｂｌｅ  Ｄａｔａ−ｒａｔｅ）、Ｅｔｈｅｒｎｅｔ等で構成される。
【００３１】
電子制御ユニット３０２（以下単に「ＥＣＵ３０２」という）は、ネットワークリンク３０１に接続される。複数のＥＣＵ３０２のうちの一部のＥＣＵ３０２は、駆動装置５や認識装置６等が接続されており、ネットワークリンク３０１から受信したデータに基づいて駆動装置５に制御信号を出力したり、認識装置６から取得した認識情報をネットワークリンク３０１に出力したりする。また、他の一部のＥＣＵ３０２は、ゲートウェイ機能を有しており、他のネットワークリンクＮＬ（専用線含む）に接続されている。ＥＣＵ３０２の構成については後述する。
【００３２】
ゲートウェイ３０３（以下、単に「ＧＷ３０３」という）は、ネットワークリンク３０１と他のネットワークリンクＮＬとを相互に接続し、一方のネットワークリンクから他方のネットワークリンクに、必要に応じてプロトコル変換して、データを中継する。ＧＷ３０３は、電子制御ユニットとして機能してもよい。
【００３３】
図２には、接続形態（ネットワークトポロジ）の一例として、２つのネットワークリンクに複数のＥＣＵ３０２が接続されているバス型の構成を示している。これ以外にも、複数のＥＣＵ３０２が直接ＧＷ３０３に接続されるスター型や、複数のＥＣＵ３０２がリング状に接続されているリング型、それぞれの型が混在し複数のネットワークにより構成される混在型、等であってもよい。
【００３４】
＜電子制御ユニット（ＥＣＵ）の構成＞
図３は、ＥＣＵ３０２の構成例を示している。なお、ＧＷ３０３も同様の構成を有している。
【００３５】
ＥＣＵ３０２は、処理装置としての複数のコア４０１と、複数のローカルメモリ４０２と、タイマ４０３と、ＲＯＭ４０４と、共有メモリ４０５と、通信部４０６と、外部メモリ４０７と、内部バス４０８と、を有している。
【００３６】
コア４０１は、演算素子およびレジスタやキャッシュ等の記憶素子を有するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などのプロセッサにより構成される。本実施例において、コア４０１はＮ個（４０１−１〜４０１−Ｎ、Ｎは２以上の自然数）設けられている。複数のコア４０１は並列処理を実行し、複数のコア４０１により、それぞれ別個の通信として区別される複数の通信系統のコア間通信を行う。
【００３７】
ローカルメモリ４０２は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で構成されており、揮発性のデータを格納する。本実施例において、それぞれのコア４０１（４０１−１〜４０１−Ｎ）に対応して、ローカルメモリ４０２はＮ個（４０２−１〜４０２−Ｎ）設けられている。各ローカルメモリ４０２は、対応するコア４０１のみアクセス可能である。
【００３８】
タイマ４０３は、計時機能を有しており、時間に係る各種制御において用いられる。
【００３９】
ＲＯＭ４０４は、ソフトウェアおよび不揮発性のデータを格納する。
【００４０】
共有メモリ４０５は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で構成されており、揮発性のデータを格納する。共有メモリ４０５は、内部バス４０８に接続されており、複数のコア４０１が同時にアクセス可能である。共有メモリ４０５には、コア間通信に利用可能な複数のバッファ部９０１が設けられる。共有メモリ４０５の構成については後述する。
【００４１】
通信部４０６は、ＥＣＵ３０２の外部との入出力インターフェースである。通信部４０６は、ネットワークリンク３０１に接続されている。また、通信部４０６は、駆動装置５や認識装置６等が接続されており、これらとの間で制御信号や認識情報等の送受信を行う。
【００４２】
外部メモリ４０７は、電源遮断後もデータを保持可能な不揮発性の記憶装置で構成されている。外部メモリ４０７は、例えばＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＳＳＤ（ＳｏｌｉｄＳｔａｔｅＤｒｉｖｅ）やＨＤＤ（ＨａｒｄＤｉｓｃＤｒｉｖｅ）等である。
【００４３】
内部バス４０８は、複数のコア４０１、タイマ４０３、ＲＯＭ４０４、共有メモリ４０５および通信部４０６および外部メモリ４０７が接続されており、内部バス４０８を用いてＥＣＵ３０２内部での通信が行われる。複数のコア４０１は、内部バス４０８を介して共有メモリ４０５にアクセスする。
【００４４】
本実施例において、ＥＣＵ３０２の複数のコア４０１、複数のローカルメモリ４０２、タイマ４０３、ＲＯＭ４０４、共有メモリ４０５、通信部４０６および内部バス４０８は、１つの車両制御用のマルチコアマイコンで構成されている。マルチコアマイコンは、ＥＣＵ３０２を構成することにより車両の状態および制御指示に基づいて車両を制御する。小さい遅延で複数の制御を並行して行うことが要求される車両制御用のマルチコアマイコンにおいて複数の通信系統によるコア間通信を並行して行い、遅延を抑制することができる。マルチコアマイコンを採用することで、ＥＣＵ３０２をコンパクトに構成することができる。または、ＥＣＵ３０２は、ＣＰＵや各種メモリ、タイマモジュール、通信モジュールなどの別個の集積回路等を組み合わせて構成されていてもよい。
【００４５】
＜機能モジュールの構成＞
図４は、コア４０１の動作によって実現される機能モジュールの構成例を示している。
【００４６】
図４に示すように、コア４０１は、制御部５０１と、通信管理部５０２と、時間管理部５０３と、データテーブル５０４と、バッファ５０５と、して機能する。
【００４７】
制御部５０１は、通信部４０６から取得したデータの解析や、機能モジュール全体の制御を司る。
【００４８】
通信管理部５０２は、通信部４０６の動作および状態を管理し、内部バス４０８を介して通信部４０６に指示を行う。
【００４９】
時間管理部５０３は、タイマ４０３を管理し、時間に関する情報取得や制御を行う。
【００５０】
データテーブル５０４は、車両制御に必要な情報を保持する。
【００５１】
バッファ５０５は、一時的にデータを格納する。
【００５２】
図４に示す機能モジュールは、コア４０１上の動作概念を示したものである。コア４０１は、動作時に必要な情報はＲＯＭ４０４および共有メモリ４０５から適宜読み出しを行い、またはＲＯＭ４０４および共有メモリ４０５に適宜書き込みを行い動作する。また、コア４０１は、ローカルメモリ４０２を一時的なデータ格納場所として利用する。
【００５３】
＜共有メモリおよびソフトウェアコンポーネントの構成＞
図５は、共有メモリ４０５および各コア４０１がマルチコア用ソフトウェアを実行することにより実現されるソフトウェアコンポーネントの構成例を示している。
【００５４】
図５においては、２つのコア４０１が共有メモリ４０５を介してデータ通信（コア間通信）を行う。すなわち、送信側のコア４０１−１（送信コア）が、共有メモリ４０５を介するコア間通信において後述するバッファ部９０１にデータを書き込み、受信側のコア４０１−２（受信コア）が、該コア間通信においてバッファ部９０１からデータを読み出す。このようなコア間通信には、それぞれ別個の通信として区別される複数の通信系統がある。通信系統は、例えば、コア間通信で送受信されるデータの種別毎に設けることができる。データの種別は、自動車の車両制御の例では、アクセルの踏み込み量、ブレーキの踏み込み量、ハンドルの操作量などであり、車両制御の制御項目とも言える。データの種別毎、すなわち制御項目毎に通信系統が設けられる。
【００５５】
まず、共有メモリ４０５の構成について説明する。
【００５６】
共有メモリ４０５には、コア間通信においてデータの送受信に用いられる複数のバッファ部９０１（９０１−１、９０１−２、・・・、９０１−Ｋ、Ｋは２以上の自然数）が設けられている。
【００５７】
共有メモリ４０５の各バッファ部９０１は、データ部９１１と、カウンタ部９１２とを有している。
【００５８】
データ部９１１は、コア間で共有または同期するために送受信されるデータ（以下、単に「送受信データ」という）が格納される領域である。データ部９１１は、各種データ型（Ｉｎｔ型、Ｌｏｎｇ型、Ｆｌｏａｔ型、Ｃｈａｒ型、Ｂｏｏｌｅａｎ型、・・・）又は配列や構造体、ポインタ型の送受信データが格納される。
【００５９】
カウンタ部９１２は、データ部９１１に格納されている送受信データの新旧の順序関係を表すカウンタ値が格納される領域である。カウンタ部９１２には、例えば、順序を示す数字（１，２，３，４、・・・）が各種データ型（Ｉｎｔ型、Ｌｏｎｇ型、Ｆｌｏａｔ型、Ｃｈａｒ型、Ｂｏｏｌｅａｎ型、・・・）で格納される。カウンタ値は、順序関係を表すものであればよく、文字列（例えば、ｆｉｒｓｔ、ｓｅｃｏｎｄ、ｔｈｉｒｄ、・・・）等で順序関係を表現してもかまわない。
【００６０】
複数のバッファ部９０１は、連続した番地に並べて配置されていてもよい。または、不連続な番地に配置され、それぞれの前後の接続関係を示すポインタ型のデータを用いたリスト構造で接続されていてもよい。後述する第２の実施例〜第５の実施例においても同様である。
【００６１】
本実施例において、複数のバッファ部９０１は、複数の通信系統毎に設けられている。例えば、アクセルの踏み込み量に関するデータを送受信する通信系統、ブレーキの踏み込み量に関するデータを送受信する通信系統、ハンドルの操作量に関するデータを送受信する通信系統など、送受信データの種別毎に複数のバッファ部９０１が設けられている。後述する第２の実施例および第３の実施例においても同様に、複数の通信系統毎（すなわち、送受信データの種別毎）に複数のバッファ部９０１が設けられている。
【００６２】
次に、ソフトウェアコンポーネントについて説明する。
【００６３】
複数のコア４０１の制御部５０１は、ＲＯＭ４０４に格納されているマルチコア用ソフトウェアを実行することによりソフトウェアコンポーネント６０１（以下、単に「ＳＷＣ６０１」という）として機能する。それぞれのコア４０１（４０１−１〜４０１−Ｎ）に対応して、ＳＷＣ６０１はＮ個（６０１−１〜６０１−Ｎ）設けられている。ＳＷＣ６０１は、例えば周期的（１ｍｓ毎、２ｍｓ毎、１０ｍｓ毎・・・）または、イベント（スイッチＯＮ／ＯＦＦ、ＩＧＮ  ＯＮ／ＯＦＦ、・・・）に応じて処理を開始する。
【００６４】
コア間通信の送受信データの送信側となるコア４０１−１のＳＷＣ６０１−１は、コア間通信で送受信データを送信するとき、複数のバッファ部９０１にそれぞれ格納されている通信系統毎に管理されるカウンタ値により定まるバッファ部９０１に、送受信データと書き込み順序に応じて更新されたカウンタ値とを書き込む。ＳＷＣ６０１−１は、書き込みバッファ決定部７０１と、データ書き込み部７０２と、を有している。
【００６５】
書き込みバッファ決定部７０１は、複数のバッファ部９０１の中から送受信データを書き込む対象となる１つのバッファ部９０１を決定する。本実施例では、書き込みバッファ決定部７０１は、送受信データに係る通信系統に用いられる複数のバッファ部９０１のそれぞれのカウンタ部９１２に格納されたカウンタ値をバッファ情報９０７として収集する。そして、該複数のバッファ部９０１の中から最も古いカウンタ値が格納されたカウンタ部９１２を持つバッファ部９０１を選択する。そのあと、書き込みバッファ決定部７０１は、書き込み指示７０３として、選択したバッファ部９０１をデータ書き込み部７０２に通知する。
【００６６】
データ書き込み部７０２は、送受信データとしての書き込みデータ９０４を、書き込み指示７０３に示されるバッファ部９０１のデータ部９１１に書き込むとともに、当該バッファ部９０１のカウンタ部９１２に最も新しいカウンタ値を書き込む。
【００６７】
コア間通信の送受信データの受信側となるコア４０１−２のＳＷＣ６０１−２は、コア間通信で送受信データを受信するとき、複数のバッファ部９０１にそれぞれ格納されている通信系統毎に管理されるカウンタ値により定まる、通信系統毎の最も新しい送受信データが格納されているバッファ部９０１から送受信データを読み出す。ＳＷＣ６０１−２は、読み出しバッファ決定部８０１と、データ読み出し部８０２と、を有している。
【００６８】
読み出しバッファ決定部８０１は、複数のバッファ部９０１の中から送受信データを読み出す対象となる１つのバッファ部９０１を決定する。本実施例では、読み出しバッファ決定部８０１は、送受信データに係る通信系統に用いられる複数のバッファ部９０１のそれぞれのカウンタ部９１２に格納されたカウンタ値をバッファ情報９０７として収集する。そして、該複数のバッファ部９０１の中から最も新しいカウンタ値が格納されたカウンタ部９１２を持つバッファ部９０１を選択する。そのあと、読み出しバッファ決定部８０１は、読み出し指示８０３として、選択したバッファ部９０１をデータ読み出し部８０２に通知する。
【００６９】
データ読み出し部８０２は、送受信データとしての読み出しデータ９０５を、読み出し指示８０３に示されるバッファ部９０１のデータ部９１１から読み出す。
【００７０】
このように、並列動作する異なるコア４０１−１（ＳＷＣ６０１−１）およびコア４０１−２（ＳＷＣ６０１−２）が、共有メモリ４０５の複数のバッファ部９０１を介することで、同じデータを共有することが可能となる。
【００７１】
本実施例によれば、複数のコア４０１間で共有すべきデータについて、送信側のコア４０１−１は、共有メモリ４０５に設けられた最も古い送受信データが格納されているバッファ部９０１にアクセスし、受信側のコア４０１−２は、最も新しい送受信データが格納されているバッファ部９０１にアクセスする。そのため、送信側のコア４０１−１による書き込みと受信側のコア４０１−２による読み出しとが同時に行われたとしても、それぞれが異なる領域にアクセスするため、処理をロックせずともデータの競合を起こさずにコア間通信が可能となる。
【００７２】
したがって、カウンタ値を用いることで、従来技術のようなＦＩＦＯの読み出し待ちやスピンロックのような通信待機が発生しないので、制御の遅延を抑制できる。
【実施例２】
【００７３】
次に、第２の実施例について説明する。
【００７４】
第２の実施例において第１の実施例と異なる点は、バッファ部９０１の使用状態を示すステータス値を用いることで、万が一、送信側のコア４０１のデータ書き込み部７０２と受信側のコア４０１のデータ読み出し部８０２とが同時に同じバッファ部にアクセスしたとしても、データの競合を回避できる点である。
【００７５】
第２の実施例において、車両システム、車両制御システム、電子制御ユニットおよび機能モジュールについては、上述した第１の実施例と同じであるので、説明は省略する。
【００７６】
以下に、第２の実施例における共有メモリおよびソフトウェアコンポーネントについて、図６を参照して説明する。
【００７７】
＜共有メモリおよびソフトウェアコンポーネントの構成＞
図６は、共有メモリ４０５および各コア４０１がマルチコア用ソフトウェアを実行することにより実現されるソフトウェアコンポーネントの構成例を示している。
【００７８】
図６においては、２つのコア４０１が共有メモリ４０５を介してデータ通信（コア間通信）を行う。すなわち、送信側のコア４０１−１が、共有メモリ４０５を介するコア間通信においてバッファ部９０１にデータを書き込み、受信側のコア４０１−２が、該コア間通信においてバッファ部９０１からデータを読み出す。
【００７９】
詳細には、共有メモリ４０５のバッファ部９０１が、使用中または未使用を示すステータス値を格納する。送信側のコア４０１は、未使用のステータス値が格納されているバッファ部９０１の中から最も古いカウンタ値が格納されているバッファ部９０１を選択し、該バッファ部９０１にデータを書き込む前に使用中のステータス値を格納し、該バッファ部９０１に前記データを書き込んだ後に未使用のステータス値を格納する。受信側のコア４０１は、未使用のステータス値が格納されているバッファ部９０１の中から最も新しいカウンタ値が格納されているバッファ部９０１を選択し、該バッファ部９０１からデータを読み出す前に使用中のステータス値を格納し、該バッファ部９０１からデータを読み込んだ後に未使用のステータスを格納する。
【００８０】
まず、共有メモリ４０５の構成について説明する。
【００８１】
共有メモリ４０５には、コア間通信においてデータの送受信に用いられる複数のバッファ部９０１（９０１−１、９０１−２、・・・、９０１−Ｋ、Ｋは２以上の自然数）が設けられている。
【００８２】
共有メモリ４０５の各バッファ部９０１は、データ部９１１と、カウンタ部９１２と、ステータス部９１３と、を有している。
【００８３】
データ部９１１およびカウンタ部９１２は、第１の実施例と同じ構成である。
【００８４】
ステータス部９１３は、バッファ部９０１の使用状態を示すステータス値が格納される。ステータス値として格納される値には、バッファ部９０１が未使用であることを示す値と、バッファ部９０１が使用中であることを示す値と、が少なくとも含まれている。ステータス値は、未使用および使用中を表すことができるように、少なくとも２つの値を表現できるデータ型（Ｉｎｔ型、Ｌｏｎｇ型、Ｆｌｏａｔ型、Ｃｈａｒ型、Ｂｏｏｌｅａｎ型、・・・）で実装する。本実施例において、未使用を示すステータス値以外の値は、使用中を示すものとしている。
【００８５】
次に、ソフトウェアコンポーネントについて説明する。
【００８６】
送信側のコア４０１−１のＳＷＣ６０１−１は、書き込みバッファ決定部７０１と、データ書き込み部７０２と、を有している。
【００８７】
書き込みバッファ決定部７０１は、未使用のステータス値が格納されている複数のバッファ部９０１の中から送受信データを書き込む対象となる１つのバッファ部９０１を決定する。本実施例では、書き込みバッファ決定部７０１は、送受信データに係る通信系統に用いられる複数のバッファ部９０１のそれぞれのカウンタ部９１２に格納されたカウンタ値をバッファ情報９０７として収集する。そして、該複数のバッファ部９０１の中から最も古いカウンタ値が格納されたカウンタ部９１２を持つバッファ部９０１を選択する。次に、選択したバッファ部９０１のステータス部９１３を参照してステータス値を確認する。ステータス値が未使用であるとき、書き込みバッファ決定部７０１は、書き込み指示７０３として、選択したバッファ部９０１をデータ書き込み部７０２に通知する。または、ステータス値が使用中（未使用以外の値）であるとき、選択中のバッファ部９０１のカウンタ値よりも次に古いバッファ部９０１を選択して再度ステータス部９１３を確認する。この動作をステータス値が未使用となるまで繰り返したのち、書き込み指示７０３を通知する。
【００８８】
データ書き込み部７０２は、書き込み指示７０３に示されるバッファ部９０１のステータス部９１３に使用中のステータス値を書き込む。次に、送受信データとしての書き込みデータ９０４を、書き込み指示７０３に示されるバッファ部９０１のデータ部９１１に書き込むとともに、当該バッファ部９０１のカウンタ部９１２に最も新しいカウンタ値を書き込む。そして、書き込み指示７０３に示されるバッファ部９０１のステータス部９１３に未使用のステータス値を書き込む。
【００８９】
受信側のコア４０１−２のＳＷＣ６０１−２は、読み出しバッファ決定部８０１と、データ読み出し部８０２と、を有している。
【００９０】
読み出しバッファ決定部８０１は、未使用のステータス値が格納されている複数のバッファ部９０１の中から送受信データを読み出す対象となる１つのバッファ部９０１を決定する。本実施例では、読み出しバッファ決定部８０１は、送受信データに係る通信系統に用いられる複数のバッファ部９０１のそれぞれのカウンタ部９１２に格納されたカウンタ値をバッファ情報９０７として収集する。そして、該複数のバッファ部９０１の中から最も新しいカウンタ値が格納されたカウンタ部９１２を持つバッファ部９０１を選択する。次に、選択したバッファ部９０１のステータス部９１３を参照してステータス値を確認する。ステータス値が未使用であるとき、読み出しバッファ決定部８０１は、読み出し指示８０３として、選択したバッファ部９０１をデータ読み出し部８０２に通知する。または、ステータス値が使用中（未使用以外の値）であるとき、選択中のバッファ部９０１のカウンタ値よりも次に古いバッファ部９０１を選択して再度ステータス部９１３を確認する。この動作をステータス値が未使用となるまで繰り返したのち、読み出し指示８０３を通知する。
【００９１】
データ読み出し部８０２は、読み出し指示８０３に示されるバッファ部９０１のステータス部９１３に使用中のステータス値を書き込む。次に、送受信データとしての読み出しデータ９０５を、読み出し指示８０３に示されるバッファ部９０１のデータ部９１１から読み出す。そして、読み出し指示８０３に示されるバッファ部９０１のステータス部９１３に未使用のステータス値を書き込む。
【００９２】
本実施例によれば、共有メモリ４０５上のバッファ部９０１へのアクセスにおいて、バッファ部９０１に格納されているステータス値を用いて使用中のバッファ部へのアクセスを回避する排他処理を行う。そのため、例えば、１つのコア４０１におけるマルチタスク処理や複数のコア４０１における並列処理において１つの通信系統に係る複数のバッファ部９０１を使用する場合など、１つのバッファ部に対して一のタスクや一のコアがアクセスしている途中で他のタスクや他のコアがアクセスすることを抑制できる。
【実施例３】
【００９３】
次に、第３の実施例について説明する。
【００９４】
第３の実施例において第１の実施例と異なる点は、メモリ故障判定部７０４を備えることで、メモリの一部が故障して使えなくなったバッファ部９０１が存在しても、そのバッファ部９０１を除外して通信を継続可能な点である。
【００９５】
第３の実施例において、車両システム、車両制御システム、電子制御ユニットおよび機能モジュールについては、上述した第１の実施例と同じであるので、説明は省略する。
【００９６】
以下に、第３の実施例における共有メモリおよびソフトウェアコンポーネントについて、図７を参照して説明する。
【００９７】
＜共有メモリおよびソフトウェアコンポーネントの構成＞
図７は、共有メモリ４０５および各コア４０１がマルチコア用ソフトウェアを実行することにより実現されるソフトウェアコンポーネントの構成例を示している。
【００９８】
図７においては、２つのコア４０１が共有メモリ４０５を介してデータ通信（コア間通信）を行う。すなわち、送信側のコア４０１−１が、共有メモリ４０５を介するコア間通信においてバッファ部９０１にデータを書き込み、受信側のコア４０１−２が、該コア間通信においてバッファ部９０１からデータを読み出す。
【００９９】
詳細には、送信側のコア４０１−１は、バッファ部９０１の故障の有無を確認し、故障のないバッファ部９０１の中から最も古いカウンタ値が設定されているバッファ部９０１を選択し、該バッファ部９０１に前記データおよび最も新しいカウンタ値を書き込む。受信側のコア４０１−２は、バッファ部９０１の故障の有無を確認し、故障のないバッファ部９０１の中から最も新しいカウンタ値が格納されているバッファ部９０１を選択し、該バッファ部９０１からデータを読み出す。
【０１００】
共有メモリ４０５は、第１の実施例と同じ構成である。
【０１０１】
次に、ソフトウェアコンポーネントについて説明する。
【０１０２】
送信側のコア４０１−１のＳＷＣ６０１−１は、書き込みバッファ決定部７０１と、データ書き込み部７０２と、メモリ故障判定部７０４と、を有している。
【０１０３】
メモリ故障判定部７０４は、故障検知機能によって、バッファ部９０１が故障していることを検知する。故障検知機能として、例えば、ＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋ  ａｎｄ  Ｃｏｒｒｅｃｔ  ｍｅｍｏｒｙ）回路やＢＩＳＴ（Ｂｕｉｌｔ−ｉｎ  Ｓｅｌｆ  Ｔｅｓｔ）回路を用いて、メモリ故障を検知することができる。メモリ故障判定部７０４はこれらメモリ故障の検知に用いられる故障監視情報９０８を共有メモリ４０５から受信する。メモリ故障判定部７０４は、メモリ故障を検知すると、故障したバッファ部９０１を示す故障バッファ情報７０５を、書き込みバッファ決定部７０１に通知する。
【０１０４】
書き込みバッファ決定部７０１は、故障バッファ情報７０５に示される故障したバッファ部９０１を除外した複数のバッファ部９０１の中から送受信データを書き込む対象となる１つのバッファ部９０１を決定する。本実施例では、書き込みバッファ決定部７０１は、送受信データに係る通信系統に用いられる複数のバッファ部９０１の中から故障バッファ情報７０５に示される故障したバッファ部９０１を除外する。残りのバッファ部９０１のそれぞれのカウンタ部９１２に格納されたカウンタ値をバッファ情報９０７として収集する。そして、バッファ情報９０７を収集した複数のバッファ部９０１の中から最も古いカウンタ値が格納されたカウンタ部９１２を持つバッファ部９０１を選択する。そのあと、書き込みバッファ決定部７０１は、書き込み指示７０３として、選択したバッファ部９０１をデータ書き込み部７０２に通知する。
【０１０５】
データ書き込み部７０２は、送受信データとしての書き込みデータ９０４を、書き込み指示７０３に示されるバッファ部９０１のデータ部９１１に書き込むとともに、当該バッファ部９０１のカウンタ部９１２に最も新しいカウンタ値を書き込む。
【０１０６】
受信側のコア４０１−２のＳＷＣ６０１−２は、読み出しバッファ決定部８０１と、データ読み出し部８０２と、メモリ故障判定部８０４と、を有している。
【０１０７】
メモリ故障判定部８０４は、故障検知機能によって、バッファ部９０１が故障していることを検知する。故障検知機能として、例えば、ＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋ  ａｎｄ  Ｃｏｒｒｅｃｔ  ｍｅｍｏｒｙ）回路やＢＩＳＴ（Ｂｕｉｌｔ−ｉｎ  Ｓｅｌｆ  Ｔｅｓｔ）回路を用いて、メモリ故障を検知することができる。メモリ故障判定部８０４はこれらメモリ故障の検知に用いられる故障監視情報９０８を共有メモリ４０５から受信する。メモリ故障判定部８０４は、メモリ故障を検知すると、故障したバッファ部９０１を示す故障バッファ情報８０５を、読み出しバッファ決定部８０１に通知する。
【０１０８】
読み出しバッファ決定部８０１は、故障バッファ情報８０５に示される故障したバッファ部９０１を除外した複数のバッファ部９０１の中から送受信データを読み出す対象となる１つのバッファ部９０１を決定する。本実施例では、読み出しバッファ決定部８０１は、送受信データに係る通信系統に用いられる複数のバッファ部９０１中から故障バッファ情報８０５に示される故障したバッファ部９０１を除外する。残りのバッファ部９０１のそれぞれのカウンタ部９１２に格納されたカウンタ値をバッファ情報９０７として収集する。そして、バッファ情報９０７を収集した複数のバッファ部９０１の中から最も新しいカウンタ値が格納されたカウンタ部９１２を持つバッファ部９０１を選択する。そのあと、読み出しバッファ決定部８０１は、読み出し指示８０３として、選択したバッファ部９０１をデータ読み出し部８０２に通知する。
【０１０９】
データ読み出し部８０２は、送受信データとしての読み出しデータ９０５を、読み出し指示８０３に示されるバッファ部９０１のデータ部９１１から読み出す。
【０１１０】
本実施例によれば、故障により一部のバッファ部９０１が利用不可能になったとしても、通信を止めることなく、故障のないバッファ部９０１を使ったコア間通信が可能となる。
【実施例４】
【０１１１】
次に、第４の実施例について説明する。
【０１１２】
第４の実施例において第１の実施例と異なる点は、バッファ部９０１に通信系統を識別する通信識別子を格納することで、複数の通信系統毎に複数のバッファ部を設ける必要がなくなり、より少ないバッファ部を用いて待ち時間のないコア間通信が実現可能な点である。
【０１１３】
第４の実施例において、車両システム、車両制御システム、電子制御ユニットおよび機能モジュールについては、上述した第１の実施例と同じであるので、説明は省略する。
【０１１４】
以下に、第４の実施例における共有メモリおよびソフトウェアコンポーネントについて、図８および図９を参照して説明する。
【０１１５】
＜共有メモリおよびソフトウェアコンポーネントの構成＞
図８は、共有メモリ４０５および各コア４０１がマルチコア用ソフトウェアを実行することにより実現されるソフトウェアコンポーネントの構成例を示している。
【０１１６】
図８においては、４つのコア４０１が共有メモリ４０５を介してデータ通信（コア間通信）を行う。すなわち、送信側のコア４０１−１が、共有メモリ４０５を介するコア間通信においてバッファ部９０１にデータを書き込み、受信側のコア４０１−２が、該コア間通信においてバッファ部９０１からデータを読み出す。また、送信側のコア４０１−３が、共有メモリ４０５を介するコア間通信においてバッファ部９０１にデータを書き込み、受信側のコア４０１−４が、該コア間通信においてバッファ部９０１からデータを読み出す。
【０１１７】
詳細には、バッファ部９０１は、通信系統を一意に識別する通信識別子を格納する。コア４０１−１とコア４０１−２とのコア間通信には一の通信識別子を用い、コア４０１−３とコア４０１−４とのコア間通信には上記一の通信識別子とは異なる他の通信識別子を用いる。
【０１１８】
送信側のコア４０１−１は、コア４０１−２とコア間通信でデータを送信するとき、該コア間通信に係る通信系統の通信識別子（例えば、通信識別子Ａ）が格納されているバッファ部９０１の中から最も古いカウンタ値が設定されているバッファ部９０１を選択し、該バッファ部９０１にデータと、該通信系統における最も新しいカウンタ値と、該通信系統の通信識別子Ａと、を書き込む。受信側のコア４０１−２は、コア４０１−１とコア間通信でデータを受信するとき、該コア間通信に係る通信系統の通信識別子Ａが格納されているバッファ部９０１の中から最も新しいカウンタ値が設定されているバッファ部９０１を選択し、該バッファ部からデータを読み出す。
【０１１９】
また、送信側のコア４０１−３は、４０１−４とコア間通信でデータを送信するとき、該コア間通信に係る通信系統の通信識別子（例えば、通信識別子Ｂ）が格納されているバッファ部９０１の中から最も古いカウンタ値が設定されているバッファ部９０１を選択し、該バッファ部９０１にデータと、該通信系統における最も新しいカウンタ値と、該通信系統の通信識別子Ｂと、を書き込む。受信側のコア４０１−４は、コア４０１−３とコア間通信でデータを受信するとき、該コア間通信に係る通信系統の通信識別子Ｂが格納されているバッファ部９０１の中から最も新しいカウンタ値が設定されているバッファ部９０１を選択し、該バッファ部からデータを読み出す。
【０１２０】
各コア４０１は、通信識別情報１００１を有している。図９に、通信識別情報１００１（１００１−１、１００１−２、１００１−３、・・・）が格納されたテーブルの一例を示す。各コア４０１は、コア間通信の送受信データについて、通信識別情報１００１を参照して、送受信データに係る通信系統において用いられる通信識別子やデータ型を取得する。
【０１２１】
通信識別情報１００１は、通信識別子１００２と、送信者名１００３と、受信者名１００４と、データ型１００５と、ラベル名１００６と、を有している。通信識別情報１００１は、通信識別情報１００１は、これら以外の情報を含んでいてもよい。
【０１２２】
通信識別子１００２は、数字や文字、記号またはこれらの組み合わせで表されるデータであり、通信系統を一意に識別する値が設定される。送信者名１００３は、数字や文字、記号またはこれらの組み合わせで表されるデータであり、送信側のＳＷＣ６０１等を示す。受信者名１００４は、数字や文字、記号またはこれらの組み合わせで表されるデータであり、受信側のＳＷＣ６０１等を示す。データ型１００５は、通信識別子１００２で識別される通信系統において送受信される送受信データのデータ型を示す。データ型１００５は、各種データ型（Ｉｎｔ型、Ｌｏｎｇ型、Ｆｌｏａｔ型、Ｃｈａｒ型、Ｂｏｏｌｅａｎ型、・・・）又は配列や構造体、ポインタ型等、ソフトウェアの変数を宣言可能なデータ型を表す値が設定される。ラベル名１００６は、数字や文字、記号またはこれらの組み合わせで表されるデータであり、通信識別情報１００１に関連する情報を付加する。ラベル名１００６は、本実施例では、例えば、アクセルの踏み込み量、ブレーキの踏み込み量、ハンドルの操作量等を表し、通信識別子１００２と一対一で対応する。各通信識別情報１００１は、異なる通信識別子では、一意な組み合わせである必要があり、通信識別子１００２が異なるが、他の情報が同じとなる通信識別情報が存在してはならない。
【０１２３】
各コア４０１は、例えば、アクセルの踏み込み量に関するデータをコア間通信で送受信する場合、アクセル踏み込み量に係るラベル名１００６を含む通信識別情報１００１をテーブルから抽出し、抽出した通信識別情報１００１が有する通信識別子１００２およびデータ型１００５を用いてデータを送受信する。
【０１２４】
次に、共有メモリ４０５の構成について説明する。
【０１２５】
共有メモリ４０５には、コア間通信においてデータの送受信に用いられる複数のバッファ部９０１（９０１−１、９０１−２、・・・、９０１−Ｋ、Ｋは２以上の自然数）が設けられている。これら複数のバッファ部９０１は、複数の通信系統において共用される。
【０１２６】
共有メモリ４０５の各バッファ部９０１は、データ部９１１と、カウンタ部９１２と、識別部９１４と、を有している。
【０１２７】
データ部９１１およびカウンタ部９１２は、第１の実施例と同じ構成である。
【０１２８】
識別部９１４は、上述した通信識別子が格納される。
【０１２９】
次に、ソフトウェアコンポーネントについて説明する。
【０１３０】
送信側のコア４０１−１のＳＷＣ６０１−１およびコア４０１−３のＳＷＣ６０１−３は、書き込みバッファ決定部７０１と、データ書き込み部７０２と、を有している。
【０１３１】
書き込みバッファ決定部７０１は、送受信データに係る通信系統を識別する通信識別子が識別部９１４に格納されている複数のバッファ部９０１の中から送受信データを書き込む対象となる１つのバッファ部９０１を決定する。本実施例では、書き込みバッファ決定部７０１は、送受信データに係る通信系統を識別する通信識別子が識別部９１４に格納されている複数のバッファ部９０１を抽出する。抽出したバッファ部９０１のそれぞれのカウンタ部９１２に格納されたカウンタ値をバッファ情報９０７として収集する。そして、該複数のバッファ部９０１の中から最も古いカウンタ値が格納されたカウンタ部９１２を持つバッファ部９０１を選択する。そのあと、書き込みバッファ決定部７０１は、書き込み指示７０３として、選択したバッファ部９０１をデータ書き込み部７０２に通知する。
【０１３２】
データ書き込み部７０２は、送受信データとしての書き込みデータ９０４を、書き込み指示７０３に示されるバッファ部９０１のデータ部９１１に書き込むとともに、当該バッファ部９０１のカウンタ部９１２に最も新しいカウンタ値を書き込む。
【０１３３】
受信側のコア４０１−２のＳＷＣ６０１−２およびコア４０１−４のＳＷＣ６０１−４は、読み出しバッファ決定部８０１と、データ読み出し部８０２と、を有している。
【０１３４】
読み出しバッファ決定部８０１は、送受信データに係る通信系統を識別する通信識別子が識別部９１４に格納されている複数のバッファ部９０１の中から送受信データを読み出す対象となる１つのバッファ部９０１を決定する。本実施例では、読み出しバッファ決定部８０１は、送受信データに係る通信系統を識別する通信識別子が識別部９１４に格納されている複数のバッファ部９０１を抽出する。抽出したバッファ部９０１のそれぞれのカウンタ部９１２に格納されたカウンタ値をバッファ情報９０７として収集する。そして、該複数のバッファ部９０１の中から最も新しいカウンタ値が格納されたカウンタ部９１２を持つバッファ部９０１を選択する。そのあと、読み出しバッファ決定部８０１は、読み出し指示８０３として、選択したバッファ部９０１をデータ読み出し部８０２に通知する。
【０１３５】
データ読み出し部８０２は、送受信データとしての読み出しデータ９０５を、読み出し指示８０３に示されるバッファ部９０１のデータ部９１１から読み出す。
【０１３６】
本実施例によれば、通信系統を通信識別子で識別し、通信識別子をバッファ部にデータとともに書き込むので、バッファ部から通信識別子を取得することにより、そのバッファ部のデータがどの通信系統のデータかを容易に知得することができる。通信識別子を用いることで、複数の通信系統で同じバッファ部が活用可能となり、より少ないバッファ部（メモリ領域）を用いて通信待機のないコア間通信が可能となる。
【実施例５】
【０１３７】
次に、第５の実施例について説明する。
【０１３８】
第５の実施例において第１の実施例と異なる点は、書き込み制御部を設けることで、複数のデータ書き込み部が同時に書き込むことを回避できる点である。
【０１３９】
第５の実施例において、車両システム、車両制御システム、電子制御ユニットおよび機能モジュールについては、上述した第１の実施例と同じであるので、説明は省略する。
【０１４０】
以下に、第５の実施例における共有メモリおよびソフトウェアコンポーネントについて、図１０を参照して説明する。
【０１４１】
＜共有メモリおよびソフトウェアコンポーネントの構成＞
図１０は、共有メモリ４０５および各コア４０１がマルチコア用ソフトウェアを実行することにより実現されるソフトウェアコンポーネントの構成例を示している。
【０１４２】
図１０においては、３つのコア４０１が共有メモリ４０５を介してデータ通信（コア間通信）を行う。すなわち、送信側のコア４０１−１が、共有メモリ４０５を介するコア間通信においてバッファ部９０１にデータを書き込み、受信側のコア４０１−２およびコア４０１−４が、該コア間通信においてバッファ部９０１からデータを読み出す。
【０１４３】
詳細には、送信側のコア４０１−１はマルチタスク処理を実行しており、２つのソフトウェアコンポーネント（ＳＷＣ）６０１−１−１、６０１−１−２が動作している。２つのＳＷＣ６０１−１−１、６０１−１−２は同一の通信系統のコア間通信をコア４０１−２、４０１−４との間で行っている。
【０１４４】
送信側のＳＷＣ６０１−１−１、ＳＷＣ６０１−１−２は、コア間通信でデータを送信するとき、該コア間通信に係る通信系統の通信識別子が格納されているバッファ部９０１の中から最も古いカウンタ値が設定されているバッファ部９０１を選択し、該バッファ部９０１にデータと、該通信系統における最も新しいカウンタ値と、該通信系統の通信識別子と、を書き込む。受信側のコア４０１−２、４０１−４は、コア４０１−１とコア間通信でデータを受信するとき、該コア間通信に係る通信系統の通信識別子が格納されているバッファ部９０１の中から最も新しいカウンタ値が設定されているバッファ部９０１を選択し、該バッファ部からデータを読み出す。
【０１４５】
そして、送信側のコア４０１−１が、ＳＷＣ６０１−１−１およびＳＷＣ６０１−１−２のマルチタスク処理において一の通信系統に係るバッファ部９０１へのデータの書き込みが複数発生した場合に、同時に書き込むことがないように競合制御する。
【０１４６】
共有メモリ４０５は、第４の実施例と同じ構成である。
【０１４７】
送信側のコア４０１−１は、ＳＷＣ６０１−１−１およびＳＷＣ６０１−１−２と、書き込み制御部１１０１を有している。
【０１４８】
書き込み制御部１１０１は、ＳＷＣ６０１−１−１のデータ書き込み部７０２とＳＷＣ６０１−１−２のデータ書き込み部７０２とが、一の通信系統に係る送受信データを同時に共有メモリ４０５のバッファ部９０１に書き込むことがないよう制御（競合制御）するために、書き込み許可を各データ書き込み部７０２への排他的に送信する。書き込み制御部１１０１は、あらかじめ決められたタイミングで、ＳＷＣ６０１−１−１およびＳＷＣ６０１−１−２の書き込みバッファ決定部７０１に対して、書き込み許可１１０２を送信する。本実施例において、書き込み制御部１１０１は、１つのコア４０１−１にて動作する２つのＳＷＣ６０１−１−１、ＳＷＣ６０１−１−２の競合制御をするものであるが、これ以外にも、異なるコア４０１のＳＷＣ６０１のデータ書き込み部７０２の競合制御をするものであってもよい。
【０１４９】
次に、ソフトウェアコンポーネントについて説明する。
【０１５０】
送信側のコア４０１−１のＳＷＣ６０１−１−１およびＳＷＣ６０１−１−２は、書き込みバッファ決定部７０１と、データ書き込み部７０２と、を有している。
【０１５１】
書き込みバッファ決定部７０１は、書き込み制御部１１０１から書き込み許可１１０２を受信すると、送受信データに係る通信系統を識別する通信識別子が識別部９１４に格納されている複数のバッファ部９０１の中から送受信データを書き込む対象となる１つのバッファ部９０１を決定する。本実施例では、書き込みバッファ決定部７０１は、書き込み制御部１１０１から書き込み許可１１０２を受信すると、送受信データに係る通信系統を識別する通信識別子が識別部９１４に格納されている複数のバッファ部９０１を抽出し、抽出したバッファ部９０１のそれぞれのカウンタ部９１２に格納されたカウンタ値をバッファ情報９０７として収集する。そして、該複数のバッファ部９０１の中から最も古いカウンタ値が格納されたカウンタ部９１２を持つバッファ部９０１を選択する。そして、書き込みバッファ決定部７０１は、書き込み指示７０３として、選択したバッファ部９０１をデータ書き込み部７０２に通知する。
【０１５２】
データ書き込み部７０２は、送受信データとしての書き込みデータ９０４を、書き込み指示７０３に示されるバッファ部９０１のデータ部９１１に書き込むとともに、当該バッファ部９０１のカウンタ部９１２に最も新しいカウンタ値を書き込む。
【０１５３】
受信側のコア４０１−２およびコア４０１−４は、第４の実施例のコア４０１−２と同じ構成を有している。
【０１５４】
本実施例によれば、書き込み制御部を設けることで、複数のデータ書き込み部が同時に同じバッファ部にデータを書き込むことを抑制することができる。
【０１５５】
本技術分野の通常の知識を有する者には、本開示のその他の実装がここに開示された本開示の明細書及び実施形態の考察から明らかになる。記述された実施形態の多様な態様及び／又はコンポーネントは、単独又は如何なる組み合わせでも使用することが出来る。明細書と具体例は典型的なものに過ぎず、本開示の範囲と着想は特許請求の範囲で示される。
【符号の説明】
【０１５６】
１…車両システム、２…車両制御システム、３…通信装置、４…他の車両制御システム、５…駆動装置、６…認識装置、７…出力装置、８…入力装置、９…通知装置、３０１…ネットワークリンク、３０２…ＥＣＵ、３０３…ＧＷ、４０１…コア、４０２…ローカルメモリ、４０３…タイマ、４０４…ＲＯＭ、４０５…共有メモリ、４０６…通信部、４０７…外部メモリ、４０８…内部バス、５０１…制御部、５０２…通信管理部、５０３…時間管理部、５０４…データテーブル、５０５…バッファ、６０１…ＳＷＣ、７０１…書き込みバッファ決定部、７０２…データ書き込み部、７０３…書き込み指示、７０４…メモリ故障判定部、７０５…故障バッファ情報、８０１…読み出しバッファ決定部、８０２…データ読み出し部、８０３…読み出し指示、８０４…メモリ故障判定部、８０５…故障バッファ情報、９０１…バッファ部、９０４…書き込みデータ、９０５…読み出しデータ、９０７…バッファ情報、９０８…故障監視情報、９１１…データ部、９１２…カウンタ部、９１３…ステータス部、９１４…識別部、１００１…通信識別情報、１００２…通信識別子、１００３…送信者名、１００４…受信者名、１００５…データ型、１００６…ラベル名、１１０１…書き込み制御部、１１０２…書き込み許可、ＮＬ…他のネットワークリンク
【図１】
2019179309.tif 000003
【図２】
2019179309.tif 000004
【図３】
2019179309.tif 000005
【図４】
2019179309.tif 000006
【図５】
2019179309.tif 000007
【図６】
2019179309.tif 000008
【図７】
2019179309.tif 000009
【図８】
2019179309.tif 000010
【図９】
2019179309.tif 000011
【図１０】
2019179309.tif 000012