(57)【要約】【課題】処理効率の低下を来すことなく、複数の演算処理部で効率的に演算処理が実行可能な制御装置を提供する。【解決手段】複数のＣＰＵ２，３が通信バス９で接続され、被制御装置と接続される入出力部７ａが各ＣＰＵ２，３で共用可能に構成され、一方のＣＰＵ２が前記入出力部７ａをアクセスして前記被制御装置に対する入出力処理を実行し、他方のＣＰＵ３が前記入出力処理の結果に基づいて前記入出力処理以外の演算処理を実行するように制御装置１を構成する。一方のＣＰＵ２が入出力処理で得られたデータを、他方のＣＰＵ３のＲＡＭ６に書き込み、他方のＣＰＵ３が入出力処理以外の演算処理で得られたデータを、一方のＣＰＵ２のＲＡＭ５に書き込むことにより、各ＣＰＵ２，３の間でデータが授受される。【選択図】図４
2010122752.tif 000002
【特許請求の範囲】
【請求項１】
被制御部を制御する制御装置であって、
制御信号が入出力される入出力部であって、複数の制御部によりアクセス可能な入出力部と、
前記入出力部にアクセスして信号を入力する入力制御処理と、入力制御処理により得られた信号に基づいて被制御部を制御する一の制御処理と、一の制御処理に基づいて前記入出力部にアクセスして信号を出力する出力制御処理とを実行する一の制御部と、
一の制御部による入力制御処理により得られた信号に基づいて、被制御部を制御する一の制御処理以外の他の制御処理と、他の制御処理に基づいて一の制御部に出力制御処理を実行させる他の制御部とを、
備えている制御装置。
【請求項２】
各制御部に個別の記憶部が接続されるとともに、各制御部が各制御部間を接続する通信バスを介して相手の制御部に接続された記憶部をアクセス可能に構成され、
一の制御部が入出力制御処理で得られたデータを、他の制御部の記憶部に書き込み、他の制御部が他の制御処理で得られたデータを、一の制御部の記憶部に書き込むことにより、各制御部の間でデータが授受される請求項１記載の制御装置。
【請求項３】
他の制御部は、他の制御部に接続された記憶部から一の制御部により書き込まれたデータを読み出して被制御部の状態を把握し、その状態に基づいて他の制御処理の実行周期を調整する請求項２記載の制御装置。
【請求項４】
一の制御部は、一の制御部に接続された記憶部に他の制御部により書き込まれたデータの更新周期を計測し、その計測結果に基づいて他の制御部の異常を検出する請求項２または３記載の制御装置。
【請求項５】
一の制御部は、他の制御部の異常を検出すると、前記入出力部を介した被制御部へ出力する信号を被制御部の破損を回避するように設定されたデフォルト値に切り替える請求項４記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の演算処理部が通信バスで接続され、被制御装置と接続される入出力部が各演算処理部で共用可能に構成されている制御装置に関する。
【背景技術】
【０００２】
車両のエンジンを制御するＥＦＩ−ＥＣＵ等の電子制御装置には、エンジンに設けられた各種のセンサ等から入力された信号値に基づいて、様々な演算処理を実行して車両の状態を推定し、最適な動作状態に維持するように各種のアクチュエータを駆動するマイクロコンピュータが組み込まれている。
【０００３】
車両の電子化が進み、様々な機能が組み込まれるに連れて、このような電子制御装置に組み込まれるマイクロコンピュータに要求される演算処理速度等の性能は高くなり、近年では、実行ユニット、デコーダ、スケジューラ、キャッシュ等で構成される演算処理部としてのＣＰＵコアを複数備え、各ＣＰＵコアで共有される入出力部等の周辺リソースとともにパッケージ化されたマルチコアマイクロコンピュータが開発されている。
【０００４】
マルチコアマイクロコンピュータを用いれば、シングルコアマイクロコンピュータより処理速度が向上し、車両の高機能化に対応してより高性能な車両制御が可能になるとともに、膨大で複雑な制御プログラムを、ＣＰＵコア単位に分割することにより、より短期間で開発できるようになると見込まれている。
【０００５】
例えば、特許文献１には、メモリ素子のデータバスを複数のデータビット群に区分することによって、メモリ素子を複数のメモリ領域に区画し、複数のプロセッサが、それぞれのデータビット群を介して各メモリ領域にアクセスすることで、各プロセッサが同一のアドレスを指定する場合でも同時にアクセスでき、電源投入時やリセット時等の立ち上がりを速くすることができるプロセッサ装置が記載されている。
【０００６】
また、特許文献２には、マルチプロセッサシステムのメモリ記憶装置であって、各々独立しているが対応している複数のメモリセルを各々が含んだ第一及び第二のＲＡＭと、転送制御信号に応答して一つのＲＡＭのメモリセルのデジタルデータを他のＲＡＭの対応するメモリセルへ同時にコピーするための制御手段とを備えることで、マルチプロセッサシステム内の各プロセッサに夫々関連したメモリ間でデータを迅速に転送することができるデジタルメモリ記憶装置が記載されている。
【特許文献１】特開平１１−９６１２５号公報
【特許文献２】特開平２−２５９８６６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
このようなマルチコアマイクロコンピュータの一例として、複数の演算処理部が通信バスで接続され、被制御装置と接続される入出力部が各演算処理部で共用可能に構成された制御装置が考えられている。当該制御装置では、各演算処理部にワーキング領域として使用される記憶部を接続し、一方の演算処理部が通信バスを介して他方の演算処理部に接続された記憶部をアクセスするように考えられている。
【０００８】
当該制御装置では、制御プログラムが各演算処理部で並列処理されるため、効率的な演算処理が可能になるが、各演算処理部で共用される入出力部等の周辺リソースに各演算処理部により同時にアクセスされた場合に、何れのアクセスを優先するかを調停するための調停部を設ける必要があり、入出力処理のパーフォーマンスが低下するという虞がある。
【０００９】
また、一方の演算処理部が通信バスを介して他方の演算処理部に接続された記憶部をアクセスする場合のアクセス時間が、自身に接続された記憶部をアクセスする場合のアクセス時間よりも長くなるため、各演算処理部が他の演算処理部に接続されている記憶部を頻繁にアクセスすると、処理効率が低下するという問題もあった。
【００１０】
さらには、複数の演算処理部の何れか一つに暴走等の異常が発生すると、制御装置全体として適正に動作できないという問題もあった。
【００１１】
本発明の目的は、上述した従来の問題点に鑑み、処理効率の低下を来すことなく、複数の演算処理部で効率的に演算処理が実行可能な制御装置を提供する点にある。
【課題を解決するための手段】
【００１２】
上述の目的を達成するため、本発明による制御装置の特徴構成は、被制御部を制御する制御装置であって、制御信号が入出力される入出力部であって、複数の制御部によりアクセス可能な入出力部と、前記入出力部にアクセスして信号を入力する入力制御処理と、入力制御処理により得られた信号に基づいて被制御部を制御する一の制御処理と、一の制御処理に基づいて前記入出力部にアクセスして信号を出力する出力制御処理とを実行する一の制御部と、一の制御部による入力制御処理により得られた信号に基づいて、被制御部を制御する一の制御処理以外の他の制御処理と、他の制御処理に基づいて一の制御部に出力制御処理を実行させる他の制御部とを、備えている点にある。
【００１３】
上述の構成によれば、一方の制御部のみが入出力部を介した被制御部に対する入出力処理を実行し、当該入出力処理の結果に基づいて他の制御部が入出力処理以外の演算処理を実行するため、複数の制御部による入出力部に対するアクセスの競合が発生せず、そのための時間ロスが無くなり、制御プログラムを各制御部で並列処理することにより処理効率を向上するマルチコアマイクロコンピュータの利点を損なうことが無くなる。
【発明の効果】
【００１４】
以上説明した通り、本発明によれば、処理効率の低下を来すことなく、複数の演算処理部で効率的に演算処理が実行可能な制御装置を提供することができるようになった。
【発明を実施するための最良の形態】
【００１５】
図１に示すように、二つのＣＰＵ２，３と、ＣＰＵ２，３で実行される制御プログラムが格納されるＲＯＭ４と、二つのＲＡＭ５，６と、入出力部７ａ、タイマ回路７ｂ、割込み制御部７ｃ等のＣＰＵ周辺リソース７が、パッケージ化されたデュアルコアマイクロコンピュータにより本発明による制御装置１が例示されている。
【００１６】
各ＣＰＵ２，３にはワーキング領域として使用されるＲＡＭ５，６が個別に接続されるとともに、ＣＰＵ２，３間にパラレル方式の通信バス９が接続されている。
【００１７】
各ＣＰＵ２，３で共用されるＲＯＭ４が、調停部１０ａを備えたメモリバス１０で接続されている。フラッシュメモリ等を用いたＲＯＭ４に格納された制御プログラムは、各ＣＰＵ２，３のキャッシュメモリ２ａ，３ａに取り込まれ、リアルタイムＯＳの管理下で実行される。
【００１８】
各ＣＰＵ２，３で共用される周辺リソース７が、調停部１１ａを備えた内部バス１１で接続されている。
【００１９】
調停部１０ａ，１１ａは、各ＣＰＵ２，３からのアクセスが競合した場合に、予め設定されている調停方式に従って、何れのアクセスを優先させるかを調停する回路であり、調停方式としてコンテンション方式やラウンドロビン方式等、公知の調停方式が採用される。
【００２０】
入出力部７ａには、複数のシリアル通信ポート、アウトプットコンペア機能やインプットキャプチャ機能等を備えた複数の入出力ポートが含まれる。
【００２１】
つまり、ＣＰＵ２，３により本発明の制御部としての演算処理部２，３が具現化され、ＲＡＭ５，６により本発明の記憶部５，６が具現化され、制御装置１は、複数の演算処理部２，３が通信バス９で接続され、被制御部としての被制御装置と接続される入出力部７ａが各演算処理部２，３で共用可能に構成されるとともに、演算処理部２，３に個別の記憶部５，６が接続され、各演算処理部２，３が通信バス９を介して相手の演算処理部３，２に接続された記憶部６，５をアクセス可能に構成されている。
【００２２】
制御装置１には、各ＣＰＵ２，３が相手の支配下にあるＲＡＭ６，５をアクセスするためのファームウェアが組み込まれている。
【００２３】
従って、一方のＣＰＵ２は自らの支配下にあるＲＡＭ５に対しては、短いアクセス時間で直接データを読み出し或いは書き込むことができ、他方のＣＰＵ３の支配下にあるＲＡＭ６に対しては、それより長いアクセス時間で通信バス９及びＣＰＵ３を介してデータを読み出し或いは書き込むことができる。
【００２４】
同様に、他方のＣＰＵ３は自らの支配下にあるＲＡＭ６に対しては、短いアクセス時間で直接データを読み出し或いは書き込むことができ、一方のＣＰＵ２の支配下にあるＲＡＭ５に対しては、それより長いアクセス時間で通信バス９及びＣＰＵ２を介してデータを読み出し或いは書き込むことができる。
【００２５】
例えば、一方のＣＰＵ２は自らの支配下にあるＲＡＭ５に対して、１命令サイクルでデータの読み書きが可能であり、他方のＣＰＵ３の支配下にあるＲＡＭ６に対して、２命令サイクルでデータの書き込みが可能で、６命令サイクルでデータの読み出しが可能となる。つまり、一方のＣＰＵ２が他方のＣＰＵ３の支配下にあるＲＡＭ６にデータを書き込むアクセス時間より、データを読み出すアクセス時間が長くなる。
【００２６】
このような制御装置１を、被制御装置である車両のエンジンを制御する電子制御装置であるＥＦＩ−ＥＣＵ（以下、「ＥＣＵ」と記す。）１００に組み込む場合の例を説明する。
【００２７】
図２に示すように、ＥＣＵ１００は、上述の制御装置１と、エンジンに組み込まれた各種センサ等からのアナログ信号やデジタル信号である被制御信号を制御装置１に入力し、制御装置１からエンジンに組み込まれた各種のアクチュエータを駆動するための制御信号を出力する入出力インタフェース回路を備えている。
【００２８】
入出力インタフェース回路には、複数のアナログ信号をデジタル信号に変換するＡ／Ｄコンバータ１０１と、クランクパルス信号や車速パルス信号等のパルス信号等のデジタル信号をインピーダンスマッチングして制御装置１の入出力部７ａに入力するバッファ回路１０２と、制御装置１から出力される制御信号によりアクチュエータを駆動するドライバ回路１０３等が含まれる。
【００２９】
Ａ／Ｄコンバータ１０１と制御装置１とは、シリアル通信線１０４により接続されている。制御装置１の入出力部７ａに組み込まれているシリアル通信ポートからＡ／Ｄコンバータ１０１に、所定のインタバルでデータ入力が要求されると、Ａ／Ｄコンバータ１０１に入力される複数のアナログ信号がそれぞれデジタル信号に変換されて、シリアル通信ポートに入力される。
【００３０】
例えば、Ａ／Ｄコンバータ１０１に、バッテリ電圧、バキュームセンサ出力、吸気温センサ出力、水温センサ出力、酸素センサ出力等のアナログ信号が入力される。
【００３１】
バッファ回路１０２に、クランクパルス信号、車速パルス信号等のパルス信号、並びにスタータ信号等のデジタル信号が入力される。さらに、ドライバ回路１０３から、点火プラグを駆動する点火信号、インジェクタを駆動する燃料噴射信号等のデジタル信号等が出力される。
【００３２】
制御装置１は、入出力インタフェース回路を介して入力される被制御信号に基づいて、所定の演算処理を実行し、エンジンを制御するための制御信号を生成し、入出力インタフェース回路を介して制御信号を出力する。
【００３３】
演算処理とは、ＲＯＭ４に格納された制御プログラムに基づいてＣＰＵ２，３で実行される一連の纏まりのある論理演算であるタスクであり、制御プログラムはエンジンを適正に駆動するための複数のタスクで構成されている。
【００３４】
タスクには、入出力部７ａを介して被制御装置から出力される被制御信号を取り込む入力タスク、入力タスクで入力された被制御信号に基づいて適正な制御値を算出する複数の制御演算タスク、算出された制御値に基づいて生成した制御信号を入出力部７ａを介して被制御装置に出力する出力タスク等が含まれる。
【００３５】
例えば、制御演算タスクには、アイドリング時の回転数等を制御するためのアイドルスピードコントロール演算、走行時の燃料噴射量を算出する燃料噴射量演算、点火時期を算出する点火制御演算等が含まれる。
【００３６】
各タスクは、例えばITRON、μITRON等のリアルタイムＯＳのスケジューラで管理され、システム・コンフィギュレーション・ファイルに予め設定された優先順位等の条件に従って実行される。
【００３７】
二つのＣＰＵ２，３は、共に入出力部７ａを介して被制御装置との間で被制御信号や制御信号の入出力が可能であるが、本発明による演算処理部としてのＣＰＵは、一方のＣＰＵ２が入出力部７ａをアクセスしてエンジンに対する入出力処理、つまり入力タスクと出力タスクを実行し、他方のＣＰＵ３が一方のＣＰＵ２による入出力処理の結果に基づいて、入出力処理以外の演算処理、つまり制御演算タスクを実行するように、各ＣＰＵ２，３で実行されるタスクが分けられている。
【００３８】
また、一方のＣＰＵ２が入出力処理で得られたデータを、他方のＣＰＵ３のＲＡＭ６に書き込み、他方のＣＰＵ３が入出力処理以外の演算処理で得られたデータを、一方のＣＰＵ２のＲＡＭ５に書き込むことにより、各ＣＰＵ２，３の間でデータが授受されるように構成されている。
【００３９】
一方のＣＰＵ２で実行された入力タスクで得られた被制御信号に対応するデータに基づいて、他方のＣＰＵ３が制御演算タスクを実行する必要がある場合に、一方のＣＰＵ２が他方のＣＰＵ３の支配下にあるＲＡＭ６からデータを読み出すよりも、自分の支配下にあるＲＡＭ５からデータを読み出す方が短い命令サイクルで実行できるためである。
【００４０】
図３は、ＲＡＭ５，６のメモリマップを示し、一方のＣＰＵ２の支配下にあるメモリ領域がＸ番地からＸ＋Ｍ番地に設定され、他方のＣＰＵ３の支配下にあるメモリ領域がＹ番地からＹ＋Ｍ番地に設定されている。
【００４１】
メモリ領域のＸ番地からＸ＋Ｍ１番地までの領域が他方のＣＰＵ３によるデータの書込み領域に設定され、メモリ領域のＹ番地からＹ＋Ｍ１番地までの領域が一方のＣＰＵ２によるデータの書込み領域に設定されている。
【００４２】
つまり、メモリ領域のＸ番地からＸ＋Ｍ１番地までの領域と、メモリ領域のＹ番地からＹ＋Ｍ１番地までの領域が双方のＣＰＵ２，３で授受するデータを格納する共有メモリ領域に設定されている。
【００４３】
従って、入力タスク、出力タスク、制御演算タスクに含まれるメモリ読み書き命令には、相手が必要とするデータを、相手の管理下にあるＲＡＭに書き込むようにメモリアドレスが設定される。例えば、共有メモリ領域の先頭アドレスを基準アドレスとして、当該基準アドレスにデータ種類毎に設定されたオフセットアドレスを加算したアドレスをメモリアドレスとして設定すればよい。
【００４４】
尚、ＲＡＭ５，６はそれぞれ別体で構成されていてもよいし、一体で構成されていてもよい。
【００４５】
図４に、各ＣＰＵ２，３で実行されるタスクの概念図が示されている。
一方のＣＰＵ２は、入出力部７ａを介してエンジンから被制御信号を入力し、得られた被制御信号に基づいて他方のＣＰＵ３で必要なデータを生成してＲＡＭ６の共有メモリ領域に書き込む入力タスクと、他方のＣＰＵ３で生成され、ＲＡＭ５の共有メモリ領域に書き込まれた制御データに基づいて、エンジンに制御信号を出力する出力タスクと、入力タスクまたは出力タスクに付随して発生するタスク、例えば、被制御信号に基づいてエンジンの故障の有無を診断する自己診断タスク等を実行する。尚、入力タスク及び出力タスクは、汎用のＩＯドライバを介して間接的に入出力部７ａとアクセスするように構成されている。
【００４６】
他方のＣＰＵ３は、入力タスクによりＲＡＭ６の共有メモリ領域に書き込まれたデータに基づいて、エンジンに対する制御値等を算出する複数種類の制御演算タスクを実行する。例えば、上述したアイドルスピードコントロール演算、燃料噴射量演算、点火制御演算、それらの制御演算により算出された制御値をエンジンの状態に基づいて補正する補正演算等である。
【００４７】
一方のＣＰＵ２では、シリアル通信ポート、アウトプットコンペア機能やインプットキャプチャ機能等を備えた複数の入出力ポートで発生する各種の割込み要求、例えば、シリアル通信割込み、コンペア割込み、キャプチャ割込み等のイベントの発生に応答した割込みハンドラにより対応するタスクが実行される。
【００４８】
他方のＣＰＵ３では、ＣＰＵ周辺リソース７に含まれるタイマ回路７ｂ及び割込み制御部７ｃで発生するタイマ割込みイベントの発生に応答した割込みハンドラにより対応するタスクが実行される。
【００４９】
尚、タスクの実行は、割込みハンドラによってリアルタイムＯＳにタスクの実行が要求されることにより起動される。
【００５０】
詳述すると、割込みハンドラにより、先ず、各タスクの実行周期を管理するタスクマネジャが起動され、タスクマネジャにより各タスクに設定された実行周期に該当するタスクが実行されるように制御される。
【００５１】
図５に示すように、ＥＣＵ１００に電源が供給され、制御装置１が起動すると（ＳＡ１）、一方のＣＰＵ２は、所定の初期化処理を実行する（ＳＡ２）。
【００５２】
初期化処理には、入出力部７ａに組み込まれた各ポートの入出力等のモードを設定するためのポートモードレジスタや、ポートから出力されるデータを設定するためのポートレジスタ等、ＣＰＵ周辺リソース７の各種レジスタやＣＰＵ２の内部レジスタの値の初期化、他方のＣＰＵ３にタイマ割込みを発生するためのタイマレジスタの値の設定、インプットキャプチャ割込み、アウトプットコンペア割込み、シリアル通信割込み等の割込みを許可する割込み制御レジスタの設定等が含まれる。
【００５３】
一方のＣＰＵ２は、初期化処理が終了すると、各入出力に関連するイベント、つまり、通信割込み、信号入力割込み、キャプチャ割込み、コンペア割込み等の発生に対応する入力タスクまたは出力タスクを実行し（図５のフローチャートには記載されていない。）、タスクが終了すると、次のイベントの発生までの間、アイドルタスクを実行する（ＳＡ３）。
【００５４】
ここでは、アイドルタスクとして、初期化処理で設定されたポートモードレジスタ及びタイマレジスタのリフレッシュ処理が実行される。ノイズ等により、重要なレジスタ値が変化することを回避するためである。
【００５５】
入力タスクでは、ＩＯドライバを介して入出力部７ａから取り込まれた被制御信号に対応する入力データが他方のＣＰＵ３の管理下にあるＲＡＭ６の共有メモリ領域に書き込まれ、出力タスクでは、ＲＡＭ５の共有メモリ領域から読み出された制御値から制御信号が生成され、ＩＯドライバを介して入出力部７ａから出力される。
【００５６】
一方のＣＰＵ２による初期化処理で設定されたタイマレジスタの値に従って、他方のＣＰＵ３に対して定期的に、例えば１ｍｓｅｃ．のインタバルで、タイマ割込みが発生する（ＳＢ１）。
【００５７】
他方のＣＰＵ３では、割込みハンドラにより起動されたタスクマネジャが、各タスクに対して設定された変数である演算周期Ｚに該当するタスクを選択して実行させる（ＳＢ２）。
【００５８】
他方のＣＰＵ３で実行される各タスクは、一方のＣＰＵ２によりＲＡＭ６の共有メモリ領域に記憶された入力データを読み出して（ＳＢ３）、所定の演算処理を実行し（ＳＢ４）、演算処理で算出された制御値を一方のＣＰＵ２の管理下にあるＲＡＭ５に記憶する（ＳＢ５）。
【００５９】
尚、他方のＣＰＵ３が、制御値をＲＡＭ５に記憶すると同時に一方のＣＰＵ２にソフトウェアによる割込みを発生させて、一方のＣＰＵ２で実行される出力タスクが起動するように構成してもよいし、一方のＣＰＵ２が一定サイクルでタイマ割込みがかかるように設定し、タイマ割込み処理で出力タスクを起動するように構成してもよい。
【００６０】
このように、一方のＣＰＵ２は、専らエンジンに対する入出力処理に関するタスクを実行し、他方のＣＰＵ３は、専ら入出力処理以外の制御演算を実行するように制御装置１が構成され、入出力部７ａに対するアクセスが競合する事態が発生することが無いため、処理効率の低下を来さず、複数の演算処理部で効率的に演算処理が実行可能となる。
【００６１】
つまり、本発明による制御装置は、制御信号が入出力される入出力部であって、複数の制御部によりアクセス可能な入出力部と、前記入出力部にアクセスして信号を入力する入力制御処理と、入力制御処理により得られた信号に基づいて被制御部を制御する一の制御処理と、一の制御処理に基づいて前記入出力部にアクセスして信号を出力する出力制御処理とを実行する一の制御部と、一の制御部による入力制御処理により得られた信号に基づいて、被制御部を制御する一の制御処理以外の他の制御処理と、他の制御処理に基づいて一の制御部に出力制御処理を実行させる他の制御部とを備えている。
【００６２】
さらに、タスクマネジャは、他方のＣＰＵ３の支配下にあるＲＡＭ６から一方の演算処理部２により書き込まれたデータを読み出して、エンジンの状態を把握し、その状態に基づいて各タスクの実行周期を個別に調整する。
【００６３】
以下、詳述する。図６に示すように、他方のＣＰＵ３にタイマ割込みが発生すると（ＳＣ１）、タスクマネジャはＲＡＭ６の共有メモリ領域から被制御信号に対応する入力データの一つであるエンジン回転数を読み出して、エンジン回転数が１０００ｒｐｍより低速であるか高速であるかを判定する（ＳＣ２）。
【００６４】
エンジン回転数が１０００ｒｐｍより低速である場合には、演算周期Ｚを１に設定し（ＳＣ３）、エンジン回転数が１０００ｒｐｍより高速である場合には、演算周期Ｚを１０に設定する（ＳＣ４）。
【００６５】
その後、スケジュールカウンタＣｃｙｃをインクリメントして（ＳＣ５）、スケジュールカウンタＣｃｙｃの値と実行カウンタＣｅｘｅの差分値が演算周期Ｚと一致するか否かを判定し（ＳＣ６）、一致すると実行カウンタＣｅｘｅの値をスケジュールカウンタＣｃｙｃの値と一致するように更新し（ＳＣ７）、演算周期Ｚが１に設定されているタスクを実行する（ＳＣ８，ＳＣ９，ＳＣ１０）。ステップＳＣ８，ＳＣ９，ＳＣ１０の処理は、上述したステップＳＢ３，ＳＢ４，ＳＢ５と同様である。
【００６６】
スケジュールカウンタＣｃｙｃと実行カウンタＣｅｘｅの初期値はゼロに設定され、演算周期Ｚの初期値は１に設定されている。その状態でタイマ割込みが発生した初回にスケジュールカウンタＣｃｙｃの値が１になり、スケジュールカウンタＣｃｙｃの値と実行カウンタＣｅｘｅの差分値が演算周期Ｚの値１と等しくなる。
【００６７】
その後、実行カウンタＣｅｘｅの値がスケジュールカウンタＣｃｙｃの値と一致するように更新されるので、次のタイマ割込みの処理でスケジュールカウンタＣｃｙｃの値と実行カウンタＣｅｘｅの差分値が演算周期Ｚと一致するようになる。
【００６８】
つまり、タスク毎、或いは、複数のタスク毎に固有のスケジュールカウンタＣｃｙｃと実行カウンタＣｅｘｅと演算周期Ｚを設定することにより、演算周期Ｚに応じてタスクの実行周期が調整される。例えば、あるタスクの演算周期Ｚを１０に設定すれば、１０ｍｓｅｃ．インタバルでタスクが実行され、演算周期Ｚを５に設定すれば、５ｍｓｅｃ．インタバルでタスクが実行されるようになる。
【００６９】
本実施形態では、エンジン回転数が１０００ｒｐｍより低速である場合に、低速回転時に重要なアイドリング時の回転数等を制御するためのアイドルスピードコントロール演算等が１ｍｓｅｃ．のインタバルで実行され、走行時の燃料噴射量を算出する燃料噴射量演算、点火時期を算出する点火制御演算、それらの演算で算出された制御値の補正演算等が１０ｍｓｅｃ．のインタバルで実行されるように、タスクマネジャにより各タスクの演算周期Ｚが設定される。
【００７０】
尚、ステップＳＣ６からステップＳＣ１０の処理は、エンジン回転数が１０００ｒｐｍより低速である場合で演算周期Ｚが１に設定されているアイドルスピードコントロール演算の説明であり、エンジン回転数が１０００ｒｐｍより低速である場合で演算周期Ｚが１０に設定されている場合には、ステップＳＣ９で燃料噴射量演算、点火時期を算出する点火制御演算、それらの演算で算出された制御値の補正演算等が実行される。
【００７１】
逆に、エンジン回転数が１０００ｒｐｍより高速である場合には、燃料噴射量演算、点火時期を算出する点火制御演算、それらの演算で算出された制御値の補正演算等の演算周期Ｚが１に設定され、アイドルスピードコントロール演算等の演算周期Ｚが１０に設定される。
【００７２】
各タスクは例示に過ぎず、タスクマネジャにより他のタスクも適宜演算周期Ｚが設定されることは言うまでもない。
【００７３】
つまり、他の制御部は、他の制御部に接続された記憶部から一の制御部により書き込まれたデータを読み出して被制御部の状態を把握し、その状態に基づいて他の制御処理の実行周期を調整するように構成されている。
【００７４】
本発明による制御装置では、他方の演算処理部３は、他方の演算処理部３に接続された記憶部６から一方の演算処理部２により書き込まれたデータを読み出して被制御装置の状態を把握し、その状態に基づいて各演算処理の実行周期が調整されるため、多数のタスクを一度に実行することによる他方の演算処理部３の負荷の増大を軽減しながらも、被制御装置を適正に制御することができるようになる。
【００７５】
ステップ９で実行されるタスクの演算対象であるエンジンから入力された信号に対する処理が演算周期Ｚに依存するような場合には、演算周期Ｚに従って適正に処理がなされる必要がある。ステップＳＣ９１からステップＳＣ９５はそのような場合の対処を示すものである。
【００７６】
例えば、ある信号ｓがオンしているかオフしているかを判定するために、５００ｍｓｅｃ．の間連続して一定の論理値を示すことを条件とする場合、ＲＡＭ６の共有メモリ領域から読み出した信号ｓの値がオン状態を示す論理値であると（ＳＣ９１）、判定カウンタＣｓｏnに演算周期Ｚを加算し（ＳＣ９２）、信号ｓの値がオフ状態を示す論理値であると（ＳＣ９１）、判定カウンタＣｓｏnの値をゼロにリセットする（ＳＣ９３）。次に、判定カウンタＣｓｏnの値が５００より大となか否かを判定し、大となると（ＳＣ９４）、信号ｓがオンであると判定する（ＳＣ９５）。
【００７７】
演算周期Ｚが１ｍｓｅｃ．であれば、１ｍｓｅｃ．インタバルで判定カウンタＣｓｏnの値が一つずつ加算され、５００回カウントされると５００ｍｓｅｃ．経過したと判断でき、演算周期Ｚが１０ｍｓｅｃ．であれば、１０ｍｓｅｃ．インタバルで判定カウンタＣｓｏnの値が１０ずつ加算され、５０回カウントされると５００ｍｓｅｃ．経過したと判断できるのである。
【００７８】
さらに他方のＣＰＵ３で実行されるタスクマネジャの別の形態を説明する。
図７に示すように、他方のＣＰＵ３にタイマ割込みが発生すると（ＳＤ１）、割込みハンドラは、タスクを実行させるためにリアルタイムＯＳにタスクの実行を要求する。このとき、前回実行要求されたタスクの処理が完了しているか否かのタスク管理情報がリアルタイムＯＳから割込みハンドラに伝えられる。
【００７９】
タスクマネジャは、タスク管理情報に基づいてタスクの処理の重複が無いか否か、つまり、前回実行要求されたタスクの処理が完了しているか否かを判定し（ＳＤ２）、処理の重複が無い場合には、処理負荷が軽減したと判断して演算周期Ｚを１周期短く設定し（ＳＤ３）、処理の重複が有る場合には処理負荷が増大したと判断して演算周期Ｚを１周期長く設定する（ＳＤ３）。
【００８０】
その後のステップＳＤ７からステップＳＤ１２の処理は、図６のステップＳＣ５からステップＳＣ１０の処理と同様である。
【００８１】
ステップＳＤ４で演算周期Ｚが１周期長く設定された場合に、演算周期Ｚが予め設定された演算周期Ｚの最大値に達したか否かが判断され（ＳＤ５）、最大値に達した場合に、異常が発生したと判断して、異常時に設定されているフェールセーフ用の制御値をＲＡＭ５の共有メモリ領域に書き込む（ＳＤ６）。
【００８２】
即ち、他方の演算処理部３は、各演算処理の処理負荷を計測し、その計測結果に基づいて各演算処理の実行周期を調整するように構成されているため、各演算処理がオーバーフローするような事態の発生を未然に防止できるようになる。
【００８３】
尚、処理負荷の計測は、タスク管理情報に基づくものに限らず、タスクマネジャが各タスクから直接実行終了情報を獲得するように構成するものであってもよいし、その他の公知の技術に基づいて計測するものであってもよい。
【００８４】
以下に、各ＣＰＵ２，３の暴走等の異常を検知する異常検知機構と、異常発生時に被制御装置の破損を回避するフェールセーフ機構について説明する。
【００８５】
一方のＣＰＵ２は、入出力部７ａの出力ポートを介して外部回路であるウォッチドッグ回路と接続され、入出力処理の一つとしてウォッチドッグ回路に所定周期のパルスを出力する出力タスクが実行される。
【００８６】
ウォッチドッグ回路は、当該パルスのエッジによりリセットされるタイマ回路を備え、一方のＣＰＵ２に異常が発生して当該パルスが出力されなくなり、タイマ回路により所定時間が計時されると、制御装置１にリセットパルスを出力する。
【００８７】
従って、一方のＣＰＵ２に異常が発生すると、ウォッチドッグ回路から出力されるリセットパルスによって制御措置１がリセットされ、制御措置１が正常状態に復帰する。
【００８８】
他方のＣＰＵ３は、入出力処理以外の演算処理を実行するため、外部回路であるウォッチドッグ回路をアクセスすることができない。
【００８９】
そこで、一方のＣＰＵ２が他方のＣＰＵ３の暴走等の異常を監視するように構成されている。
【００９０】
図８に示すように、他方のＣＰＵ３にタイマ割込みが発生し（ＳＥ１）、タスクマネジャにより演算周期Ｚと一致するタスクが起動されると（ＳＥ２）、タスクの先頭処理として、自身の支配下にあるＲＡＭ６に区画された異常検知用のチェックカウンタＣｃｈｇの値を１加算する（ＳＥ３）。
【００９１】
次に、一方のＣＰＵ２によりＲＡＭ６の共有メモリ領域に記憶された入力データを読み出して（ＳＥ４）、所定の演算処理を実行し（ＳＥ５）、演算処理で算出された制御値を一方のＣＰＵ２の管理下にあるＲＡＭ５の共有メモリ領域に記憶する。このとき、同時にチェックカウンタＣｃｈｇの値をＲＡＭ５の共有メモリ領域に記憶する（ＳＥ６）。
【００９２】
図９に示すように、一方のＣＰＵ２は、入出力イベントに対応した定期処理である入力タスクまたは出力タスクを実行し（ＳＦ１）、自身の支配下にあるＲＡＭ５の共有メモリ領域に他方のＣＰＵ３によって書き込まれたチェックカウンタＣｃｈｇの値を読み出し（ＳＦ３）、ＲＡＭ５の共有メモリ領域以外の領域に格納した前回のチェックカウンタＣｃｈｇの値と比較する（ＳＦ４）。
【００９３】
読み出したチェックカウンタＣｃｈｇの値が前回値と一致する場合（ＳＦ４）、他方のＣＰＵ３でタスクが適正に実行されていないか、一方のＣＰＵ２の入出力イベント間で他方のＣＰＵ３のタスクが実行されていないと判断して異常カウンタＣｔｃｈｋの値を１加算し（ＳＦ５）、読み出したチェックカウンタＣｃｈｇの値が前回値と一致しない場合（ＳＦ４）、異常カウンタＣｔｃｈｋの値をリセットして（ＳＦ６）、チェックカウンタＣｃｈｇの値を今回の読み出した値に更新する（ＳＦ７）。
【００９４】
次に、異常カウンタＣｔｃｈｋの値が予め設定された異常判定値Ｔｍａｘと比較し、異常カウンタＣｔｃｈｋの値が異常判定値Ｔｍａｘ以下であれば、他方のＣＰＵ３が正常に動作していると判定し、異常カウンタＣｔｃｈｋの値が異常判定値Ｔｍａｘより大きければ、他方のＣＰＵ３に異常が発生していると判定する（ＳＦ７）。
【００９５】
他方のＣＰＵ３が正常であると判定した場合には、ＲＡＭ５の共有メモリ領域に格納された制御値に基づいて生成した出力信号を入出力部７ａから出力し（ＳＦ１０、ＳＦ１１）、他方のＣＰＵ３が異常であると判定した場合には、予め設定されたデフォルト値に基づいて生成した出力信号を入出力部７ａから出力する（ＳＦ９、ＳＦ１１）。当該デフォルト値はエンジンが破損しないように設定されたフェールセーフ値である。チェックカウンタＣｃｈｇ及び異常カウンタＣｔｃｈｋは、オーバーフローが発生してもプログラムのスキップが生じないようにガードされている。
【００９６】
尚、チェックカウンタＣｃｈｇ及び異常カウンタＣｔｃｈｋに替えて、時間を計時するタイマで構成してもよい。この場合、入出力イベントの発生周期が異なる場合でも異常の発生を一定時間で検知することができる。
【００９７】
即ち、本発明による制御装置は、一方の演算処理部２が、一方の演算処理部２に接続された記憶部５に他方の演算処理部３により書き込まれたデータの更新周期を計測し、その計測結果に基づいて他方の演算処理部３の異常を検出するように構成されている。
【００９８】
そして、一方の演算処理部２は、他方の演算処理部３の異常を検出すると、入出力部７ａを介した被制御装置への出力信号を当該被制御装置の破損を回避するように設定されたフェールセーフ用のデフォルト値に切り替えることにより、被制御装置の破損を回避することができるようになる。
【００９９】
次に、一方のＣＰＵ２が他方のＣＰＵ３の暴走等の異常を監視する他の構成を説明する。
【０１００】
図１０に示すように、他方のＣＰＵ３にタイマ割込みが発生し（ＳＧ１）、タスクマネジャにより演算周期Ｚと一致するタスクが起動されると（ＳＧ２）、タスクの先頭処理として、自身の支配下にあるＲＡＭ６に区画された異常検知用のチェックカウンタＣｃｈｇの値を１加算する（ＳＧ３）。
【０１０１】
次に、一方のＣＰＵ２によりＲＡＭ６の共有メモリ領域に記憶された入力データを読み出して（ＳＧ４）、所定の演算処理を実行するとともに（ＳＧ５）、チェックカウンタＣｃｈｇの値を変数とする所定の診断用演算処理を実行してチェックデータＤｃｈｇを算出する（ＳＧ６）。
【０１０２】
所定の演算処理として以下の数式が例示できるが、任意に設定すればよい。
Ｄｃｈｇ＝（Ｃｃｈｇの値）×α／β＋γ  ；α，β，γは定数である。
【０１０３】
ステップＳＧ５の演算処理で算出された制御値と、ステップＳＧ３で更新されたチェックカウンタＣｃｈｇの値、及び、ステップＳＧ６で算出されたチェックデータＤｃｈｇを、一方のＣＰＵ２の管理下にあるＲＡＭ５の共有メモリ領域に記憶する（ＳＧ７）。
【０１０４】
図１１に示すように、一方のＣＰＵ２は、入出力イベントに対応した定期処理である入力タスクまたは出力タスクを実行し（ＳＨ１）、自身の支配下にあるＲＡＭ５の共有メモリ領域に他方のＣＰＵ３によって書き込まれたチェックカウンタＣｃｈｇの値、及び、チェックデータＤｃｈｇを読み出し（ＳＨ３，ＳＨ４）、ＲＡＭ５の共有メモリ領域以外の領域に格納した前回のチェックカウンタＣｃｈｇの値と比較する（ＳＨ５）。
【０１０５】
読み出したチェックカウンタＣｃｈｇの値が前回値と一致する場合（ＳＨ５）、他方のＣＰＵ３でタスクが適正に実行されていないか、一方のＣＰＵ２の入出力イベント間で他方のＣＰＵ３のタスクが実行されていないと判断して異常カウンタＣｔｃｈｋの値を１加算し（ＳＨ６）、読み出したチェックカウンタＣｃｈｇの値が前回値と一致しない場合（ＳＨ５）、異常カウンタＣｔｃｈｋの値をリセットして（ＳＨ７）、チェックカウンタＣｃｈｇの値を今回の読み出した値に更新する（ＳＨ８）。
【０１０６】
次に、異常カウンタＣｔｃｈｋの値が予め設定された異常判定値Ｔｍａｘと比較し、異常カウンタＣｔｃｈｋの値が異常判定値Ｔｍａｘより大きければ、他方のＣＰＵ３に異常が発生していると判定する（ＳＨ９）。
【０１０７】
異常カウンタＣｔｃｈｋの値が異常判定値Ｔｍａｘ以下であれば（ＳＨ９）、今回読み出した異常カウンタＣｔｃｈｋの値を変数として、上述した所定の診断用演算処理を実行してチェックデータＤｃｈｇを算出し、ステップＳＨ４で読み出したチェックデータＤｃｈｇと比較する（ＳＨ１１）。
【０１０８】
その結果、チェックデータＤｃｈｇが一致する場合には、他方のＣＰＵ３が正常に動作していると判定し、チェックデータＤｃｈｇが一致しない場合には、他方のＣＰＵ３に異常が発生していると判定する（ＳＨ１１）。
【０１０９】
他方のＣＰＵ３が正常であると判定した場合には、ＲＡＭ５の共有メモリ領域に格納された制御値に基づいて生成した出力信号を入出力部７ａから出力し（ＳＨ１３、ＳＨ１４）、他方のＣＰＵ３が異常であると判定した場合には、予め設定されたデフォルト値に基づいて生成した出力信号を入出力部７ａから出力する（ＳＨ１０，ＳＨ１２，ＳＨ１４）。当該デフォルト値は、上述と同様に、エンジンが破損しないように設定されたフェールセーフ値である。チェックカウンタＣｃｈｇ及び異常カウンタＣｔｃｈｋは、オーバーフローが発生してもプログラムのスキップが生じないようにガードされている。
【０１１０】
即ち、他方の演算処理部３が、所定の診断用演算処理を実行して、その演算結果を一方の演算処理部２に接続された記憶部５に書き込み、一方の演算処理部２が、診断用演算処理を実行した演算結果と、一方の演算処理部２に接続された記憶部５に他方の演算処理部３により書き込まれた演算結果を比較し、その比較結果に基づいて他方の演算処理部３の異常を検出するように構成されている。
【０１１１】
尚、上述の例では、チェックカウンタＣｃｈｇの値を診断用演算処理の変数とする場合を説明したが、チェックカウンタＣｃｈｇの値以外の値を設定してもよい。また、チェックカウンタＣｃｈｇによる異常判定と、診断用演算処理による異常判定の双方を実行する場合を説明したが、診断用演算処理による異常判定のみを実行するものであってもよい。
【０１１２】
上述した実施形態では、本発明による制御装置が、演算処理部として二つのＣＰＵを備えたデュアルコアマイクロコンピュータで構成される場合を説明したが、三つ以上のＣＰＵを備えたマルチコアマイクロコンピュータで構成されるものであってもよい。
【０１１３】
この場合、少なくとも一つの演算処理部が、入出力部をアクセスして被制御装置に対する入出力処理を実行し、他の複数の演算処理部が、一つの演算処理部による入出力処理の結果に基づいて入出力処理以外の演算処理を実行するように構成すればよい。
【０１１４】
上述した実施形態では、被制御装置が車両に搭載されるエンジンであり、一方の演算処理部が当該エンジンに備えたセンサからの信号を入力するとともに当該エンジンに備えたアクチュエータへの制御信号を出力する入出力処理を実行し、他方の演算処理部が一方の演算処理部を介して入力された信号値に基づいて当該エンジンを制御するための演算処理を実行する制御装置を説明したが、被制御装置はエンジンに限るものでは無く、車両に搭載されるミッション装置、制動装置、エンジンと走行モータを備えたハイブリッド装置であってもよい。
【０１１５】
さらには、被制御装置が車両以外の被制御装置、例えば航空機やＯＡ機器等であっても、本発明による制御装置を用いることができる。
【０１１６】
つまり、制御装置は、複数の演算処理部が通信バスで接続され、被制御装置と接続される入出力部が各演算処理部で共用可能に構成され、一方の演算処理部が前記入出力部をアクセスして前記被制御装置に対する入出力処理を実行し、他方の演算処理部が前記入出力処理の結果に基づいて前記入出力処理以外の演算処理を実行するように構成されている。
【０１１７】
そして、各演算処理部に個別の記憶部が接続されるとともに各演算処理部が前記通信バスを介して相手の演算処理部に接続された記憶部をアクセス可能に構成され、一方の演算処理部が前記入出力処理で得られたデータを、他方の演算処理部の記憶部に書き込み、他方の演算処理部が前記入出力処理以外の演算処理で得られたデータを、一方の演算処理部の記憶部に書き込むことにより、各演算処理部の間でデータが授受されるように構成されている。
【０１１８】
また、他方の演算処理部は、他方の演算処理部に接続された記憶部から一方の演算処理部により書き込まれたデータを読み出して前記被制御装置の状態を把握し、その状態に基づいて各演算処理の実行周期を調整するように構成されている。
【０１１９】
また、他方の演算処理部は、各演算処理の処理負荷を計測し、その計測結果に基づいて各演算処理の実行周期を調整するように構成されている。
【０１２０】
さらに、一方の演算処理部は、一方の演算処理部に接続された記憶部に他方の演算処理部により書き込まれたデータの更新周期を計測し、その計測結果に基づいて他方の演算処理部の異常を検出するように構成されている。
【０１２１】
他方の演算処理部が、所定の診断用演算処理を実行して、その演算結果を一方の演算処理部に接続された記憶部に書き込み、一方の演算処理部が、前記診断用演算処理を実行した演算結果と、一方の演算処理部に接続された記憶部に他方の演算処理部により書き込まれた演算結果を比較し、その比較結果に基づいて他方の演算処理部の異常を検出するように構成されている。
【０１２２】
一方の演算処理部は、他方の演算処理部の異常を検出すると、前記入出力部を介した被制御装置への出力信号を当該被制御装置の破損を回避するように設定されたデフォルト値に切り替えるように構成されている。
【０１２３】
上述した実施形態は、本発明の一例に過ぎず、本発明の作用効果を奏する範囲において各ブロックの具体的構成等を適宜変更設計できることは言うまでもない。
【図面の簡単な説明】
【０１２４】
【図１】本発明による制御装置であるデュアルコアマイクロコンピュータの回路ブロック構成図
【図２】本発明による制御装置が組み込まれたＥＦＩ−ＥＣＵの回路ブロック構成図
【図３】本発明に用いられる記憶部のメモリマップの説明図
【図４】本発明による制御装置であるデュアルコアマイクロコンピュータの機能ブロック構成図
【図５】本発明による制御装置の基本動作を説明するフローチャート
【図６】本発明による制御装置を構成する他方の演算処理部の動作を説明するフローチャート
【図７】別実施形態を示し、本発明による制御装置を構成する他方の演算処理部の動作を説明するフローチャート
【図８】本発明による制御装置の一方の演算処理部による異常検出動作を説明するフローチャート
【図９】本発明による制御装置の他方の演算処理部による異常検出動作を説明するフローチャート
【図１０】別実施形態を示し、本発明による制御装置の一方の演算処理部による異常検出動作を説明するフローチャート
【図１１】別実施形態を示し、本発明による制御装置の他方の演算処理部による異常検出動作を説明するフローチャート
【符号の説明】
【０１２５】
１：制御装置（デュアルコアマイクロコンピュータ）
２：一方の演算処理部（ＣＰＵ）
３：他方の演算処理部（ＣＰＵ）
４：記憶部（ＲＯＭ）
５：記憶部（一方の演算処理部と接続されるＲＡＭ）
６：記憶部（他方の演算処理部と接続されるＲＡＭ）
７：周辺リソース
７ａ：入出力部
【図１】
2010122752.tif 000003
【図２】
2010122752.tif 000004
【図３】
2010122752.tif 000005
【図４】
2010122752.tif 000006
【図５】
2010122752.tif 000007
【図６】
2010122752.tif 000008
【図７】
2010122752.tif 000009
【図８】
2010122752.tif 000010
【図９】
2010122752.tif 000011
【図１０】
2010122752.tif 000012
【図１１】
2010122752.tif 000013