(57)【要約】【課題】タスクがデッドラインを超過するか否かをできる限り早い段階で予測し、システム全体がシャットダウンすることを早めに回避することができる、車両制御装置を提供する。【解決手段】本発明に係る車両制御装置は、タスクを構成するサブタスクの遅延度を求め、遅延度が閾値以上であれば当該タスクに代えてフェールセーフタスクを実行し、遅延度が閾値未満であれば当該タスクを継続する。【選択図】図１２
2016066139.tif 000002
【特許請求の範囲】
【請求項１】
車両の動作を制御するタスクを実行する車両制御装置であって、
前記タスクを実行するプロセッサ、
前記タスクを構成するサブタスク毎に進捗を管理する進捗管理部、
前記サブタスク毎に遅延度を監視する遅延監視部、
前記遅延監視部による監視結果に基づき前記タスクが制限時刻以内に完了するか否かを判定し、その判定結果に基づき、前記プロセッサが前記タスクを実行継続するかそれとも前記タスクに代えてフェールセーフタスクを実行するかを判定する、判定部、
を備え、
前記遅延監視部は、前記サブタスクが完了すると期待される期待完了時刻と前記プロセッサが前記サブタスクを実際に完了した実完了時刻とにしたがって前記遅延度を算出し、
前記判定部は、前記遅延度と閾値を比較し、前記遅延度が前記閾値以上である場合は前記プロセッサに前記タスクに代えて前記フェールセーフセーフタスクを実行させ、前記遅延度が前記閾値未満である場合は前記プロセッサに前記タスクを実行継続させる
ことを特徴とする車両制御装置。
【請求項２】
前記閾値は、前記プロセッサが前記タスクを実行継続した場合において、前記サブタスクを実行するため必要であると期待される期待実行時間を各前記サブタスクについて合計した時間が前記タスクの制限時刻を超過しないように設定されている
ことを特徴とする請求項１記載の車両制御装置。
【請求項３】
前記プロセッサは、処理を完了するまでに必要な所要時間が異なる複数の前記フェールセーフタスクを実行し、
前記車両制御装置は、前記遅延度に応じて前記プロセッサが実行すべき前記フェールセーフタスクを切り替えるフェールセーフ切替部を備え、
前記フェールセーフ切替部は、前記遅延度が大きいほど、所要時間がより短い前記フェールセーフタスクを前記プロセッサに実行させる
ことを特徴とする請求項１記載の車両制御装置。
【請求項４】
前記フェールセーフ切替部は、前記フェールセーフタスクの優先度を前記タスクの優先度よりも高く設定した上で、前記プロセッサに前記フェールセーフタスクを実行させる
ことを特徴とする請求項３記載の車両制御装置。
【請求項５】
前記フェールセーフ切替部は、前記複数のフェールセーフタスクのうち、前記フェールセーフタスクよりも優先度が高い他のタスクを完了するまでに必要な所要時間を前記フェールセーフタスクの所要時間に加えても前記タスクの制限時刻以内に完了することができるもののなかからいずれかを、前記プロセッサに実行させる
ことを特徴とする請求項４記載の車両制御装置。
【請求項６】
前記車両制御装置は、前記タスクが前記制限時刻以内に完了しなかったことを検出するデッドライン違反検出部を備え、
前記デッドライン違反検出部は、前記タスクが前記制限時刻以内に完了しなかった場合は、前記プロセッサに前記フェールセーフタスクを実行させる
ことを特徴とする請求項１記載の車両制御装置。
【請求項７】
前記プロセッサは、処理を完了するまでに必要な所要時間が異なる複数の前記フェールセーフタスクを実行し、
前記デッドライン違反検出部は、前記タスクが前記制限時刻以内に完了しなかった場合は、前記複数のフェールセーフタスクのうち所要時間が最も短いものを前記プロセッサに実行させる
ことを特徴とする請求項６記載の車両制御装置。
【請求項８】
前記サブタスクは、前記タスクを実装したプログラムが記述している内部関数である
ことを特徴とする請求項１記載の車両制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両制御装置に関するものである。
【背景技術】
【０００２】
近年の多くの車両制御システムは、電子化された車両制御機器を操作するＥＣＵ（電子制御装置：Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）と、ＥＣＵ間の通信を可能にする車載ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）とを備えている。
【０００３】
車両制御システムは、環境負荷の低減や安全要求にともない、システムの高機能化、機能の分散化、複雑化が進んでいる。その結果、ＥＣＵのソフトウェアアーキテクチャの標準化、安全装置の電子制御化、その安全性確保のための仕組みの重要性が増大している。
【０００４】
例えば、カーメーカは分散させた機能毎に専用のＥＣＵを用意するので、１つの車両制御システム内には複数のＥＣＵが混在している。標準化された車両制御装置のソフトウェアアーキテクチャを導入することにより、仕様の異なるＥＣＵを組み合わせて車両制御システムを構築することが容易になる。
【０００５】
下記非特許文献１記載のＡＵＴＯＳＡＲアーキテクチャにおいては、マイコンに依存する機能、センサやアクチュエータの制御アルゴリズム、設定パラメータなどの単位でソフトウェアがモジュール化されている。そのためマイコン機種が変更されても、対応するモジュールを修正するだけで、他のモジュールを修正することなく機種変更に対応することができる。
【０００６】
車両制御機器における安全装置の電子制御化にともない、機能安全の仕組みが車両制御システムに導入されてきている。機能安全とは、電気・電子システムに不具合が生じたときにシステムが安全側に遷移することにより安全を確保する考えである。例えば下記非特許文献２記載の自動車向け機能安全規格ＩＳＯ２６２６２においては、独自の安全度水準であるＡＳＩＬ（Ａｕｔｏｍｏｔｉｖｅ  Ｓａｆｅｔｙ  Ｉｎｔｅｇｒｉｔｙ  Ｌｅｖｅｌ）が設けられている。最上位レベルＡＳＩＬ  Ｄに準拠するためには、車両制御装置の安全に関わる機能が、主機能、安全装置、監視装置の３つに明確に分離していることを客観的に証明できることが求められている。
【０００７】
一般的な車両制御システムは、さまざまな制御アプリケーションによって構成されている。ＩＳＯ２６２６２においては、安全要求が異なるソフトウェア間の干渉を防止することが求められている。例えば、安全度水準の低いソフトウェアが暴走し、安全度水準の高いソフトウェアが格納されているメモリへアクセスし、データを破壊することを防ぐ必要がある。車両制御システム内にはさまざまなＡＳＩＬのソフトウェアが混在するので、既存の車両制御ソフトウェアがＩＳＯ２６２６２に準拠するためには、ソフトウェア間の干渉を防止する仕組みが必要となる。
【０００８】
下記特許文献１は、車両制御装置のプログラム動作を監視する技術について記載している。同文献においては、動作クロックをコントロールレジスタなどに設定されている分周比で分周して時間の経過をカウントアップし、計測した時間が予め定められたリセット時間に達するとフェールセーフ処理を実施する（特許文献１、００２８参照）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１３−１５２５６３号公報
【非特許文献】
【００１０】
【非特許文献１】ＡＵＴＯＳＡＲ＿ＥＸＰ＿ＬａｙｅｒｅｄＳｏｆｔｗａｒｅＡｒｃｈｉｔｅｃｔｕｒｅ，http://www.autosar.org/index.php?p=3&up=1&uup=2&uuup=0（２０１４年６月５日取得）
【非特許文献２】ＩＳＯ２６２６２
【発明の概要】
【発明が解決しようとする課題】
【００１１】
異なる安全度水準のソフトウェアが混在した車両制御ソフトウェアにおいては、低い安全度水準の御ソフトウェアからの影響を防ぐため時間保護が必要となる。時間保護は、処理時間が規定のデッドラインを超過（デッドラインオーバー）することを検出し、異常がシステム全体に伝搬しないようにするための処理である。時間保護は、ＯＳ（オペレーテイングシステム）の処理単位であるタスクや割込処理に対して適用される。
【００１２】
特許文献１記載のような従来の車両制御装置においては、タスクがデッドラインをオーバーすると、フェールセーフ処理としてＯＳまたはシステム全体をシャットダウン、再起動、またはソフトウェアリセットする。したがってタスクは実行途中で中断することになり、本来意図していた処理は未完了のままになってしまう。
【００１３】
本発明は、上記のような課題を解決するためになされたものであり、タスクがデッドラインを超過するか否かをできる限り早い段階で予測し、システム全体がシャットダウンすることを早めに回避することができる、車両制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明に係る車両制御装置は、タスクを構成するサブタスクの遅延度を求め、遅延度が閾値以上であれば当該タスクに代えてフェールセーフタスクを実行し、遅延度が閾値未満であれば当該タスクを継続する。
【発明の効果】
【００１５】
本発明に係る車両制御装置によれば、サブタスクの遅延度を監視することにより、タスクがデッドラインを超過する可能性を早めに検出することができる。したがって、タスクがデッドラインを超過してシステム全体がシャットダウンする前に、より制約の少ないフェールセーフタスクを実行し、動作継続性を高めることができる。
【図面の簡単な説明】
【００１６】
【図１】実施形態１に係る車両制御装置１の構成図である。
【図２】タスク管理テーブル１２２１の構成例を示す図である。
【図３】関数管理テーブル１２２２の構成例を示す図である。
【図４】進捗管理テーブル１２２３の例を示す図である。
【図５】遅延管理テーブル１２２４の構成例を示す図である。
【図６】デッドライン違反管理テーブル１２２５の構成例を示す図である。
【図７】ＦＳタスク管理テーブル１２２６の構成例を示す図である。
【図８】ソフトウェア制御部１２１１の動作フローである。
【図９】タスク実行部１２１２の動作フローである。
【図１０】進捗管理部１２１３の動作フローである。
【図１１】遅延監視部１２１４の動作フローである。
【図１２】判定部１２１５の動作フローである。
【図１３】ＦＳ切替部１２１６の動作フローである。
【図１４】デッドライン違反検出部１２１７の動作フローである。
【発明を実施するための形態】
【００１７】
＜実施の形態１＞
図１は、本発明の実施形態１に係る車両制御装置１の構成図である。車両制御装置１は車両の動作を制御するタスクを実行するＥＣＵであり、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１、メモリ１２、入出力回路１３を備える。本実施形態１において、車両制御装置１はスロットルセンサ２１から測定結果を受け取り、制御演算を実施してアクチュエータ２２を制御する。
【００１８】
ＣＰＵ１１は、メモリ１２のプログラム領域１２１が格納しているプログラムを実行するプロセッサである。以下では記載の便宜上、各プログラムを動作主体として説明する場合があるが、実際にこれらプログラムを実行するのはＣＰＵ１１であることを付言しておく。
【００１９】
メモリ１２は、プログラム領域１２１とテーブル領域１２２を有する。プログラム領域１２１は、ソフトウェア制御部１２１１、タスク実行部１２１２、進捗管理部１２１３、遅延監視部１２１４、判定部１２１５、ＦＳ（フェールセーフ）切替部１２１６、デッドライン違反検出部１２１７を格納する。テーブル領域１２２は、後述の図２で説明するタスク管理テーブル１２２１、図３で説明する関数管理テーブル１２２２、図４で説明する進捗管理テーブル１２２３、図５で説明する遅延管理テーブル１２２４、図６で説明するデッドライン違反管理テーブル１２２５、図７で説明するＦＳタスク管理テーブル１２２６を格納する。
【００２０】
タスク管理テーブル１２２１、関数管理テーブル１２２２、ＦＳタスク管理テーブル１２２６は固定的なデータを保持するので、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの不揮発性メモリに格納することができる。進捗管理テーブル１２２３、遅延管理テーブル１２２４、デッドライン違反管理テーブル１２２５が格納する値は変化するので、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの書換可能メモリに格納することができる。
【００２１】
図１においては省略しているが、プログラム領域１２１は制御タスクを実装した１以上のプログラムを格納している。ＣＰＵ１１は、以下に説明する各機能部を利用して、各タスクを実行しその進捗を管理する。
【００２２】
図２は、タスク管理テーブル１２２１の構成例を示す図である。タスク管理テーブル１２２１は、ＯＳが処理するタスク（フェールセーフタスクを除く）の属性を管理するテーブルであり、Ｉｎｄｅｘフィールド１２２１１、タスク名フィールド１２２１２、安全度水準フィールド１２２１３、優先度フィールド１２２１４、デッドラインフィールド１２２１５を有する。
【００２３】
Ｉｎｄｅｘフィールド１２２１１は、ＯＳが管理するタスクの実行順番を保持する。タスク名フィールド１２２１２は、タスクを特定するための名称を保持する。安全度水準フィールド１２２１３は、タスクに割り付けられたソフトウェアの安全度水準を示す値を保持する。ここでは安全度水準としてＡＳＩＬとＱＭを例示した。優先度フィールド１２２１４は、タスクの優先度を示す値を保持する。ここでは安全度１６が最も高く安全度１が最も低いものとした。優先度は、割込タスクが発生したとき各タスクを一時中断して割込タスクを実施するか否かを判断する基準となる。デッドラインフィールド１２２１５は、タスクを完了させる必要がある最遅時刻を保持する。図２のデータ例によれば、ＯＳがタスク１を開始するようＣＰＵ１１に対して指示した時点を開始時刻として６時刻単位（例えば６ｍｓ）以内に、ＣＰＵ１１はタスク１を完了させなければならない。デッドラインを超過した場合の処理については後述する。
【００２４】
図３は、関数管理テーブル１２２２の構成例を示す図である。関数管理テーブル１２２２は、タスクを構成するサブタスク（本実施形態においてはタスクを実装するプログラムの内部関数）の属性を管理するテーブルであり、Ｉｎｄｅｘフィールド１２２２１、タスク名フィールド１２２２２、関数名フィールド１２２２３、期待実行時間フィールド１２２２４を有する。
【００２５】
Ｉｎｄｅｘフィールド１２２２１は、関数の実行順番を保持する。タスク名フィールド１２２２２は、タスクの名称を保持する。関数名フィールド１２２２３は、関数の名称を保持する。期待実行時間フィールド１２２２４は、関数を実行するために必要であると期待される時間を保持する。図３のデータ例によれば、関数１−１はＯＳがＣＰＵ１１に対して関数１−１を実行開始するよう指示してからＣＰＵ１１が関数１−１を完了するまで１時刻単位（例えば１ｍｓ）必要であることが期待されている。
【００２６】
図４は、進捗管理テーブル１２２３の例を示す図である。進捗管理テーブル１２２３は、タスクの進捗を管理するテーブルであり、タスク名フィールド１２２３１、関数名フィールド１２２３２、実実行時間フィールド１２２３３を有する。
【００２７】
タスク名フィールド１２２３１は、タスクの名称を保持する。関数名フィールド１２２３２は、関数の名称を保持する。実実行時間フィールド１２２３３は、ＣＰＵ１１が関数を完了するために実際に要した時間を保持する。実実行時間フィールド１２２３３は、ＯＳが関数を開始するようＣＰＵ１１に対して指示してからＣＰＵ１１がその関数を完了するまでに要した時間を示す。例えばＯＳが関数を実行開始するようＣＰＵ１１に対して指示してからＣＰＵ１１がその関数を完了するまでの間に割込タスクが発生した場合、実実行時間フィールド１２２３３の値はＣＰＵ１１がその割込タスクを実行するために要した時間だけ加算される。
【００２８】
図５は、遅延管理テーブル１２２４の構成例を示す図である。遅延管理テーブル１２２４は、タスクを構成する関数毎の遅延度を管理するテーブルであり、タスク名フィールド１２２４１、関数名フィールド１２２４２、遅延度フィールド１２２４３を有する。
【００２９】
タスク名フィールド１２２４１は、タスクの名称を保持する。関数名フィールド１２２４２は、関数の名称を保持する。遅延度フィールド１２２４３は、関数の遅延度を保持する。関数の遅延度とは、当該関数が属するタスクのデッドラインを基準として、当該関数が完了した時刻がどの程度遅延しているかを示す指標である。本実施形態１に係る車両制御装置１は、関数の遅延度を参照することにより、当該関数が属するタスクがデッドラインを超過する可能性がどの程度あるかを判定する。関数の遅延度を算出する手順については後述する。
【００３０】
図６は、デッドライン違反管理テーブル１２２５の構成例を示す図である。デッドライン違反管理テーブル１２２５は、デッドラインを超過したタスクを管理するテーブルであり、タスク名フィールド１２２５１、完了時刻フィールド１２２５２を有する。タスク名フィールド１２２５１は、タスクの名称を保持する。完了時刻フィールド１２２５２は、タスクが完了した時刻を保持する。
【００３１】
図７は、ＦＳタスク管理テーブル１２２６の構成例を示す図である。ＦＳタスク管理テーブル１２２６は、フェールセーフタスクの属性を管理するテーブルであり、タスク名フィールド１２２６１、安全度水準フィールド１２２６２、期待実行時間フィールド１２２６３、優先度フィールド１２２６４、デッドラインフィールド１２２６５を有する。
【００３２】
タスク名フィールド１２２６１は、フェールセーフタスクの名称を保持する。安全度水準フィールド１２２６２と優先度フィールド１２２６４はそれぞれフェールセーフタスクに割り当てられた安全度水準と優先度を保持し、一般的に高い値がセットされている。期待実行時間フィールド１２２６３は、フェールセーフタスクを実行するために必要であると期待される時間を保持する。フェールセーフタスクは一般に信頼度が高く遅延することは少ないと期待されているので、その期待実行時間を管理することとした。デッドラインフィールド１２２６５は、フェールセーフタスクを完了させる必要がある最遅時刻を保持する。
【００３３】
図８は、ソフトウェア制御部１２１１の動作フローである。以下、図８の各ステップについて説明する。
【００３４】
（図８：ステップＳ１２１１０１〜Ｓ１２１１０２）
車両制御装置１のＯＳがタスクを開始するようＣＰＵ１１に対して指示すると、ＣＰＵ１１は本フローチャートを開始する。ソフトウェア制御部１２１１は、変数ｉに０を代入して初期化する（Ｓ１２１１０１）。変数ｉはタスクの番号を示す。タスクの番号はタスク管理テーブル１２２１のＩｎｄｅｘフィールド１２２１１から取得できる。ソフトウェア制御部１２１１は、変数ｉに１を加える（Ｓ１２１１０２）。
【００３５】
（図８：ステップＳ１２１１０３）
ソフトウェア制御部１２１１は、変数ｉがタスク総数を超えているか否かを判定する。タスク総数は、タスク管理テーブル１２２１の最終行のＩｎｄｅｘフィールド１２２１１から取得することができる。変数ｉがタスク総数を超えている場合は本フローチャートを終了し、超えていない場合はステップＳ１２１１０４に進む。
【００３６】
（図８：ステップＳ１２１１０４〜Ｓ１２１１０５）
ソフトウェア制御部１２１１は、タスク実行部１２１２を起動する（Ｓ１２１１０４）。ソフトウェア制御部１２１１は、デッドライン違反検出部１２１７を起動する（Ｓ１２１１０５）。これら各機能部の動作については図９〜図１０で説明する。
【００３７】
図９は、タスク実行部１２１２の動作フローである。以下、図９の各ステップについて説明する。
【００３８】
（図９：ステップＳ１２１２０１〜Ｓ１２１２０２）
タスク実行部１２１２は、変数ｊに０を代入して初期化する（Ｓ１２１２０１）。変数ｊはタスクｉに属する関数の番号を示す。関数の番号は、関数管理テーブル１２２２において同じタスクに属する関数名１２２２３を検索することにより取得できる。タスク実行部１２１２は、変数ｊに１を加える（Ｓ１２１２０２）。
【００３９】
（図９：ステップ１２１２０３〜Ｓ１２１２０５）
タスク実行部１２１２は、ＣＰＵ１１に関数ｊを実行させる。タスク実行部１２１２は、関数ｊが完了した後、進捗管理部１２１３、遅延監視部１２１４、判定部１２１５を順次起動する。これら各機能部の動作については図１０〜図１２で説明する。
【００４０】
（図９：ステップＳ１２１２０６）
タスク実行部１２１２は、変数ｊがタスクｉに属する関数の総数を超えているか否かを判定する。変数ｊがタスクｉに属する関数総数を超えている場合は本フローチャートを終了し、超えていない場合はステップＳ１２１２０２に戻って同様の処理を繰り返す。
【００４１】
図１０は、進捗管理部１２１３の動作フローである。以下、図１０の各ステップについて説明する。
【００４２】
（図１０：ステップＳ１２１３０１〜Ｓ１２１３０２）
進捗管理部１２１３は、現在時刻を取得する（Ｓ１２１３０１）。進捗管理部１２１３は、進捗管理テーブル１２２３が保持しているタスクｉの関数ｊの実実行時間フィールド１２２３３に対して、現在時刻を格納する（Ｓ１２１３０２）。
【００４３】
図１１は、遅延監視部１２１４の動作フローである。以下、図１１の各ステップについて説明する。
【００４４】
（図１１：ステップＳ１２１４０１〜Ｓ１２１４０２）
遅延監視部１２１４は、関数管理テーブル１２２２からタスクｉに属する関数ｊの期待実行時間フィールド１２２２４を取得する（Ｓ１２１４０１）。遅延監視部１２１４は、進捗管理テーブル１２２３からタスクｉに属する関数ｊの実実行時間フィールド１２２３３を取得する（Ｓ１２１４０２）。
【００４５】
（図１１：ステップＳ１２１４０３）
遅延監視部１２１４は、ステップＳ１２１４０１〜Ｓ１２１４０２で取得した期待実行時間と実実行時間から、関数ｊの遅延度を算出する。ＯＳがＣＰＵ１１に対して関数ｊを開始するよう指示してからＣＰＵ１１が関数ｊを完了するまでの間に、例えば割込タスクが発生するなどして遅延が生じた場合、遅延度はその分だけ大きくなる。
【００４６】
（図１１：ステップＳ１２１４０３：補足）
遅延度は例えば、（期待実行時間）／（実実行時間）×１００により求めることができる。関数ｊがタスクｉのデッドラインに対してどの程度遅延しているかを表すことができれば、その他手法により遅延度を計算してもよい。例えば、タスクｉに属する全ての関数が遅延しないと仮定した場合における現在時刻の期待値と、実際の現在時刻との間の差分を、本ステップにおける遅延度とすることができる。
【００４７】
（図１１：ステップＳ１２１４０４）
遅延監視部１２１４は、遅延管理テーブル１２２４が保持しているタスクｉの関数ｊの遅延度フィールド１２２４３に対して、求めた遅延度を記録する。
【００４８】
図１２は、判定部１２１５の動作フローである。以下、図１２の各ステップについて説明する。
【００４９】
（図１２：ステップＳ１２１５０１）
判定部１２１５は、遅延管理テーブル１２２４からタスクｉに属する関数ｊの遅延度フィールド１２２４３を取得する。
【００５０】
（図１２：ステップＳ１２１５０２）
判定部１２１５は、関数ｊの遅延度と第１閾値を比較する。遅延度が第１閾値未満である場合はステップＳ１２１５０３へ進み、遅延度が第１閾値以上である場合はステップＳ１２１５０４へ進む。
【００５１】
（図１２：ステップＳ１２１５０２：補足その１）
関数ｊの遅延度が小さい場合、タスクｉ全体としてはデッドラインを超過しない可能性が十分にあるので、判定部１２１５はＣＰＵ１１にタスクｉを続行させる。一方で遅延度が大きい場合、タスクｉがデッドラインを超過する可能性が相応にあるので、判定部１２１５はＣＰＵ１１にタスクｉを続行させることに代えてフェールセーフタスクを実行させる。
【００５２】
（図１２：ステップＳ１２１５０２：補足その２）
本ステップにおいて用いる第１閾値は、タスクｉを継続してもデッドラインを超過しないことが保証される程度の値に設定することが望ましい。具体的には、タスクｉに属する残りの関数全ての期待実行時間を現在時刻に対して加算しても、タスクｉのデッドラインを超過しないようにする必要がある。本ステップにおける第１閾値は、上記基準にしたがって判定部１２１５が逐次定めてもよいし、経験的に妥当な固定値を用いてもよいし、その他適当な手法により定めてもよい。図１２に示す値は例示である。以下に説明する第２〜第３閾値も、フェールセーフタスクがタスクｉのデッドラインを超過しないように定めることが望ましい。
【００５３】
（図１２：ステップＳ１２１５０３）
判定部１２１５は、タスクｉを続行する。具体的には、図９のステップＳ１２１２０５の後にステップＳ１２１２０６へ進む。
【００５４】
（図１２：ステップＳ１２１５０４）
判定部１２１５は、タスクｉを続行することに代えてＦＳ切替部１２１６を起動する。ＦＳ切替部１２１６の動作については後述の図１３で説明する。
【００５５】
図１３は、ＦＳ切替部１２１６の動作フローである。以下、図１３の各ステップについて説明する。
【００５６】
（図１３：ステップＳ１２１６０１〜Ｓ１２１６０２）
ＦＳ切替部１２１６は、遅延管理テーブル１２２４からタスクｉに属する関数ｊの遅延度を取得する（Ｓ１２１６０１）。ＦＳ切替部１２１６は、遅延度が第２閾値以上であればステップＳ１２１６０３へ進み、遅延度が第２閾値未満であればステップＳ１２１６０４へ進む。 
【００５７】
（図１３：ステップＳ１２１６０３）
ＦＳ切替部１２１６は、遅延度が第３閾値以上であればステップＳ１２１６０６へ進み、遅延度が第３閾値未満であればステップＳ１２１６０５へ進む。
【００５８】
（図１３：ステップＳ１２１６０４〜Ｓ１２１６０６）
ＦＳ切替部１２１６は、遅延度の大きさに応じて、フェールセーフタスク１〜３のいずれかをＣＰＵ１１に実行させる。このとき、遅延度が大きいほど、期待実行時間１２２６３が小さいフェールセーフタスクを選択する。すなわち、フェールセーフタスクを実行することによりタスクｉのデッドラインを超過しないように配慮する。第２閾値と第３閾値は上記基準にしたがって定める。図１３に示す値は例示である。
【００５９】
図１４は、デッドライン違反検出部１２１７の動作フローである。以下、図１４の各ステップについて説明する。
【００６０】
（図１４：ステップＳ１２１７０１）
デッドライン違反検出部１２１７は、デッドライン違反管理テーブル１２２５のタスクｉに対応するレコードにタスクｉの完了時刻を記録する。すなわち、本ステップの時点ではタスクｉに属する全ての関数を完了しているので、最後の関数を完了した時刻をタスクｉの完了時刻として記録する。
【００６１】
（図１４：ステップＳ１２１７０２）
デッドライン違反検出部１２１７は、タスク管理テーブル１２２１が保持しているタスクｉのデッドラインフィールド１２２１５を取得する。
【００６２】
（図１４：ステップＳ１２１７０３）
デッドライン違反検出部１２１７は、タスクｉの完了時刻とデッドラインを比較する。完了時刻がデッドラインを超過していればステップＳ１２１７０４へ進み、超過していなければ本フローチャートを終了する。
【００６３】
（図１４：ステップＳ１２１７０４）
デッドライン違反検出部１２１７は、ＣＰＵ１１にいずれかのフェールセーフタスクを実行させる。本ステップの時点においてタスクｉはデッドラインを超過していることが判明しているので、本ステップで実行するフェールセーフタスクは期待実行時間フィールド１２２６３の値ができる限り小さいものが望ましい。
【００６４】
＜実施の形態１：まとめ＞
以上のように、本実施形態１に係る車両制御装置１は、タスクの進捗状況を内部関数ごとに管理し、関数の進捗遅延度に応じて、当該タスクを継続するかそれともフェールセーフタスクに移行するかを判定する。これにより、タスクがデッドラインを超過するよりも前の時点においてその可能性を予測し、適当な措置を取ることができる。例えば当該タスクよりも処理負荷が軽いフェールセーフタスクを代替的に実行し、進捗遅延を取り戻した段階で通常処理に復帰することができる。したがって、車両制御装置１がシャットダウンする可能性を抑制し、動作継続性を高めることができる。
【００６５】
また、本実施形態１に係る車両制御装置１によれば、関数の遅延度によってタスクがデッドラインを超過する可能性を検出したとき、フェールセーフタスクを代替的に実行することにより、その遅延による影響を当該タスクの範囲内に収めることができる。すなわち当該タスクの遅延による影響が車両制御装置１全体に伝搬することを抑制できる。
【００６６】
＜実施の形態２＞
実施形態１において、車両制御装置１は関数ｊの遅延度が第１閾値以上であればフェールセーフタスクを実施することを説明した。このフェールセーフタスクの例として、以下のようなものが考えられる。
【００６７】
（フェールセーフタスクの例その１）
現在実行しているタスクｉと近似する処理負荷の軽い近似タスクをあらかじめ準備しておき、タスクｉに代わるフェールセーフタスクとしてこれを実行する。
【００６８】
（フェールセーフタスクの例その２）
現在実行しているタスクｉの処理遅延を補正する処理を実装した補正タスクをあらかじめ準備しておき、タスクｉに代わるフェールセーフタスクとしてこれを実行する。
【００６９】
実施形態１のステップＳ１２１６０４〜Ｓ１２１６０６において実行するフェールセーフタスクは、タスクｉに代えて実行することにより車両制御装置１がシャットダウンする可能性を緩和することを意図したものである。これをより確実に実現するため、ＦＳ切替部１２１６はフェールセーフタスクの優先度を同カテゴリに属する他タスクの優先度よりも上げるようにしてもよい。少なくともタスクｉの優先度よりもこれに代えて実行するフェールセーフタスクの優先度を高くすることが望ましい。
【００７０】
さらにＦＳ切替部１２１６は、フェールセーフタスクを実行中により優先度の高い上位タスクが割り込む可能性を考慮してもよい。具体的には、割り込んでくる可能性のある上位タスクの期待実行時間をデッドラインまで残されている時間から差し引いたうえで、タスクｉのデッドラインまでに完了させることができるフェールセーフタスクを、ステップＳ１２１６０４〜Ｓ１２１６０６において選択する。タスクｉのデッドラインまでに完了することができるか否かは期待実行時間フィールド１２２６３の値によって判断できる。
【００７１】
＜本発明の変形例について＞
本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。上記実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【００７２】
例えば実施形態１では、車両制御装置１がＩＳＯ２６２６２に準拠したアーキテクチャを備えているが、これに限るものではない。また車両制御装置１がスロットルセンサ２１とアクチュエータ２２に接続されている例を説明したが、その他種類の車両制御装置においても本発明に係る構成を用いることができる。
【００７３】
実施形態１〜２において、サブタスクの例としてタスクを実装しているプログラムの内部関数を例示したが、個別に進捗管理するサブタスクとしてその他の処理単位を用いることもできる。例えばタスク内部に１以上のチェックポイントを設け、各チェックポイントによって分割される処理をサブタスクとみなすことができる。
【００７４】
実施形態１〜２において、車両制御装置１のＯＳがＣＰＵ１１に対してタスクや関数を実行するよう指示することを説明したが、ＣＰＵ１１自身がＯＳを実行する場合、ＣＰＵ１１はタスクや関数を実行するタイミングを自身で制御する。ＣＰＵ１１以外の演算装置がＯＳを実行する場合は、その指示に従う。
【００７５】
上記各構成、機能、処理部、処理手段等は、それらの一部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に格納することができる。
【符号の説明】
【００７６】
１：車両制御装置、１１：ＣＰＵ、１２：メモリ、１２１１：ソフトウェア制御部、１２１２：タスク実行部、１２１３：進捗管理部、１２１４：遅延監視部、１２１５：判定部、１２１６：ＦＳ切替部、１２１７：デッドライン違反検出部、１２２１：タスク管理テーブル、１２２２：関数管理テーブル、１２２３：進捗管理テーブル、１２２４：遅延管理テーブル、１２２５：デッドライン違反管理テーブル、１２２６：ＦＳタスク管理テーブル、１３：入出力回路。
【図１】
2016066139.tif 000003
【図２】
2016066139.tif 000004
【図３】
2016066139.tif 000005
【図４】
2016066139.tif 000006
【図５】
2016066139.tif 000007
【図６】
2016066139.tif 000008
【図７】
2016066139.tif 000009
【図８】
2016066139.tif 000010
【図９】
2016066139.tif 000011
【図１０】
2016066139.tif 000012
【図１１】
2016066139.tif 000013
【図１２】
2016066139.tif 000014
【図１３】
2016066139.tif 000015
【図１４】
2016066139.tif 000016