(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024047740
(43)【公開日】2024-04-08
(54)【発明の名称】電子制御装置、車両制御システム、及びタスクの制御方法
(51)【国際特許分類】
G06F 9/48 20060101AFI20240401BHJP
【FI】
G06F9/48 300A
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2022153400
(22)【出願日】2022-09-27
(71)【出願人】
【識別番号】509186579
【氏名又は名称】日立Astemo株式会社
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】溝口 将史
(72)【発明者】
【氏名】蛯名 朋仁
(72)【発明者】
【氏名】前田 功治
(72)【発明者】
【氏名】石郷岡 祐
(72)【発明者】
【氏名】吉村 健太郎
(57)【要約】
【課題】車両制御ソフトの変更前後で既存のタスクに関して処理結果が変化しないことが保証できるタスクのスケジューリングを提供する。
【解決手段】タイムスロット割り付け部は、当該新規タスクに入力されるデータを生成するタスクの情報と当該新規タスクを起動するタイムスロットから起算して何周期前に前記タスクが生成したデータを使用するかの情報を含むデータフロー要求情報、及び、当該新規タスクを実行するために必要なタイムスロット数の情報を含むタイムスロット要求情報との入力を受け、タイムスロット割り付け情報と前記データフロー要求情報と前記タイムスロット要求情報とに基づいて、前記新規タスクを実行する空きタイムスロットを探索し、前記探索された空きタイムスロットに当該新規タスクを割り付けるように前記タイムスロット割り付け情報を更新することを特徴とする電子制御装置。
【選択図】
図1
【特許請求の範囲】
【請求項1】
電子制御装置であって、
所定の演算処理を行って、周期的にタスクを実行する演算装置と、前記演算装置がアクセス可能な記憶装置とを備え、
前記タスクのデータ入力とデータ出力のタイミングは予め定められており、
前記予め定められたデータ入力タイミングからデータ出力タイミングの間における前記タスクの実行タイミングを規定するタイムスロット割り付け情報を保存するタイムスロット割り付け情報保存部と、
前記タイムスロット割り付け情報に従って前記タスクを起動するタスク起動部と、
新規タスクの実行タイミングに従って、当該新規タスクの情報を前記タイムスロット割り付け情報保存部に保存するタイムスロット割り付け部とを有し、
前記タイムスロット割り付け部は、
当該新規タスクに入力されるデータを生成するタスクの情報と当該新規タスクを起動するタイムスロットから起算して何周期前に前記タスクが生成したデータを使用するかの情報を含むデータフロー要求情報、及び、当該新規タスクを実行するために必要なタイムスロット数の情報を含むタイムスロット要求情報との入力を受け、
前記タイムスロット割り付け情報と前記データフロー要求情報と前記タイムスロット要求情報とに基づいて、前記新規タスクを実行する空きタイムスロットを探索し、
前記探索された空きタイムスロットに当該新規タスクを割り付けるように前記タイムスロット割り付け情報を更新することを特徴とする電子制御装置。
【請求項2】
請求項1に記載の電子制御装置であって、
前記タイムスロット割り付け部は、前記新規タスクのレイテンシが短くなるように、前記探索された空きタイムスロットに当該新規タスクを割り付けて前記タイムスロット割り付け情報を更新することを特徴とする電子制御装置。
【請求項3】
請求項1に記載の電子制御装置であって、
前記タイムスロット割り付け部は、
前記新規タスクに関する前記データフロー要求情報と前記タイムスロット要求情報の両方を満たす空きタイムスロットの探索に失敗した場合、前記データフロー要求情報と前記タイムスロット割り付け情報を参照し、既存タスクのデータフロー要求を満たすように前記既存タスクに割り付けたタイムスロットを変更して空きタイムスロットを生成し、
前記生成された空きタイムスロットに当該新規タスクの実行を割り付けるように前記タイムスロット割り付け情報を更新することを特徴とする電子制御装置。
【請求項4】
請求項1に記載の電子制御装置であって、
前記タスクを実行する他の電子制御装置と時刻同期し、
各タスクの入力と出力のタイミングは前記同期された時刻に基づいて予め定められており、
前記データフロー要求情報に基づいて前記他の電子制御装置との間でデータ通信が必要な場合、前記タイムスロット割り付け情報は予め定められた前記タスク間のデータ通信のタイミングを含むことを特徴とする電子制御装置。
【請求項5】
請求項1に記載の電子制御装置であって、
前記タイムスロット割り付け部は、前記新規タスクに関する前記データフロー要求情報と前記タイムスロット要求情報の両方を満たす空きタイムスロットの探索に失敗した場合、当該新規タスクの追加要求を棄却し、前記データフロー要求情報と前記タイムスロット割り付け情報を更新しないことを特徴とする電子制御装置。
【請求項6】
請求項1に記載の電子制御装置であって、
前記タイムスロット割り付け部は、
既存の前記タスクの処理時間が増加又は減少した場合、前記タイムスロット割り付け情報と前記データフロー要求情報と前記タイムスロット要求情報とに基づいて、前記処理時間が変更される既存のタスクを実行する空きタイムスロットを探索し、
前記探索された空きタイムスロットに当該既存のタスクを割り付けるように前記タイムスロット割り付け情報を更新することを特徴とする電子制御装置。
【請求項7】
請求項1に記載の電子制御装置であって、
前記タイムスロット割り付け部は、
既存の前記タスクの削除要求に従って、前記データフロー要求情報及び前記タイムスロット割り付け情報から前記削除要求にかかる既存のタスクの情報を削除することを特徴とする電子制御装置。
【請求項8】
請求項7に記載の電子制御装置であって、
前記タイムスロット割り付け部は、
前記データフロー要求情報を解析し、
前記削除にかかる既存のタスクが他の前記タスクの入力データを生成する場合、当該削除要求を棄却し、前記データフロー要求情報と前記タイムスロット割り付け情報を更新しないことを特徴とする電子制御装置。
【請求項9】
車両制御システムであって、
請求項1から8のいずれか一つに記載の電子制御装置と、
前記電子制御装置と通信可能なサーバとを備え、
前記サーバは、
タイムスロット割り付け情報とデータフロー要求情報を保存し、
前記タイムスロット割り付け情報と前記データフロー要求情報とに基づいて、タイムスロットの要求に従って空きタイムスロットを探索し、
前記探索された空きタイムスロットに前記要求にかかるタスクを割り付けるように前記タイムスロット割り付け情報を更新し、
前記更新されたタイムスロット割り付け情報を前記電子制御装置に送信し、
前記電子制御装置は、前記サーバから受信したタイムスロット割り付け情報で、自己が保存するタイムスロット割り付け情報を更新することを特徴とする車両制御システム。
【請求項10】
請求項9に記載の車両制御システムであって、
前記サーバは、前記タイムスロットの探索の結果として、前記タスクのタイムスロット数の変更の要求の棄却に関する情報を提示する改善情報表示部を有し、
当該棄却に関する情報は、前記データフロー要求情報を満たす空きタイムスロット数の最大値、及び、前記入力データを生成する既存のタスクの情報の少なくとも一つを含むことを特徴とする車両制御システム。
【請求項11】
電子制御装置が実行するタスクの制御方法であって、
前記電子制御装置は、所定の演算処理を行って、周期的にタスクを実行する演算装置と、前記演算装置がアクセス可能な記憶装置とを有し、
前記タスクのデータ入力とデータ出力のタイミングは予め定められており、
前記記憶装置は、前記予め定められたデータ入力タイミングからデータ出力タイミングの間における前記タスクの実行タイミングを規定するタイムスロット割り付け情報を保存し、
前記タスクの制御方法は、
前記演算装置が、前記タイムスロット割り付け情報に従って前記タスクを起動するタスク起動手順と、
前記演算装置が、新規タスクの実行タイミングに従って、当該新規タスクの情報を保存するタイムスロット割り付け手順とを含み、
前記タイムスロット割り付け手順では、
前記演算装置が、当該新規タスクに入力されるデータを生成するタスクの情報と当該新規タスクを起動するタイムスロットから起算して何周期前に前記タスクが生成したデータを使用するかの情報を含むデータフロー要求情報、及び、当該新規タスクを実行するために必要なタイムスロット数の情報を含むタイムスロット要求情報との入力を受け、
前記演算装置が、前記タイムスロット割り付け情報と前記データフロー要求情報と前記タイムスロット要求情報とに基づいて、前記新規タスクを実行する空きタイムスロットを探索し、
前記演算装置が、前記探索された空きタイムスロットに当該新規タスクを割り付けるように前記タイムスロット割り付け情報を更新することを特徴とするタスクの制御方法。
【請求項12】
請求項11に記載のタスクの制御方法であって、
前記タイムスロット割り付け手順では、前記演算装置が、前記新規タスクのレイテンシが短くなるように、前記探索された空きタイムスロットに当該新規タスクを割り付けて、前記タイムスロット割り付け情報を更新することを特徴とするタスクの制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、電子制御装置及び車両制御システムに関する。
【背景技術】
【0002】
自動運転等などの車両制御の高度化・複雑化に従って、車両制御ソフトの継続的な改善が求められている。車両制御ソフトはリアルタイム性を要求され、各タスクは所定のデッドラインまでに処理を完了させる必要がある。しかし、車両制御ソフトを変更するたびにタスクスケジューリングを実施すると、その設計及び検証にコストを要するため、車両制御ソフトの継続的な改善におけるボトルネックとなっている。
【0003】
タスクスケジューリング技術として、特開2012-181852(特許文献1)に記載の技術がある。この公報は、特にオンボードエレクトロニクスの分野に使用するのに適している、リソースを有効に使用できるタスクの処理のスケジューリング方法を提供することを課題とし、その解決手段として、タスクの処理は、タスクの実行に必要なリソースを設定するステップと、設定されたリソース上でタスクを実行するステップとを含み、スケジューリングにおいて、少なくとも1つの処理すべきタスクレベルを選択することからなるステップと、優先順位に従って処理すべきタスクレベルに基づいてタスクをソートすることにより、タスクの処理に必要なリソースの数、及びタスクの特性時間に応じたタスクの処理の優先順位を決定するステップとを含むことが記載されている。
【0004】
また、特開2009-80820号公報(特許文献2)によれば、各タスクの必要性能を満たすための優先度を指定するプログラム設計を容易にし、プログラム設計の柔軟性を有するタスク切換装置を提供することを課題とし、その解決手段として、プロセッサにおいてタイムスロットを切り換えることによりタイムスロットに割り当てられたタスクの実行を切り換えるタスク切換装置であって、タスクとタイムスロットを対応付けるポインタ及び割当時間の指定を有する第1タイプの複数のタスクのそれぞれの割当時間を記憶するタイムスロット情報記憶手段と、優先度を有する第2タイプの複数のタスクのそれぞれの優先度を記憶するタスク記憶手段と、一周期内の複数のタイムスロットに対して、前記第1タイプの複数のタスクのそれぞれを前記ポインタに基づいて1タスク対1タイムスロットで1つのタイムスロットに割り当て、前記第2タイプの複数のタスクを前記ポインタに基づいて多タスク対1タイムスロットで前記第1タイプのタスクが割り当てられていない1つの特定のタイムスロットに割り当てる割当手段と、前記タイムスロット情報記憶手段に記憶された前記第1タイプの複数のタスクのそれぞれに指定された割当時間に基づいてタイムスロットの切り換えを行うタイムスロット切換手段と、前記特定のタイムスロット以外のタイムスロットに切り換えられた場合に、当該タイムスロットに割り当てられたタスクを選択し、前記特定のタイムスロットに切り換えられた場合に、第二タイプの複数のタスクから前記タスク記憶手段に記憶された前記優先度に基づいて1つのタスクを選択するタスク選択手段とを備えることが記載されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2012-181852号公報
【特許文献2】特開2009-80820号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1によれば、各タスクの実行に必要なCPU(Central Processing Unit)のリソース量と、残り時間や優先度グループにより算出される特性値に基づいて、タスクをソートしリソースを割り当てることでリソースを効率的に利用できる。しかしながら、ソートにより各タスクがCPUによって処理されるタイミングが変動するため、車両制御ソフトを更新した場合、各タスクの処理タイミングが変動する可能性がある。これは、タスク間のデータ通信や、電子制御装置(ECU:Electronic Control Unit)外部との通信に影響する可能性がある。従って、車両制御ソフトの変更により通信に影響が生じないことを検証する必要がある。
【0007】
特許文献2によれば、タイムスロットを2種類に分け、第1タイムスロットに1対1でタスクを割り付け、第二タイムスロットに多対1でタスクを割り付けることにより優先度設計を容易化する。しかしながら、特に第二のタイムスロットは車両制御ソフトの変更によりスケジューリングが変化する可能性があり、特許文献1と同様に、検証が必要となる。
【0008】
上記を踏まえ、本発明は、車両制御ソフトの変更時におけるリアルタイムタスクのスケジューリング設計及び検証をできる限り不要化することを目的とし、車両制御ソフトの変更前後で既存のタスクに関して処理結果が変化しないことが保証できるタスクのスケジューリングの提供が課題である。
【課題を解決するための手段】
【0009】
前述の課題を解決するために、本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、電子制御装置であって、所定の演算処理を行って、周期的にタスクを実行する演算装置と、前記演算装置がアクセス可能な記憶装置とを備え、前記タスクのデータ入力とデータ出力のタイミングは予め定められており、前記予め定められたデータ入力タイミングからデータ出力タイミングの間における前記タスクの実行タイミングを規定するタイムスロット割り付け情報を保存するタイムスロット割り付け情報保存部と、前記タイムスロット割り付け情報に従って前記タスクを起動するタスク起動部と、新規タスクの実行タイミングに従って、当該新規タスクの情報を前記タイムスロット割り付け情報保存部に保存するタイムスロット割り付け部とを有し、前記タイムスロット割り付け部は、当該新規タスクに入力されるデータを生成するタスクの情報と当該新規タスクを起動するタイムスロットから起算して何周期前に前記タスクが生成したデータを使用するかの情報を含むデータフロー要求情報、及び、当該新規タスクを実行するために必要なタイムスロット数の情報を含むタイムスロット要求情報との入力を受け、前記タイムスロット割り付け情報と前記データフロー要求情報と前記タイムスロット要求情報とに基づいて、前記新規タスクを実行する空きタイムスロットを探索し、前記探索された空きタイムスロットに当該新規タスクを割り付けるように前記タイムスロット割り付け情報を更新することを特徴とする電子制御装置。
【発明の効果】
【0010】
本発明の一態様によれば、電子制御装置に新規にタスクを追加してもタイミング設計及び検証を不要化し、車両制御ソフトの継続的な改善を実現できる。前述した以外の課題、構成及び効果は、以下の実施例の説明によって明らかにされる。
【図面の簡単な説明】
【0011】
【
図1】第一の実施例の電子制御装置のハードウェア構成を示す図である。
【
図2】第一の実施例の電子制御装置のソフトウェア構成を示す図である。
【
図3】第一の実施例のミドルウェアの構成を示す図である。
【
図4】第一の実施例のタイムスロット割り付け情報を示す図である。
【
図5】第一の実施例のタイムスロット割り付け情報保存部に保存される情報の更新を示す図である。
【
図6】第一の実施例のデータフロー要求情報を示す図である。
【
図7】第一の実施例のデータフロー要求情報保存部に保存される情報の更新を示す図である。
【
図8】第一の実施例の通信API提供部の機能概要を示す図である。
【
図9】第一の実施例のタイムスロット要求情報を示す図である。
【
図10】第一の実施例のタイムスロット割り付け部によるタイムスロットの探索方法を示すフローチャートである。
【
図11】第二の実施例の新規タスク(第四のタスク)のタイムスロット要求情報を示す図である。
【
図12】第二の実施例のタイムスロット割り付け情報とデータフロー要求情報の更新を示す図である。
【
図13】第三の実施例の車両制御システムのハードウェア構成を示す図である。
【
図14】第三の実施例の第一の電子制御装置及び第二の電子制御装置のソフトウェア構成を示す図である。
【
図15】第三の実施例の第一の電子制御装置及び第二の電子制御装置のミドルウェアの構成を示す図である。
【
図16】第三の実施例のタイムスロット割り付け情報(新規タスク追加前)を示す図である。
【
図17】第三の実施例のデータフロー要求情報(新規タスク追加前)を示す図である。
【
図18A】第三の実施例の新規タスク(第四のタスク)に関するデータフロー要求情報を示す図である。
【
図18B】第三の実施例の新規タスク(第四のタスク)に関するタイムスロット要求情報を示す図である。
【
図19】第三の実施例のタイムスロット割り付け部によるタイムスロットの探索処理のフローチャートである。
【
図20】第三の実施例のタイムスロット割り付け情報(新規タスク追加後)を示す図である。
【
図21】第五の実施例のタイムスロット割り付け情報とデータフロー要求情報の更新を示す図である。
【
図22】第六の実施例のタイムスロット割り付け情報とデータフロー要求情報の更新を示す図である。
【
図23】第八の実施例の車両制御システムのハードウェア構成を示す図である。
【
図24】第八の実施例の車両制御システムのソフトウェア構成を示す図である。
【
図25】第九の実施例の車両制御システムのソフトウェア構成を示す図である。
【発明を実施するための形態】
【0012】
本発明は、電子制御装置(ECU)及び車両制御システムに関するものである。
【0013】
以下、本発明に好適な実施例を説明する。本発明の実施例においては、簡単のため、電子制御装置は一つのCPUを持ちリアルタイムOperating System(OS)を搭載する例を説明するが、タイムスロット割り付け情報を搭載コア数やスレッド数に基づいて多重化することによって、マルチコアCPUを搭載したECUや非リアルタイムOSであるPOSIXなどにも容易に適用可能である。
【実施例0014】
<構成>
図1は、第一の実施例の電子制御装置0のハードウェア構成を示す図であり、
図2は、本実施例の電子制御装置0のソフトウェア構成を示す図である。
【0015】
<電子制御装置0>
図1を参照して、本実施例にかかる電子制御装置0のハードウェア構成について説明する。電子制御装置0は、CPU1と、メモリ2と、タイマ3を含む。メモリ2は、タスクのコードやパラメータなどの情報を保存する。メモリ2に保存されたデータは、CPU1に転送されて演算処理が行われ、演算処理結果がメモリ2に格納される。タイマ3は、電子制御装置0の内部で時刻を取得するために使用される。本実施例では、タイマ3は10ミリ秒が経過するごとにCPU1に時刻を通知する機能を有する。
【0016】
図2を参照して、本実施例にかかる電子制御装置0のソフトウェア構成について説明する。ソフトウェアは電子制御装置0のメモリ2に保存され、CPU1で実行される。電子制御装置0は、Operating System(OS)100と、ミドルウェア101と、アプリケーションとして第一のタスク102と第二のタスク103と第三のタスク104を搭載する。OS100は、一般的なリアルタイムOSやPOSIXなどのOSであればよい。ミドルウェア101は、OS100から起動され、アプリケーションである第一のタスク102と第二のタスク103と第三のタスク104を起動する。すなわち、アプリケーションはOS100から直接起動されるのではなく、ミドルウェア101によって起動される構成を採用する。また、アプリケーション間のデータ通信はミドルウェア101を経由して行う。すなわち、アプリケーション自身で共有メモリを配置することは禁止されており、アプリケーション間のデータ通信は全てミドルウェア101が提供するAPI(Application Programming Interface)を用いて行う構成とする。
【0017】
<ミドルウェア101>
図3は、本実施例のミドルウェア101の構成を示す図である。
【0018】
本実施例では、ミドルウェア101は、通信API提供部1011と、タイムスロット割り付け部1012と、をタスク起動部1013と、タイムスロット割り付け情報保存部1015と、データフロー要求情報保存部1016を有する。各部の機能及び動作は後述する。
【0019】
<タイムスロット割り付け情報4、タスク起動部1013>
図4は、本実施例のタイムスロット割り付け情報4を示す図である。
【0020】
タイムスロット割り付け情報4は、タスクとタイムスロットの割り付けを記述する。
図4では、表形式で記述されるタイムスロット割り付け情報4を示すが、タイムスロット割り付け情報4が他の形式で示されてもよい。
図4を参照して、タイムスロット割り付け情報4を用いたタスク起動部1013によるタスク起動について説明する。タイマ3は、OS100を経由してタスク起動部1013に時刻を通知する。タスク起動部1013は、タイマ3から1回目の時刻が通知されると、タイムスロット割り付け情報4における1番のタイムスロットを検索し、割り付けされた第一のタスク102を起動する。10ミリ秒後、タスク起動部1013はタイマ3から2回目の時刻が通知されると、タイムスロット割り付け情報4における2番のタイムスロットを検索し、割り付けされた第二のタスク103を起動する。さらに10ミリ秒後、タスク起動部1013はタイマ3から3回目の時刻が通知されると、タイムスロット情報4における3番目のタイムスロットを検索する。今回は、第二のタスク103が割り付けられているがタスク2は2番のタイムスロットにて起動済みであり3番にも継続して割り付けられているので、タスク起動部1013は第二のタスク103の処理を継続する。もし、第二のタスク103の処理が2番のタイムスロットにて完了している場合、3番のタイムスロットにおいてタスク起動部1013はいずれのタスクも起動しない(すなわち、新たに第二のタスク103を起動しない)。さらに10ミリ秒後、タスク起動部1013はタイマ3から4回目の時刻が通知されると、タイムスロット割り付け情報4における4番のタイムスロットを検索する。今回はどのタスクも割り付けられていないので、タスク起動部1013はいずれのタスクも起動しない。このようにして、タスク起動部1013は各タイムスロットでどのタスクを起動するかを選択する。
図4において、八つのタイムスロットが示されているが、これはタスクの起動が周期8で繰り返されることを示す。すなわち、ミドルウェア101がタイマ3から9回目の時刻が通知されると、タスク起動部1013は1回目の時刻通知の時と同様に、1番のタイムスロットを検索する。以下、このようなタイムスロット割り付け情報4の周期をハイパーピリオドと呼称する。なお、
図4ではハイパーピリオドを8として例示したが、任意の非負整数であればよい。
【0021】
<タイムスロット割り付け情報保存部1015>
図5は、本実施例のタイムスロット割り付け情報保存部1015に保存されるタイムスロット割り付け情報4の更新を示す図である。
【0022】
タイムスロット割り付け情報保存部1015はタイムスロット割り付け部1012からタイムスロット割り付け情報4の更新が指示されると、入力された新規タスクの番号(ID:Identifier)と割り付け位置と周期の情報(データフロー要求情報5、タイムスロット要求情報6)とに従って、新規タスクをタイムスロット割り付け情報4に追加して、タイムスロット割り付け情報保存部1015に保存されるタイムスロット割り付け情報4を更新する。
【0023】
<データフロー要求情報5>
図6は、本実施例のデータフロー要求情報5を示す図である。
【0024】
データフロー要求情報5は、電子制御装置0の外部からミドルウェア101に送信される情報である。
図5に示すように、電子制御装置0に追加される第四のタスク105は、第一のタスク102と第三のタスク104の処理結果を使用することが、データフロー要求情報5に定められる。本実施例においては、タスクは全て周期的に実行されるタスクであるため、第一のタスク102及び第三のタスク104がどの時点で生成した処理結果を第四のタスク105が使用するのかを考慮する必要がある。このため、データフロー要求情報5には時差の情報を含む。時差とは、新規タスク(第四のタスク105)が起動されるタイムスロットから起算して各入力データ生成タスク(第一のタスク102及び第三のタスク104)が何周期前に生成したデータを新規タスク(第四のタスク105)の入力データとして使用するかを示す情報である。
【0025】
<データフロー要求情報保存部1016>
図7は、データフロー要求情報保存部1016に保存されるデータフロー要求情報5の更新を示す図である。
【0026】
データフロー要求情報保存部1016は、タイムスロット割り付け部1012から新規タスクの保存を指示されると、入力された新規タスクである第四のタスク105に関するデータフロー要求情報5に従って、第四のタスク105に関するデータフロー要求情報5を新規に追加して、データフロー要求情報保存部1016を更新する。
【0027】
<通信API提供部1011>
図8は、通信API提供部1011の機能概要を示す図である。
【0028】
通信API提供部1011は、タスク間で共有されるデータを管理し、タスクからの呼び出しに従ってデータを提供する役割を有する。このとき、通信API提供部1011は、データフロー要求情報5を参照し、適切な時刻に生成されたデータを提供する。第一のタスク102は他のタスク(第二のタスク103と第三のタスク104)に処理結果を提供するため、通信API提供部1011が提供するAPIであるWrite_dataをコールする。第一のタスク102が生成した通信データは、第二のタスク103においては0周期遅れて使用され、第三のタスク104においては1周期遅れて使用されることが、データフロー要求情報保存部1016に保存されたデータフロー要求情報5によって分かる。従って、通信API提供部1011は、第一のタスク生成データ保存部を設け、第一のタスク102が直近に生成したデータとその1周期前に生成したデータを保存する。例えば、
図8において、バッファ0に最新値を保存し、バッファ1に1周期前の値を保存する。すなわち、第一のタスク102がWrite_dataをコールすると通信API提供部1011は第一のタスク生成データ保存部のバッファ0に保存されたデータをバッファ1にコピーした後、バッファ0にデータを書き込む。第二のタスク103は、第一のタスク102が生成したデータを使用するためにRead_dataをコールする。この時、通信API提供部1011は、第二のタスク103が第一のタスク102の生成データを0周期の時差で使用することが、データフロー要求情報5を参照して分かるため、第一のタスク生成データ保存部のバッファ0に格納されたデータをコピーして第二のタスク103に渡す。同様に、第三のタスク104は、第一のタスク102が生成したデータを使用するためにRead_dataをコールする。このとき、通信API提供部1011は、第二のタスク103が第一のタスク102の生成データを1周期の時差で使用することが、データフロー要求情報5を参照し分かるため、第一のタスク生成データ保存部のバッファ1に保存されたデータをコピーして第三のタスク104に渡す。このことから分かるように、各タスクの生成データ保存部に設けられるバッファの数は、データフロー要求情報5に含まれる時差の最大値によって定められる。タスク間のデータ通信を全て通信API提供部1011を経由して実行することによって、データフロー要求情報5を充足するように各タスクがデータを取得及び公開できる。
【0029】
<タイムスロット要求情報6>
図9は、本実施例のタイムスロット要求情報6を示す図である。
【0030】
タイムスロット要求情報6は、電子制御装置0の外部からミドルウェア101に送信される情報である。タイムスロット要求情報6は、タスクの周期と、タスクの処理1回のためにいくつのタイムスロットの割り付けをミドルウェア101に要求するかを示す。
図5に示すタイムスロット要求情報6では、第四のタスク105は8タイムスロット分(すなわち80ミリ秒)の周期で実行され、二つのタイムスロットを要求する。これは、第四のタスク105の1回の処理に対してCPU1の20ミリ秒の処理時間を要求することである。なお、タスクの周期を全てハイパーピリオドとした場合は、タイムスロット要求情報6において周期の情報が省略されてもよい。
【0031】
<タイムスロット割り付け部1012>
図10は、本実施例のタイムスロット割り付け部1012によるタイムスロットの探索方法を示すフローチャートである。
【0032】
本実施例においては、第一のタスク102と第二のタスク103と第三のタスク104が搭載された電子制御装置0に第四のタスク105を新規に追加する。
【0033】
ステップS1において、新規に追加するタスクに番号(ID)を付与する。ステップS2において、タイムスロット割り付け情報4を取得する。すなわち、
図4に示すタイムスロット割り付け情報4に従って、タイムスロット割り付け情報4を格納するための配列ts_info(要素数はハイパーピリオドと一致するため8)に対し、順に{1,2,2,-1,1,3,-1,-1}を代入する。なお、-1は、どのタスクも割り付けられていない空きタイムスロットであることを示す。続いて、ステップS3において、データフロー要求情報5を配列data_dlowに格納する。
図6に示すデータフロー要求情報5に従って、順に{1,-1,0}をdata_flowに代入する。1番目の要素は第一のタスク102の時差が1周期であることを示し、3番目の要素は第三のタスク104の時差が0周期であることを示す。また、2番目の要素に-1を代入することにより、第二のタスク103は入力データ生成タスクではないことを示す。ステップS4において、タイムスロット要求情報6に含まれる要求スロット数と周期をそれぞれ変数ts_numとperiodに格納する。ステップS5において、探索結果保存用変数を初期化する。変数placeが新規タスク(第四のタスク105)を起動するタイムスロット番号を示し、変数latencyは、新規タスク(第四のタスク105)に対する入力データが生成完了してから新規タスク(第四のタスク105)が処理完了するまでの時間すなわち新規タスク(第四のタスク105)によるレイテンシを格納するためのものである。
【0034】
ステップS6において、繰り返し変数iにタイムスロット番号を1から8まで順に代入し、ステップS7~S10の処理を繰り返し実行する。ステップS6の処理はFor文で実装されていればよい。ステップS7において、配列ts_infoを参照して、i番目のタイムスロットから連続してts_numスロット分の空きタイムスロットが存在するかを判定する。同様に、i+period番目のタイムスロットから連続してts_numスロット分の空きタイムスロットが存在するか、i+2*period番目、i+3*period番目、…、i+(n-1)*period番目のタイムスロットについても同様に判定する。ここでnは、ハイパーピリオドを周期で除した数である。判定の結果、空きタイムスロットが存在する場合、ステップS8に進む。一方、空きタイムスロットが存在しない場合、i番目のタイムスロットに新規タスク(第四のタスク105)を追加できないので、ステップS6に戻り、変数iをインクリメントして再度ステップS7に進む。ステップS8において、i番目のタイムスロットに新規タスク(第四のタスク105)を追加した場合における新規タスク(第四のタスク105)のレイテンシを計算し、一時変数tmpに格納する。レイテンシは、データフロー要求情報5が格納された配列data_flowを参照して、新規タスク(第四のタスク105)に割り付けられたタイムスロットが終了する時刻から起算して新規タスク(第四のタスク105)の入力データを生成するタスクに割り付けたタイムスロットが終了する時刻までの時間である。入力データ生成タスクが複数存在する場合、レイテンシはi番目のタイムスロットから最も遠い入力データ生成タスクの終了時刻で計算するとよい。例えば、
図4に示すタイムスロット割り付け情報4において、i=7番のタイムスロットの場合、入力データ生成タスクである第一のタスク102が終了する時刻は、data_flow[0]=1であるから、第一のタスク102が実行される5番のタイムスロットではなく1番のタイムスロットを参照し、第一のタスク102の終了から新規タスク(第四のタスク105)が終了するタイムスロットである8番までとなりレイテンシは7と計算される。第三のタスク104については、data_flow[2]=0であるから、第三のタスク104が実行される6番のタイムスロットから起算して新規タスク(第四のタスク105)が終了する8番までとなりレイテンシは2と計算される。従って、レイテンシの最大値は7であるので、tmp=7と計算される。ステップS9において、tmpの値がlatencyの値より小さいか確認する。tmpの値がlatencyの値より小さければステップS10に進み、placeとlatencyをiとtmpの値で更新する。tmpの値がlatencyの値より小さくなければ、i番のタイムスロットよりもレイテンシを短くできるタイムスロット位置が存在するので、ステップS6に戻り、変数iをインクリメントして、再度ステップS7に進む。
【0035】
ステップS6~S10の繰り返し処理が終了すると、ステップS11において、新規タスク(第四のタスク105)のデータフロー要求情報5をデータフロー要求情報保存部1016に保存するよう指示する。そして、ステップS12において、ステップS1~S10において決定したタスク番号(ID)TASK_NUMと追加タイムスロット位置placeとタイムスロット要求情報6に含まれる周期periodの情報をタイムスロット割り付け情報保存部1015に渡し、タイムスロット割り付け情報4の更新を指示する。
【0036】
本実施例によれば、電子制御装置0に新規にタスクを追加しても、既存のタスクの実行のために既に割り付け済みのタイムスロットには影響しないため、新規タスクの追加後も、タスク間のデータフローも維持され、タスクのリアルタイム性が維持される。従って、タスク間のデータ通信や電子制御装置外部との通信に対して影響を与えないことが保証され、ボトルネックとなっていたタイミング設計・検証を不要化し、車両制御ソフトの継続的な改善を実現することができる。また、通信API提供部1011及びタスク起動部1013によってタスク間のデータ交換を所定のタイミングに限定するスケジューリング手法であるLogical Execution Timeを適用可能として、各タスクの処理時間の変動を吸収したうえで、データフロー要求情報5に定めたデータフローを達成できる。さらに、既存のタスクに影響を与えないことを保証した上で、レイテンシが最も短くなるように新規にタスクを追加できる。
本発明の第二の実施例の電子制御装置について説明する。第二の実施例と第一の実施例が異なる点は、既存のタスクのタイムスロット割り付けの変更によって連続空きタイムスロットを増加させる点である。なお、第二の実施例において、第一の実施例との差異を主に説明し、第一の実施例と同じ構成には同じ符号を付して、それらの説明を省略する。
本実施例によれば、電子制御装置0で既に実行されているタスクにより十分な空き時間を確保できない状況において、新たなタスクを追加する場合、既存のタスクのデータフローを保持したまま空き時間を増加でき、新たなタスクを追加できる。