(57)【特許請求の範囲】
【請求項１】
演算結果記憶用のメモリをそれぞれ有した２つのＣＰＵを備え、
前記２つのＣＰＵのうちの一方が、複数種類のデータを更新して該更新した複数種類のデータを当該ＣＰＵのメモリに更新記憶するデータ更新処理を実行し、
前記２つのＣＰＵのうちの他方が、前記データ更新処理によって更新される複数種類のデータを当該ＣＰＵのメモリから読み出して演算に用いるデータ参照処理を実行するように構成される電子装置に用いられ、
前記一方のＣＰＵ（以下、第１ＣＰＵという）のメモリ（以下、第１メモリという）から、前記他方のＣＰＵ（以下、第２ＣＰＵという）のメモリ（以下、第２メモリという）へ、前記複数種類のデータをコピーするＣＰＵ間データ転送装置であって、
前記第１メモリから前記第２メモリへ前記複数種類のデータを転送するために、その複数種類のデータが一時記憶される転送用メモリと、
前記第１ＣＰＵにおいて前記データ更新処理が開始されると起動して、そのデータ更新処理により前記第１メモリへ書き込まれた前記複数種類のデータを、前記転送用メモリへ書き込む第１転送手段と、
前記第２ＣＰＵにおいて前記データ参照処理が実行されていないことを検知すると、前記転送用メモリから前記第２メモリへ前記複数種類のデータを書き込む第２転送手段と、
を備えていることを特徴とするＣＰＵ間データ転送装置。
【請求項２】
請求項１に記載のＣＰＵ間データ転送装置において、
前記第２ＣＰＵでは、前記データ参照処理の開始時に割り込みを禁止し、そのデータ参照処理の終了時に割り込みを許可するようになっており、
前記第２転送手段は、前記第２ＣＰＵが割り込み許可状態であるか否かを監視し、該第２ＣＰＵが割り込み許可状態であれば、前記第２ＣＰＵにおいて前記データ参照処理が実行されていないと判断すること、
を特徴とするＣＰＵ間データ転送装置。
【請求項３】
請求項１又は請求項２に記載のＣＰＵ間データ転送装置において、
前記転送用メモリは、当該転送用メモリから前記第２メモリへのデータ書き込みが行われると、記憶データが消去されるようになっており、
前記第２転送手段は、前記転送用メモリ内にデータがあり、且つ、前記第２ＣＰＵにおいて前記データ参照処理が実行されていないことを検知すると、前記転送用メモリから前記第２メモリへ前記複数種類のデータを書き込むこと、
を特徴とするＣＰＵ間データ転送装置。
【請求項４】
請求項２に記載のＣＰＵ間データ転送装置において、
前記第１ＣＰＵは、前記データ更新処理の終了時に、前記第２ＣＰＵに対して割り込み要求を発行するようになっており、
前記第２ＣＰＵは、前記第１ＣＰＵからの割り込み要求により起動される特定の割り込みルーチンにより、前記転送用メモリから前記第２メモリへ前記複数種類のデータを書き込む処理を行うようになっており、
前記第２転送手段の機能は、前記第２ＣＰＵが前記特定の割り込みルーチンを実行することで実現されること、
を特徴とするＣＰＵ間データ転送装置。
【請求項５】
請求項１ないし請求項４の何れか１項に記載のＣＰＵ間データ転送装置において、
前記第１転送手段は、前記第１ＣＰＵが前記データ更新処理の開始時に実行する特定の命令によって起動されるように構成されていること、
を特徴とするＣＰＵ間データ転送装置。
【請求項６】
請求項５に記載のＣＰＵ間データ転送装置において、
前記第１ＣＰＵでは、前記データ更新処理の開始時に割り込みを禁止し、そのデータ更新処理の終了時に割り込みを許可するようになっており、
更に、前記第１ＣＰＵでは、割り込み禁止処理用の関数がコールされると、割り込みを禁止する処理と前記第１転送手段を起動する処理とが実行されるようになっており、
前記第１転送手段は、前記第１ＣＰＵにて前記データ更新処理の開始時に前記割り込み禁止処理用の関数がコールされることで起動されること、
を特徴とするＣＰＵ間データ転送装置。
【請求項７】
請求項１に記載のＣＰＵ間データ転送装置において、
前記２つのＣＰＵのうち、少なくとも前記第２ＣＰＵでは、各処理のタスクがオペレーティングシステム（以下、ＯＳという）上で実行されるようになっており、
更に、前記第２ＣＰＵでは、ＯＳが実行対象のタスクを切り替える際に、そのＯＳの処理として、前記転送用メモリから前記第２メモリへ前記複数種類のデータを書き込む書込処理が行われるようになっており、前記第２転送手段の機能は、前記第２ＣＰＵのＯＳによって実現されること、
を特徴とするＣＰＵ間データ転送装置。
【請求項８】
請求項７に記載のＣＰＵ間データ転送装置において、
前記転送用メモリは、当該転送用メモリから前記第２メモリへのデータ書き込みが行われると、記憶データが消去されるようになっており、
前記第２ＣＰＵにおいて、前記書込処理は、前記ＯＳが実行対象のタスクを切り替える際に、前記転送用メモリ内にデータがあれば行われるようになっていること、
を特徴とするＣＰＵ間データ転送装置。
【請求項９】
請求項７又は請求項８に記載のＣＰＵ間データ転送装置において、
前記第１ＣＰＵでは、各処理のタスクがＯＳ上で実行されるようになっていると共に、前記データ更新処理のタスクの開始時にタスク切り替えを禁止し、そのタスクの終了時にタスク切り替えを許可するようになっており、
更に、前記第１ＣＰＵでは、前記データ更新処理のタスクの開始時にて、タスク切り替え禁止処理用の関数がコールされると、ＯＳによりタスク切り替えの禁止と前記第１転送手段の起動とが行われるようになっていること、
を特徴とするＣＰＵ間データ転送装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子装置に備えられた２つのＣＰＵ間でデータを共有するための技術に関するものである。
【背景技術】
【０００２】
従来より、例えば自動車用の電子制御装置においては、エンジンの燃料噴射制御や自動変速機の変速制御等の各種制御を、マイクロコンピュータ（以下、ＣＰＵという）を用いて行うのが一般的である。また、近年では、処理の増加や複雑化に対応するために、複数のＣＰＵが連携して制御処理を進める所謂マルチＣＰＵタイプの電子制御装置を用いることがある。
【０００３】
ここで、マルチＣＰＵタイプの電子制御装置では、各ＣＰＵ間でデータを共用する必要がある。
そして、ＣＰＵが２つの場合、その両ＣＰＵが共有するデュアルポートＲＡＭ（以下、ＤＰＲＡＭという）を設ける構成が知られている（例えば、特許文献１，２）。しかし、ＤＰＲＡＭを設けると、概してハードウェアの複雑化及び高コスト化を招いてしまう。
【０００４】
このため、他の手法として、各ＣＰＵで共有されるＤＰＲＡＭのようなメモリを設けるのではなく、例えば、２つの各ＣＰＵが、自分側のＲＡＭと他のＣＰＵ側のＲＡＭとの両方にアクセス可能に構成すると共に、各ＣＰＵが、その両方のＲＡＭへのアクセス権を取り合い、アクセス権を確保した方のＣＰＵが他のＣＰＵ側のＲＡＭにデータを書き込んでいる間、アクセス権を確保できなかったＣＰＵは、処理を停止してアクセス権が開放されるまで待機し、その後、自分側のＲＡＭにアクセスしてデータの参照等を行う、といった仕組みが考えられる。つまり、セマフォのようなアクセス権（リソース）を設け、それを各ＣＰＵが取得し合うようにするのである。
【０００５】
以下、こうした調停機構の一例について、エンジンの燃料噴射制御を例に挙げ、図７を用いて説明する。
まず、図７の例では、２つのＣＰＵ１，２のうち、一方のＣＰＵ１が、センサ処理関数を実行することにより、エンジン水温（エンジンの冷却水温）を検出するための水温センサからの信号とエンジンの吸入空気温を検出するための吸気温センサからの信号とをそれぞれＡ／Ｄ変換してエンジン水温と吸入空気温との各データを更新し、他方のＣＰＵ２が、噴射量算出関数を実行することにより、ＣＰＵ１が更新したエンジン水温と吸入空気温との各データを参照して燃料噴射量を算出する。このため、ＣＰＵ２側の噴射量算出関数で参照する各データは、同じタイミングで更新されたデータである必要がある。各データが同じタイミングで更新されたものでないと、適切な演算結果（この例では燃料噴射量）が得られないからである。尚、以下では、このようなデータであって、演算に用いられる際に同じタイミングで更新されたもの同士である必要のある複数種類のデータのことを、同時性の必要なデータという。
【０００６】
ここで、図７に示すように、ＣＰＵ１側のセンサ処理関数では、まず、割り込み禁止処理を行い（Ｓ１１）、次に、ＣＰＵ２のＲＡＭへのアクセス権を取得して（Ｓ１２）、ＣＰＵ２がＲＡＭを参照できないようにしておく。
【０００７】
そして、水温センサからの信号をＡ／Ｄ変換して、そのデータであるエンジン水温のデータを当該ＣＰＵ１のＲＡＭに更新記憶すると共に（Ｓ１３）、吸気温センサからの信号をＡ／Ｄ変換して、そのデータである吸入空気温のデータを当該ＣＰＵ１のＲＡＭに更新記憶する（Ｓ１４）。
【０００８】
また、それらのデータはＣＰＵ２側の噴射量算出関数でも参照されるため、ＣＰＵ１は、ＣＰＵ２のＲＡＭに記憶されているエンジン水温と吸入空気温の各データも、ＣＰＵ１のＲＡＭに更新記憶したものと同じデータに更新する（Ｓ１３，Ｓ１４）。尚、この例では、エンジン水温のデータが８０℃から９０℃に更新され、吸入空気温のデータが２０℃から２５℃に更新されている。
【０００９】
そして、ＣＰＵ１は、両方のＲＡＭへのデータ書き込みが完了した後、ＣＰＵ２のＲＡＭへのアクセス権を解放し（Ｓ１５）、最後に、割り込み許可処理を行う（Ｓ１６）。これでＣＰＵ１側のセンサ処理関数が終了する。
【００１０】
一方、ＣＰＵ２側の噴射量算出関数では、まず、割り込み禁止処理を行い（Ｓ２１）、次に、当該ＣＰＵ２のＲＡＭへのアクセス権を取得しようとするが（Ｓ２２）、図７の例では、この時点でＣＰＵ１によりＣＰＵ２のＲＡＭへのアクセス権が先に取られてしまっているため、ＣＰＵ１がアクセス権を解放するまでアクセス権の取得要求を発行し続けることとなる（Ｓ２２）。
【００１１】
その後、ＣＰＵ１がＣＰＵ２のＲＡＭへのアクセス権を解放すると（Ｓ１５）、ＣＰＵ２は自分のＲＡＭへのアクセス権を取得できるようになる。
そして、ＣＰＵ２は、自分のＲＡＭへのアクセス権を取得すると、その自分のＲＡＭからエンジン水温と吸入空気温との各データを読み出し（Ｓ２３，Ｓ２４）、その各データを用いて燃料噴射量を算出する。最後に、割り込み許可処理を行い（Ｓ２５）、これでＣＰＵ２側の噴射量算出関数が終了する。
【００１２】
このような手順及び機構により、同時性の必要なデータに関する排他制御が実現され、例えば、ＣＰＵ１が同時性の必要なデータを順次更新している最中に、ＣＰＵ２がＲＡＭにアクセスして、あるデータについては更新後のものを読み込み、他のデータについては更新前のものを読み込んでしまい、その結果、ＣＰＵ２にて異なるタイミングでのデータを用いて演算処理をしてしまう、といった不具合を回避することができる。
【００１３】
尚、ＣＰＵ１側のセンサ処理関数において、最初のＳ１１で割り込みを禁止し、最後のＳ１６で割り込みを許可するようにしているのと、ＣＰＵ２側の噴射量算出関数において、最初のＳ２１で割り込みを禁止し、最後のＳ２５で割り込みを許可するようにしているのは、ＣＰＵが１つだけ備えられるシングルＣＰＵタイプの場合であっても、同時性の必要なデータに関する排他制御が実現されるように従来より実施されているものであり、マルチＣＰＵタイプの場合とシングルＣＰＵタイプの場合とでアプリケーションプログラムを極力共通化させようとしているためである。
【００１４】
具体的に説明すると、まず、シングルＣＰＵタイプの場合、図７のセンサ処理関数と噴射量算出関数とが１つのＣＰＵで実行されることとなる。
このため、もし、センサ処理関数の実行中（即ち、同時性の必要なデータを順次更新している最中）に、そのセンサ処理関数で更新される複数種類のデータを参照して演算する噴射量算出関数などの処理（以下、データ参照処理という）が割り込んで開始されてしまうと、そのデータ参照処理にて、あるデータについては更新後のものを読み込み、他のデータについては更新前のものを読み込んでしまい、その結果、異なるタイミングでのデータを用いて演算処理をしてしまう。このため、センサ処理関数の最初に割り込みを禁止して、そのセンサ処理関数の実行中に他の処理が割り込まないようにしている。
【００１５】
また、もし、噴射量算出関数などのデータ参照処理の実行中に、センサ処理関数が割り込んで実行されてしまっても、データ参照処理では、センサ処理関数が開始される前に読み込んだデータは更新前のデータとなり、センサ処理関数が終了してから読み込んだデータは更新後のデータとなるため、やはり、異なるタイミングでのデータを用いて演算処理をしてしまう。このため、データ参照処理の最初に割り込みを禁止して、その処理の実行中に他の処理が割り込まないようにしている。
【特許文献１】特開平３−１２９５４８号公報
【特許文献２】特開平５−８６６４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１６】
ところで、図７のような手続きを行うことにより、２つのＣＰＵ１，２間にて同時性の必要なデータに関する排他制御を行うことができるが、ＣＰＵ１側で同時性の必要なデータを更新する処理（センサ処理関数）が実行されている時に、ＣＰＵ２側で同時性の必要なデータを参照する処理（噴射量算出関数）が起動された場合、ＣＰＵ２は、そのＣＰＵ２のＲＡＭへのアクセス権をＣＰＵ１が解放するまで待たされることになる（Ｓ２２）。
【００１７】
このため、マルチＣＰＵタイプの構成に期待される並列処理の効果（即ち、処理の高速性）が損なわれてしまう。特に、例えばエンジン制御用のアプリケーションプログラムの場合、同時性の必要なデータを用いて演算を行う処理が多数の箇所に存在しており、そのような演算処理の実行が待たされることは、処理効率の大きな低下につながる。
【００１８】
また、図７のような手続を行う構成の場合、２つのＣＰＵがＲＡＭへのアクセス権を互いに取りに行って、お互い解放待ちになってしまう可能性があり、そうなるとデッドロック状態になってしまう。よって、アプリケーションプログラムを設計する際に、各ＣＰＵがＲＡＭへのアクセス権を取得する順番も十分に考慮する必要があり、プログラムの開発効率を悪化させてしまう。具体的には、シングルＣＰＵタイプの電制御装置に使用していた既存のアプリケーションプログラムをマルチＣＰＵタイプの電子制御装置へ流用する場合に、考慮及び変更しなければならない要素が増加してしまう。
【００１９】
本発明は、こうした問題に鑑みなされたものであり、一方のＣＰＵで更新される複数種類のデータを他方のＣＰＵが参照するマルチＣＰＵタイプの電子装置において、データ参照側のＣＰＵを待機させることなく、処理効率を良好にするのに好適なＣＰＵ間データ転送装置の提供を目的としている。
【課題を解決するための手段】
【００２０】
請求項１のＣＰＵ間データ転送装置が用いられる電子装置では、演算結果記憶用のメモリをそれぞれ有した２つのＣＰＵのうちの一方が、複数種類のデータを更新して該更新した複数種類のデータを当該ＣＰＵのメモリに更新記憶するデータ更新処理を実行し、他方のＣＰＵが、前記データ更新処理によって更新される複数種類のデータを当該ＣＰＵのメモリから読み出して演算に用いるデータ参照処理を実行する。
【００２１】
そして、請求項１のＣＰＵ間データ転送装置は、前記データ更新処理を実行する方のＣＰＵ（以下、第１ＣＰＵという）のメモリ（以下、第１メモリという）から、前記データ参照処理を実行する方のＣＰＵ（以下、第２ＣＰＵという）のメモリ（以下、第２メモリという）へ、前記複数種類のデータをコピーすることにより、その複数種類のデータを第１ＣＰＵ側から第２ＣＰＵ側へ提供する。
【００２２】
そこで、請求項１のＣＰＵ間データ転送装置は、第１メモリから第２メモリへ前記複数種類のデータを転送するために、その複数種類のデータが一時記憶される転送用メモリと、第１転送手段と、第２転送手段とを備えている。
【００２３】
そして、第１転送手段は、第１ＣＰＵにおいてデータ更新処理が開始されると起動して、そのデータ更新処理により第１メモリへ書き込まれた複数種類のデータを、転送用メモリへ書き込む。
【００２４】
また、第２転送手段は、第２ＣＰＵにおいてデータ参照処理が実行されていないことを検知すると、転送用メモリから第２メモリへ前記複数種類のデータを書き込む。
このようなＣＰＵ間データ転送装置によれば、例えば、第１ＣＰＵ側でデータ更新処理が実行されている時に、第２ＣＰＵ側でデータ参照処理が開始された場合、転送用メモリには、今回のデータ更新処理で第１メモリに更新記憶されるのと同じ複数種類のデータが第１転送手段により書き込まれるが、第２メモリには前回のデータ更新処理で更新されたデータが記憶されていることとなり、第２ＣＰＵは、その前回更新のデータを第２メモリから読み出して演算を行うこととなる。つまり、第２ＣＰＵ側のデータ参照処理は停止することなく実行される。
【００２５】
そして、第２ＣＰＵにおいてデータ参照処理が終了すると、第２転送手段により、転送用メモリから第２メモリへ、今回のデータ更新処理で更新された最新のデータが書き込まれることとなり、その後、再び第２ＣＰＵ側でデータ参照処理が開始された場合には、第２ＣＰＵは、その最新のデータを第２メモリから読み出して演算を行うこととなる。
【００２６】
また、第１ＣＰＵ側でデータ更新処理が実行されて、転送用メモリへ今回更新されたデータが書き込まれた際に、第２ＣＰＵ側でデータ参照処理が実行されていなければ、第２転送手段により、転送用メモリから第２メモリへ今回更新された最新のデータが書き込まれることとなり、その後、第２ＣＰＵ側でデータ参照処理が開始されると、第２ＣＰＵは、その最新のデータを第２メモリから読み出して演算を行うこととなる。
【００２７】
このように請求項１のＣＰＵ間データ転送装置によれば、第２ＣＰＵ側のデータ参照処理で演算に用いる複数種類のデータが同じタイミングで更新されたものでなければならないというデータの同時性を確保しつつ、データを参照する側の第２ＣＰＵを待機させてしまうことがないため、マルチＣＰＵタイプの電子装置における処理効率を良好にすることができる。
【００２８】
また、このＣＰＵ間データ転送装置によれば、図７に示した例のように２つのＣＰＵがメモリへのアクセス権を取り合うことがなく、両ＣＰＵがデッドロック状態になってしまう心配がないため、各ＣＰＵに実行させるアプリケーションプログラムの設計が容易になる。特に、データ更新処理のプログラム中や、データ参照処理のプログラム中に、図７におけるＳ１２，Ｓ１５やＳ２２のようなメモリへのアクセス権を取得するための命令を挿入する必要がないため、シングルＣＰＵタイプの装置に使用していた既存のプログラムをマルチＣＰＵタイプの装置へ流用することが容易になり、また、シングルＣＰＵタイプの装置に使用するプログラムとマルチＣＰＵタイプの装置に使用するプログラムとの共通化も容易となる。
【００２９】
ところで、［背景技術］の欄で述べたように、一般に、同時性の必要なデータを参照して演算するデータ参照処理では、その処理の開始時に割り込みを禁止し、その処理の終了時に割り込みを許可するようにプログラムが設計される。
【００３０】
そこで、請求項２に記載のように、第２ＣＰＵでは、データ参照処理の開始時に割り込みを禁止し、そのデータ参照処理の終了時に割り込みを許可するようになっているのであれば、第２転送手段は、第２ＣＰＵが割り込み許可状態であるか否かを監視して、割り込み許可状態であれば、その第２ＣＰＵにおいてデータ参照処理が実行されていないと判断するように構成することができる。
【００３１】
そして、この場合、第２転送手段をハードウェアで構成したならば、第２ＣＰＵで実行されるデータ参照処理のプログラムとして、シングルＣＰＵタイプの場合のプログラムと同じものを用いることができるようになる。
【００３２】
次に、請求項３のＣＰＵ間データ転送装置では、請求項１，２のＣＰＵ間データ転送装置において、転送用メモリは、当該転送用メモリから第２メモリへのデータ書き込みが行われると、記憶データが消去されるようになっている。そして、第２転送手段は、転送用メモリ内にデータがあり、且つ、第２ＣＰＵにおいてデータ参照処理が実行されていないことを検知すると、転送用メモリから第２メモリへ複数種類のデータを書き込むようになっている。
【００３３】
このような請求項３のＣＰＵ間データ転送装置によれば、第１ＣＰＵ側でデータ更新処理が実行された場合（即ち、複数種類のデータが更新された場合）にだけ、その更新後の最新のデータが転送用メモリから第２メモリへ書き込まれることとなる。よって、転送用メモリから第２メモリへのデータ書き込み頻度を必要最小限にすることができる。
【００３４】
また、請求項４のＣＰＵ間データ転送装置では、請求項２のＣＰＵ間データ転送装置において、第１ＣＰＵは、データ更新処理の終了時に、第２ＣＰＵに対して割り込み要求を発行するようになっており、第２ＣＰＵは、第１ＣＰＵからの割り込み要求により起動される特定の割り込みルーチンにより、転送用メモリから第２メモリへ前記複数種類のデータを書き込む処理を行うようになっている。よって、第２転送手段の機能は、第２ＣＰＵが前記特定の割り込みルーチンを実行することで実現される。
【００３５】
このようなＣＰＵ間データ転送装置では、第１ＣＰＵ側でデータ更新処理が実行されると、そのデータ更新処理の終了時に、第１ＣＰＵから第２ＣＰＵへ割り込み要求が発行される。そして、その割り込み要求が発行された時に、もし第２ＣＰＵがデータ参照処理の実行中で割り込み禁止状態ならば、その第２ＣＰＵにて、データ参照処理が終了し割り込み許可状態になった時点で特定の割り込みルーチンが実行されて、転送用メモリから第２メモリへのデータ書き込みが行われる。また、第１ＣＰＵから割り込み要求が発行された時に、第２ＣＰＵがデータ参照処理の実行中でなく割り込み許可状態ならば、その割り込み要求が発行された時点で、第２ＣＰＵにて特定の割り込みルーチンが実行され、転送用メモリから第２メモリへのデータ書き込みが行われることとなる。
【００３６】
そして、このような請求項４のＣＰＵ間データ転送装置によっても、請求項３のＣＰＵ間データ転送装置と同様の効果を得ることができる。つまり、第１ＣＰＵ側でデータ更新処理が実行されて複数種類のデータが更新された場合にだけ、その更新後の最新のデータが転送用メモリから第２メモリへ書き込まれることとなり、転送用メモリから第２メモリへのデータ書き込み頻度を必要最小限にすることができる。
【００３７】
一方、請求項１〜４のＣＰＵ間データ転送装置において、第１転送手段は、請求項５に記載のように、第１ＣＰＵがデータ更新処理の開始時に実行する特定の命令によって起動されるように構成することができる。
【００３８】
このような構成によれば、第１ＣＰＵで実行されるデータ更新処理のプログラム中に前記特定の命令を設けるだけで、第１転送手段を起動させることができる。このため、第１ＣＰＵで実行されるデータ更新処理のプログラムを、シングルＣＰＵタイプの場合のデータ更新処理のプログラムを流用して簡単に作成することができるようになる。
【００３９】
次に、請求項６のＣＰＵ間データ転送装置では、請求項５のＣＰＵ間データ転送装置において、第１ＣＰＵでは、データ更新処理の開始時に割り込みを禁止し、そのデータ更新処理の終了時に割り込みを許可するようになっている。更に、第１ＣＰＵでは、割り込み禁止処理用の関数がコールされると、割り込みを禁止する処理と、第１転送手段を起動する処理とが実行されるようになっている。
【００４０】
そして、第１転送手段は、第１ＣＰＵにてデータ更新処理の開始時に前記割り込み禁止処理用の関数がコールされることで起動されるようになっている。つまり、第１ＣＰＵにおいて、データ更新処理の開始時に割り込み禁止処理用の関数がコールされると、割り込みを禁止する処理と第１転送手段を起動する処理とが実行されるからである。
【００４１】
このような請求項６のＣＰＵ間データ転送装置によれば、第１ＣＰＵで実行されるデータ更新処理のプログラムとして、シングルＣＰＵタイプの場合のデータ更新処理のプログラムをそのまま流用することが可能となる。データ更新処理のプログラムとして、最初に割り込み禁止処理用の関数をコールする部分はシングルＣＰＵタイプの場合であっても同じであるからである。
【００４２】
次に、請求項７のＣＰＵ間データ転送装置では、請求項１のＣＰＵ間データ転送装置において、２つのＣＰＵのうち、少なくとも第２ＣＰＵでは、各処理のタスクがオペレーティングシステム（以下、ＯＳという）上で実行されるようになっている。
【００４３】
更に、第２ＣＰＵでは、ＯＳが実行対象のタスクを切り替える際に、そのＯＳの処理として、転送用メモリから第２メモリへ前記複数種類のデータを書き込む書込処理が行われるようになっている。よって、第２転送手段の機能は、第２ＣＰＵのＯＳによって実現される。
【００４４】
このようなＣＰＵ間データ転送装置によれば、第２転送手段に相当するハードウェアを設ける必要がなくなると共に、第２ＣＰＵで実行される各タスクのプログラム（アプリケーションプログラム）としては、シングルＣＰＵタイプの場合と同じプログラムを用いることが可能となる。第２転送手段に関連する機能をＯＳが受け持つことにより、その機能がアプリケーションプログラムにとっては隠蔽されるからである。
【００４５】
次に、請求項８のＣＰＵ間データ転送装置では、請求項７のＣＰＵ間データ転送装置において、転送用メモリは、当該転送用メモリから第２メモリへのデータ書き込みが行われると、記憶データが消去されるようになっている。そして、第２ＣＰＵにおいて、前記書込処理は、ＯＳが実行対象のタスクを切り替える際に、転送用メモリ内にデータがあれば行われるようになっている。
【００４６】
このような請求項８のＣＰＵ間データ転送装置によれば、請求項３のＣＰＵ間データ転送装置と同様に、第１ＣＰＵ側でデータ更新処理が実行された場合（即ち、複数種類のデータが更新された場合）にだけ、その更新後の最新のデータが転送用メモリから第２メモリへ書き込まれることとなる。よって、前記書込処理の実行頻度を必要最小限にすることができる。
【００４７】
次に、請求項９のＣＰＵ間データ転送装置では、請求項７，８のＣＰＵ間データ転送装置において、第１ＣＰＵでは、各処理のタスクがＯＳ上で実行されるようになっていると共に、データ更新処理のタスクの開始時にタスク切り替えを禁止し、そのタスクの終了時にタスク切り替えを許可するようになっている。尚、ＯＳを備えたＣＰＵにおけるタスク切り替えの禁止は、ＯＳを備えないＣＰＵでの割り込み禁止と同様の役割を果たすものであり、ＯＳを備えたＣＰＵにおけるタスク切り替えの許可は、ＯＳを備えないＣＰＵでの割り込み許可と同様の役割を果たすものである。
【００４８】
更に、第１ＣＰＵでは、データ更新処理のタスクの開始時にて、タスク切り替え禁止処理用の関数がコールされると、ＯＳによりタスク切り替えの禁止と第１転送手段の起動とが行われるようになっている。
【００４９】
このような請求項９のＣＰＵ間データ転送装置によれば、第１ＣＰＵで実行されるデータ更新処理のタスクのプログラムとして、シングルＣＰＵタイプの場合におけるデータ更新処理のタスクのプログラムをそのまま流用することが可能となる。第１転送手段を起動する機能をＯＳが受け持つことにより、その機能がアプリケーションプログラムにとっては隠蔽されるからであり、データ更新処理のタスクのプログラムとして、最初にタスク切り替え禁止処理用の関数をコールする部分はシングルＣＰＵタイプの場合であっても同じであるからである。
【発明を実施するための最良の形態】
【００５０】
以下に、本発明が適用された実施形態の電子制御装置について説明する。尚、本実施形態の電子制御装置は、例えば自動車に搭載された内燃機関型の多気筒（この例では４気筒）エンジンを制御するものである。そして、以下では、この電子制御装置のことを、エンジン制御ＥＣＵ、或いは単にＥＣＵという。
［第１実施形態］
図１に示すように、第１実施形態のエンジン制御ＥＣＵ３は、２つのＣＰＵ１，２を備えている。
【００５１】
そして、ＣＰＵ１は、各種演算を行う演算器（ＡＬＵ）２１と、演算結果が記憶されるＲＡＭ２３と、プログラムや固定のデータが記憶されるＲＯＭ２５と、割り込みを制御する割り込み制御部２７と、Ａ／Ｄコンバータ２９とを備えている。また、ＣＰＵ２は、ＣＰＵ１と同様の、演算器３１、ＲＡＭ３３、ＲＯＭ３５、及び割り込み制御部３７に加えて、タイマ４１，４３，４５，４７を備えている。
【００５２】
更に、ＥＣＵ３には、ＣＰＵ１のＲＡＭ２３とＣＰＵ２のＲＡＭ３３との間で複数種類のデータを転送するためのＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）型のバッファレジスタ（以下、ＦＩＦＯバッファという）５１と、そのＦＩＦＯバッファ５１の書き込み及び読み出しを制御するＦＩＦＯコントローラ５３とが備えられている。
【００５３】
また、ＥＣＵ３には、エンジンの冷却水温を検出するための水温センサ５と、エンジンの吸入空気温を検出するための吸気温センサ７と、エンジンの各気筒に燃料を噴射供給するインジェクタ１１，１３，１６，１７とが接続されている。
【００５４】
このＥＣＵ３においては、水温センサ５からの信号と吸気温センサ７からの信号とがＣＰＵ１のＡ／Ｄコンバータ２９によって一定時間毎にＡ／Ｄ変換され、そのＡ／Ｄ変換値（即ち、エンジン水温と吸入空気温との各データ）は、ＣＰＵ１のＲＡＭ２３に更新記憶される。そして、そのＲＡＭ２３に更新記憶されたデータは、ＦＩＦＯバッファ５１を通じてＣＰＵ２のＲＡＭ３３にもコピーされる。
【００５５】
また、ＣＰＵ２では、インジェクタ１１〜１７の制御を行っており、ＦＩＦＯバッファ５１からＲＡＭ３３にコピーされたエンジン水温と吸入空気温との各データを用いて各インジェクタ１１〜１７への通電時間（即ち、燃料噴射量）を演算し、その演算した時間をタイマ４１〜４７にセットする。すると、タイマ４１〜４７にセットされた時間だけインジェクタ１１〜１７へ通電され、そのインジェクタ１１〜１７から各気筒へ燃料が噴射される。
【００５６】
つまり、本実施形態のＥＣＵ３において、ＣＰＵ１は、自分側の処理で更新したエンジン水温や吸入空気温等のデータを自分のＲＡＭ２３にだけ更新記憶し、また、ＣＰＵ２は、ＣＰＵ１によって更新されるデータを、ＣＰＵ１のＲＡＭ２３から直接読み出すのではなく、自分のＲＡＭ３３から読み出すようになっており、各ＣＰＵ１，２は他方のＣＰＵのＲＡＭをアクセスしないようになっている。このため、本実施形態のＥＣＵ３では、ＣＰＵ１のＲＡＭ２３に更新記憶されるデータを、ＦＩＦＯバッファ５１を通して、ＣＰＵ２のＲＡＭ３３にも更新記憶する構成としている。
【００５７】
そこで次に、こうしたＦＩＦＯバッファ５１を介したＣＰＵ１，２間のデータ転送について、ＣＰＵ１のＲＡＭ２３からＣＰＵ２のＲＡＭ３３へ、エンジン水温と吸入空気温のデータが転送される場合を例に挙げて、図２，３を用い説明する。尚、図２は、処理及びデータの流れを説明する説明図であり、図３は、ＦＩＦＯバッファ５１及びＦＩＦＯコントローラ５３を説明する説明図である。
【００５８】
まず、図２に示すように、ＥＣＵ３では、前述した図７の例と同様に、ＣＰＵ１が、センサ処理関数を実行することにより、水温センサからの信号と吸気温センサからの信号とをそれぞれＡ／Ｄ変換してエンジン水温と吸入空気温との各データを更新し、ＣＰＵ２が、噴射量算出関数を実行することにより、ＣＰＵ１が更新したエンジン水温と吸入空気温との各データを用いて燃料噴射量を算出する。このため、ＣＰＵ２側の噴射量算出関数で参照されるエンジン水温と吸入空気温との各データは、同時性の必要なデータである。尚、ＣＰＵ１側のセンサ処理関数は一定時間毎に実行され、ＣＰＵ２側の噴射量算出関数は、エンジンの回転に同期して所定クランク角のタイミングで実行される。
【００５９】
そして、図２に示すように、ＣＰＵ１側のセンサ処理関数では、まず、割り込み禁止処理用の関数をコールすることで、割り込み禁止の処理を行う（Ｓ１１０）。
ここで、ＣＰＵ１，２のプログラムでは、少なくとも割り込み禁止処理用の関数と、割り込み許可処理用の関数とのそれぞれに対して実行されるべき命令がライブラリ化されている。そして、ＣＰＵ１においては、割り込み禁止処理用の関数がコールされると、割り込みを禁止する命令と、ＦＩＦＯバッファ５１へのデータ書き込みを許可する命令とが実行されるようになっている。このため、ＣＰＵ１にてセンサ処理関数が開始されると、ＦＩＦＯバッファ５１へのデータ書き込みが許可される（Ｓ１１０）。
【００６０】
次に、ＣＰＵ１側のセンサ処理関数では、水温センサからの信号をＡ／Ｄ変換して、そのデータであるエンジン水温のデータをＲＡＭ２３に更新記憶すると共に（Ｓ１２０）、吸気温センサからの信号をＡ／Ｄ変換して、そのデータである吸入空気温のデータをＲＡＭ２３に更新記憶する（Ｓ１３０）。図２の例では、エンジン水温のデータが８０℃から９０℃に更新され、吸入空気温のデータが２０℃から２５℃に更新されている。
【００６１】
また、この時、ＦＩＦＯバッファ５１へのデータ書き込みが許可されているため、ＣＰＵ１のＲＡＭ２３にデータが書き込まれると、そのデータと同じデータが、後述するＦＩＦＯコントローラ５３によってＦＩＦＯバッファ５１に書き込まれる。具体的には、図２の中央に示すように、ＦＩＦＯバッファ５１には、ＲＡＭ２３に書き込まれたデータ毎に、そのデータと、そのデータのサイズ（バイト数）と、そのデータが書き込まれたＲＡＭ２３のアドレス（詳しくは先頭アドレス）とが、セットで書き込まれる。
【００６２】
そして、上記Ｓ１３０でＲＡＭ２３へのデータ書き込みが終了すると、それと同時に、ＦＩＦＯバッファ５１へのデータ書き込みも終了する。
その後、ＣＰＵ１側のセンサ処理関数では、最後に、割り込み許可処理用の関数をコールすることで、割り込み許可の処理を行う（Ｓ１４０）。
【００６３】
尚、ＣＰＵ１において、割り込み許可処理用の関数に対しては、実行されるべき命令として、割り込みを許可する命令と、ＦＩＦＯバッファ５１へのデータ書き込みを禁止する命令とがライブラリ化されている。このため、センサ処理関数の最後で割り込み許可処理用の関数がコールされると、割り込みが許可されると共に、ＦＩＦＯバッファ５１へのデータ書き込みが禁止される。また、センサ処理関数において、最初のＳ１１０で割り込みを禁止し、最後のＳ１４０で割り込みを許可するようにしているのは、［背景技術］の欄で述べた理由による。
【００６４】
一方、ＣＰＵ２側の噴射量算出関数では、まず、割り込み禁止処理用の関数をコールすることで、割り込み禁止の処理を行う（Ｓ２１０）。
次に、ＣＰＵ２は、自分のＲＡＭ３３からエンジン水温と吸入空気温との各データを読み出し（Ｓ２２０，Ｓ２３０）、その各データを用いて燃料噴射量を算出する。
【００６５】
その後、割り込み許可処理用の関数をコールすることで、割り込み許可の処理を行い（Ｓ２４０）、これでＣＰＵ２側の噴射量算出関数が終了する。
尚、ＣＰＵ２側の噴射量算出関数では、Ｓ２１０で割り込み禁止処理用の関数がコールされると、割り込みを禁止する命令だけが実行され、Ｓ２４０で割り込み許可処理用の関数がコールされると、割り込みを許可する命令だけが実行される。また、この噴射量算出関数においても、最初のＳ２１０で割り込みを禁止し、最後のＳ２４０で割り込みを許可するようにしているのは、［背景技術］の欄で述べた理由による。
【００６６】
ここで更に、本実施形態において、ＦＩＦＯバッファ５１は、そのＦＩＦＯバッファ５１からＣＰＵ２のＲＡＭ３３へのデータ書き込みが行われると、記憶データが消去されるようになっている。そして、ＦＩＦＯコントローラ５３は、ＦＩＦＯバッファ５１内にデータがあるか否かと、ＣＰＵ２が割り込み許可状態であるか否かとを監視しており、ＦＩＦＯバッファ５１内にデータがあり、且つ、ＣＰＵ２が割り込み許可状態であれば、ＦＩＦＯバッファ５１からＣＰＵ２のＲＡＭ３３へデータをコピーするようになっている。
【００６７】
つまり、ＣＰＵ２が割り込み禁止状態であれば、ＣＰＵ２が同時性の必要なデータを参照している状態（噴射量算出関数の実行中）である可能性があるため、ＦＩＦＯバッファ５１からＣＰＵ２へのＲＡＭ３３へのコピーは行わず、ＣＰＵ２が割込み許可状態であれば、ＣＰＵ２が同時性の必要なデータを参照している状態では無い（噴射量算出関数の実行中ではない）と判断して、ＦＩＦＯバッファ５１からＣＰＵ２のＲＡＭ３３へのコピーを行う仕組みになっている。
【００６８】
次に、ＦＩＦＯコントローラ５３について、図３を用い説明する。
図３に示すように、ＦＩＦＯコントローラ５３は、ライトアクセス検出器５５と、ライトコントロール部５７と、アンド回路５９とを備えている。
【００６９】
そして、ＦＩＦＯコントローラ５３では、ＣＰＵ１にてＦＩＦＯバッファ５１へのデータ書き込みを許可する命令（以下、書き込み許可命令ともいう）が実行されると（Ｓ１１０）、当該ＦＩＦＯコントローラ５３のイネーブル端子にアクティブレベルの信号（この例ではハイ信号）が入力され、その信号により、ライトアクセス検出器５５が起動する。そして、ライトアクセス検出器５５が起動することにより、当該ＦＩＦＯコントローラ５３では、ＣＰＵ１のＲＡＭ２３に書き込まれたデータをＦＩＦＯバッファ５１へ書き込む機能が起動することとなる。よって、上記イネーブル端子は、ライトアクセス検出器５５のイネーブル端子であるとも言える。
【００７０】
ライトアクセス検出器５５は、上記書き込み許可命令の実行によって起動すると、ＣＰＵ１がＲＡＭ２３をアクセスする際に出力するメモリアクセス信号と、そのアクセスがリード（Ｒ）とライト（Ｗ）との何れであるかを示すＲ／Ｗ信号とを監視し、メモリアクセス信号がアクティブレベル（この例ではハイレベル）となり、且つ、Ｒ／Ｗ信号がライトを示す方のレベル（この例ではハイレベル）であれば、ＣＰＵ１にてＲＡＭ２３にライトアクセスしている（即ち、ＲＡＭ２３にデータを書き込んでいる）と判断する。
【００７１】
そして、ライトアクセス検出器５５は、このようにしてＲＡＭ２３へのライトアクセスを検知すると、ＣＰＵ１における内部バスをトレースして、その内部バス上に出力されているデータと、データサイズと、書き込み先アドレスとを、ＦＩＦＯバッファ５１に書き込む。このため、前述したように、ＦＩＦＯバッファ５１には、図２のセンサ処理関数のＳ１２０とＳ１３０とでＲＡＭ２３に書き込まれたデータ毎に、そのデータと、そのデータのサイズと、そのデータが書き込まれたＲＡＭ２３のアドレスとが、セットで書き込まれることとなる。
【００７２】
また、ＦＩＦＯコントローラ５３では、ＣＰＵ１にてＦＩＦＯバッファ５１へのデータ書き込みを禁止する命令が実行されると（Ｓ１４０）、当該ＦＩＦＯコントローラ５３のイネーブル端子に非アクティブレベルの信号（この例ではロー信号）が入力されて、ライトアクセス検出器５５の動作が停止する。そして、ライトアクセス検出器５５の動作が停止することにより、当該ＦＩＦＯコントローラ５３は、ＦＩＦＯバッファ５１へのデータ書き込み禁止状態となる。つまり、ＣＰＵ１のＲＡＭ２３に書き込まれたデータをＦＩＦＯバッファ５１へ書き込む機能が停止する。
【００７３】
一方、ＦＩＦＯコントローラ５３のアンド回路５９には、ＦＩＦＯバッファ５１の状態ビットと、ＣＰＵ２の割り込み禁止状態ビットとが入力されている。
ＦＩＦＯバッファ５１の状態ビットは、ＦＩＦＯバッファ５１内にデータがあれば０となり、データがなければ１となる。そして、この状態ビットは、ＦＩＦＯバッファ５１内のデータを監視する監視回路（図示省略）によって出力され、その監視回路は、例えば、ＦＩＦＯバッファ５１内の全ビットが全て同じならば、状態ビットとして空を示す１を出力する。
【００７４】
また、ＣＰＵ２の割り込み禁止状態ビットは、ＣＰＵ２の内部状態を表す状態レジスタ（図示省略）の１ビットであり、ＣＰＵ２が割り込み許可状態であれば０にセットされ、割り込み禁止状態であれば１にセットされる。尚、状態レジスタは、ＣＰＵ２の割り込み制御部３７内に設けられている。
【００７５】
そして、アンド回路５９は、ＦＩＦＯバッファ５１の状態ビットとＣＰＵ２の割り込み禁止状態ビットとを監視し、その両ビットが０であれば、ＦＩＦＯバッファ５１内にデータがあり、且つ、ＣＰＵ２が割り込み許可状態であると判断して、ライトコントロール部５７を起動させる（イネーブル状態にする）。
【００７６】
ライトコントロール部５７は、アンド回路５９により起動されると（イネーブル状態になると）、ＣＰＵ２のＲＡＭ３３にライトアクセスして、ＦＩＦＯバッファ５１に記憶されている各データをそのＲＡＭ３３に書き込む。具体的には、ＦＩＦＯバッファ５１に記憶されている各データを、そのデータと共に記憶されているデータサイズ及びアドレスを基にして、ＣＰＵ１側のＲＡＭ２３における格納アドレスと同じアドレスに書き込む。尚、ＦＩＦＯバッファ５１内のデータは、このようにしてＲＡＭ３３への書き込みが実施されると消去され、その結果、ＦＩＦＯバッファ５１の状態ビットは０から１になる。そして、その後、ライトアクセス検出器５５によってＦＩＦＯバッファ５１にデータが書き込まれると、ＦＩＦＯバッファ５１の状態ビットは再び１から０になる。
【００７７】
以上のようなＥＣＵ３において、例えば図２のように、ＣＰＵ１側でセンサ処理関数が実行されている時に、ＣＰＵ２側で噴射量算出関数が開始された場合、ＦＩＦＯバッファ５１には、今回のセンサ処理関数でＣＰＵ１のＲＡＭ２３に更新記憶されるのと同じ複数種類のデータ（エンジン水温のデータと吸入空気温のデータ）がＦＩＦＯコントローラ５３のライトアクセス検出器５５により書き込まれるが、ＣＰＵ２は割り込み禁止状態であるため、ＦＩＦＯコントローラ５３のライトコントロール部５７は作動しない。このため、ＣＰＵ２のＲＡＭ３３には前回のセンサ処理関数で更新されたデータ（図２の例では、水温＝８０℃，吸入空気温＝２０℃）が記憶されていることとなり、ＣＰＵ２は、その前回更新のデータをＲＡＭ３３から読み出して燃料噴射量を演算することとなる。つまり、ＣＰＵ２側の噴射量算出関数は停止することなく実行される。
【００７８】
そして、ＣＰＵ２において噴射量算出関数が終了し、ＣＰＵ２が割り込み許可状態になると（Ｓ２４０）、ＦＩＦＯコントローラ５３のライトコントロール部５７が起動して、ＦＩＦＯバッファ５１からＣＰＵ２のＲＡＭ３３へ、今回のセンサ処理関数で更新された最新のデータ（図２の例では、水温＝９０℃，吸入空気温＝２５℃）が書き込まれることとなり、その後、再びＣＰＵ２側で噴射量算出関数の実行が開始された場合には、ＣＰＵ２は、その最新のデータをＲＡＭ３３から読み出して燃料噴射量を演算することとなる。
【００７９】
また、ＣＰＵ１側でセンサ処理関数が実行されて、ＦＩＦＯバッファ５１へ今回更新されたデータが書き込まれた際に、ＣＰＵ２側で噴射量算出関数が実行されておらず該ＣＰＵ２が割り込み許可状態であれば、ＦＩＦＯコントローラ５３のライトコントロール部５７がすぐに起動して、ＦＩＦＯバッファ５１からＣＰＵ２のＲＡＭ３３へ今回更新された最新のデータが書き込まれることとなる。そして、その後、ＣＰＵ２側で噴射量算出関数の実行が開始されると、ＣＰＵ２は、その最新のデータをＲＡＭ３３から読み出して燃料噴射量を演算することとなる。
【００８０】
このような本実施形態のＥＣＵ３によれば、ＣＰＵ２側で演算に用いる複数種類のデータが同じタイミングで更新されたものでなければならないというデータの同時性を確保しつつ、データを参照する側のＣＰＵ２を待機させてしまうことがない。具体的には、ＣＰＵ１側のセンサ処理関数により同時性の必要なデータ（エンジン水温のデータと吸入空気温のデータ）が更新されている最中でも、ＣＰＵ２側で噴射量算出関数の実行を進めることができる。よって、処理効率を良好にすることができる。
【００８１】
尚、ＣＰＵ１側で更新した水温のデータと吸入空気温のデータがＣＰＵ２のＲＡＭに書き込まれるタイミングは、図７の例では、センサ処理関数の実行開始時からそれぞれ約３００μｓと約４５０μｓの時点であるのに対して、図２の例では、センサ処理関数の実行開始時から約６００μｓの時点となり、ＣＰＵ２のＲＡＭ内のデータが更新されるまでの時間は図２の例の方が長くなってしまうように見える。しかし、ＣＰＵ２側で実際に水温＝９０℃、吸入空気温＝２５℃という最新のデータを参照可能となるまでの時間は、図７の例が約８００μｓの時点であるのに対し、図２の例では約６５０μｓの時点となり、実使用上はアクセス権の調停による待ち合わせが無い方が高速に最新のデータを利用できるようになる。
【００８２】
更に、本実施形態によれば、図７の例のように２つのＣＰＵがＲＡＭへのアクセス権を取り合うことがなく、両ＣＰＵ１，２がデッドロック状態になってしまう心配がないため、各ＣＰＵ１，２に実行させるアプリケーションプログラムの設計が容易になる。
【００８３】
具体的には、センサ処理関数のプログラム中や、噴射量算出関数のプログラム中に、図７におけるＳ１２，Ｓ１５やＳ２２のようなＲＡＭへのアクセス権を取得するための命令を挿入する必要がないため、シングルＣＰＵタイプのＥＣＵに使用していた既存のプログラムをマルチＣＰＵタイプのＥＣＵへ流用することが容易になり、また、シングルＣＰＵタイプのＥＣＵに使用するプログラムとマルチＣＰＵタイプのＥＣＵに使用するプログラムとの共通化も容易となる。
【００８４】
特に、本実施形態では、ＦＩＦＯコントローラ５３のライトコントロール部５７及びアンド回路５９が、ＣＰＵ２が割り込み許可状態であるか否かを監視し、割り込み許可状態であれば、ＣＰＵ２にて噴射量算出関数が実行されていないと判断して、ＦＩＦＯバッファ５１からＲＡＭ３３へのデータ書き込みを行うようにしているため、ＣＰＵ２で実行される噴射量算出関数のプログラムとして、シングルＣＰＵタイプの場合のプログラムと全く同じものを用いることができるようになる。
【００８５】
また、本実施形態において、ＣＰＵ１側では、割り込み禁止処理用の関数がコールされると、割り込みを禁止する命令と、ＦＩＦＯバッファ５１へのデータ書き込みを許可する書き込み許可命令（ライトアクセス検出器５５を起動させる命令）とが実行され、割り込み許可処理用の関数がコールされると、割り込みを許可する命令と、ＦＩＦＯバッファ５１へのデータ書き込みを禁止する命令（ライトアクセス検出器５５の動作を停止させる命令）とが実行されるように、関数のライブラリが設定されている。そして、ライトアクセス検出器５５は、ＣＰＵ１にてセンサ処理関数の実行開始時に割り込み禁止処理用の関数がコールされることで起動され（Ｓ１１０）、そのセンサ処理関数の実行終了時に割り込み許可処理用の関数がコールされることで動作を停止するようになっている（Ｓ１４０）。
【００８６】
このため、ＣＰＵ１で実行されるセンサ処理関数のプログラムとしても、シングルＣＰＵタイプの場合のセンサ処理関数のプログラムをそのまま流用することが可能となる。センサ処理関数のプログラムとして、最初に割り込み禁止処理用の関数をコールする部分と、最後に割り込み許可用の関数をコールする部分は、シングルＣＰＵタイプの場合であっても同じであるからである。つまり、アプリケーションプログラムを変更しなくても、予め実装する関数のライブラリを変更するだけで、マルチＣＰＵタイプに対応することができる。
【００８７】
尚、ライブラリを変更せずに、アプリケーションプログラムを変更するようにしても良い。具体的には、図２のＳ１１０とＳ１２０との間に、ライトアクセス検出器５５を起動させる命令を挿入し、図２のＳ１３０とＳ１４０との間に、ライトアクセス検出器５５動作を停止させる命令を挿入しても良い。このような変更をする場合でも、両ＣＰＵ１，２がデッドロック状態になってしまう心配はないため、ＣＰＵ１で実行されるセンサ処理関数のプログラムを、シングルＣＰＵタイプの場合のプログラムを流用して簡単に作成することができる。
【００８８】
また更に、本実施形態において、ＦＩＦＯコントローラ５３のライトコントロール部５７及びアンド回路５９は、ＦＩＦＯバッファ５１内にデータがなければ、ＦＩＦＯバッファ５１からＲＡＭ３３へのデータ書き込みを実施しないようになっているため、そのデータ書き込みの頻度を必要最小限にすることができる。
【００８９】
尚、上記第１実施形態では、ＣＰＵ１が第１ＣＰＵに相当し、そのＣＰＵ１のＲＡＭ２３が第１メモリに相当し、そのＣＰＵ１で実行されるセンサ処理関数がデータ更新処理に相当している。また、ＣＰＵ２が第２ＣＰＵに相当し、そのＣＰＵ２のＲＡＭ３３が第２メモリに相当し、そのＣＰＵ２で実行される噴射量算出関数がデータ参照処理に相当している。そして、ＦＩＦＯバッファ５１が転送用メモリに相当し、ＦＩＦＯコントローラ５３のライトアクセス検出器５５が第１転送手段に相当し、ＦＩＦＯコントローラ５３のライトコントロール部５７及びアンド回路５９が第２転送手段に相当している。
［第２実施形態］
次に、第２実施形態のＥＣＵについて説明する。
【００９０】
第２実施形態のＥＣＵは、第１実施形態のＥＣＵ３と比較すると、下記の２点が異なっている。
まず、第１の相違点として、図４に示すように、ＦＩＦＯコントローラ５３からライトコントロール部５７とアンド回路５９が削除されている。
【００９１】
そして、第２の相違点として、ＦＩＦＯバッファ５１からＣＰＵ２のＲＡＭ３３へのデータ書き込み（データコピー）を、ＣＰＵ２側の割り込みルーチンによって実施している。
【００９２】
詳しく説明すると、まず、ＣＰＵ１は、センサ処理関数の終了時におけるＳ１４０にて、ＣＰＵ２に対し割り込み要求（ＩＲＱ）を発行するようになっている。
具体的には、ＣＰＵ１において、割り込み許可処理用の関数に対しては、実行されるべき命令として、割り込みを許可する命令と、ＦＩＦＯバッファ５１へのデータ書き込みを禁止する命令（ライトアクセス検出器５５の動作を停止させる命令）とに加え、更に、ＣＰＵ２へ割り込み要求を発行する命令とがライブラリ化されている。このため、センサ処理関数の最後で割り込み許可処理用の関数がコールされると、割り込みが許可されると共に、ＦＩＦＯバッファ５１へのデータ書き込みが禁止され、更に、ＣＰＵ１からＣＰＵ２へ割り込み要求が発行される。尚、この割り込み要求は、例えば、ＣＰＵ１からＣＰＵ２への割り込み要求信号であって、ＣＰＵ２にて入力信号にエッジが生じると割り込みが発生することとなる割り込み入力端子への信号である。
【００９３】
そして、ＣＰＵ２側では、そのＣＰＵ１からの割り込み要求により起動される割り込みルーチン（以下、データコピー用割り込みルーチンという）により、ＦＩＦＯバッファ５１からＲＡＭ３３へデータを書き込む処理を行う。
【００９４】
このような第２実施形態のＥＣＵでは、ＣＰＵ１側でセンサ処理関数が実行されると、そのセンサ処理関数の終了時に、ＣＰＵ１からＣＰＵ２へ割り込み要求が発行される。
そして、その割り込み要求が発行された時に、もしＣＰＵ２が噴射量算出関数の実行中で割り込み禁止状態ならば、そのＣＰＵ２にて、噴射量算出関数が終了し割り込み許可状態になった時点で、割り込み制御部３７によりデータコピー用割り込みルーチンが起動される。そして、そのデータコピー用割り込みルーチンにより、ＦＩＦＯバッファ５１からＲＡＭ３３へのデータ書き込みが行われる。また、ＣＰＵ１からＣＰＵ２へ割り込み要求が発行された時に、ＣＰＵ２が噴射量算出関数の実行中でなく割り込み許可状態ならば、その割り込み要求が発行された時点で、割り込み制御部３７によりデータコピー用割り込みルーチンが起動され、ＦＩＦＯバッファ５１からＲＡＭ３３へのデータ書き込みが行われることとなる。尚、こうした割り込みルーチンの起動制御を行う割り込み制御部３７は周知のものである。
【００９５】
以上のような第２実施形態によれば、第１実施形態と比較すると、ＣＰＵ１側のセンサ処理関数でＣＰＵ２へ割り込み要求が発行されるようにし、ＣＰＵ２側にはデータコピー用割り込みルーチンを用意する、という追加の設定を行うだけで、前述した第１実施形態の効果と同様の効果を得ることができる。
【００９６】
尚、上記第２実施形態では、割り込み制御部３７及びデータコピー用割り込みルーチンが第２転送手段に相当する。
［第３実施形態］
上記第１及び第２実施形態では、データを参照する側のＣＰＵ２にＯＳが搭載されていない場合でもＦＩＦＯバッファ５１からＲＯＭ３３へのデータ書き込みを適切に実施可能にするために、そのデータ参照側のＣＰＵ２が割り込み許可状態か否かでＦＩＦＯバッファ５１からＲＯＭ３３へのデータ書き込みを行うか否かが決定されるように構成していたが、少なくともデータ参照側のＣＰＵ２にＯＳが搭載される場合には、ＦＩＦＯバッファ５１からＲＯＭ３３へデータを書き込む機能にＯＳを利用することができる。
【００９７】
そこで次に、第３実施形態のＥＣＵについて図５及び図６を用い説明する。
第３実施形態のＥＣＵは、第１実施形態のＥＣＵ３と比較すると、下記の（１）〜（５）の点が異なっている。
（１）ＣＰＵ１，２には、ＯＳとして、複数のタスクを並行して実行することも可能なＲＴＯＳ（リアルタイムＯＳ）が搭載されている。このため、ＣＰＵ１，２では、各処理のタスクがＲＴＯＳ上で実行される。
（２）図６に示すように、ＦＩＦＯコントローラ５３からライトコントロール部５７とアンド回路５９が削除されている。尚、この点は、第２実施形態と同じである。
（３）図５に示すように、ＣＰＵ１側では、図２のセンサ処理関数に相当するタスクとして、センサ処理タスク（データ更新処理のタスクに相当）が実行される。尚、図５において二重線の四角枠で囲まれた処理は、ＲＴＯＳのシステムコール（関数）によって実施される処理あることを示しており、そのシステムコールをコールする（呼び出す）のはアプリケーションプログラムである。
【００９８】
そして、ＣＰＵ１で実行されるセンサ処理タスクでは、まずＳ３００にて、タスク起床用のシステムコールをコールして、当該センサ処理タスクを起床させ、次のＳ３１０にて、タスク切り替え禁止用のシステムコール（タスク切り替え禁止処理用の関数に相当）をコールして、タスク切り替えを禁止させる。
【００９９】
ここで、本第３実施形態において、ＣＰＵ１側では、タスク切り替え禁止用のシステムコールがコールされると、ＲＴＯＳの処理として、タスク切り替えの禁止処理が行われると共に、ＦＩＦＯバッファ５１への書き込みを許可する処理も実行され、その許可処理により、第１実施形態と同様に、ＦＩＦＯコントローラ５３のイネーブル端子にアクティブレベルの信号が入力されて、ライトアクセス検出器５５が起動するようになっている（図６参照）。
【０１００】
次に、センサ処理タスクでは、Ｓ３２０にて、水温センサからの信号をＡ／Ｄ変換して、そのデータ（エンジン水温のデータ）をＲＡＭ２３に更新記憶し、Ｓ３３０にて、吸気温センサからの信号をＡ／Ｄ変換して、そのデータ（吸入空気温のデータ）をＲＡＭ２３に更新記憶する。
【０１０１】
すると、この時、ＦＩＦＯバッファ５１へのデータ書き込みが許可されている（即ち、ライトアクセス検出器５５が起動中である）ため、ＣＰＵ１のＲＡＭ２３にデータが書き込まれると、そのデータと同じデータがライトアクセス検出器５５によってＦＩＦＯバッファ５１に書き込まれる。そして、上記Ｓ３３０でＲＡＭ２３へのデータ書き込みが終了すると、それと同時に、ＦＩＦＯバッファ５１へのデータ書き込みも終了する。
【０１０２】
次にＳ３４０にて、タスク切り替え許可用のシステムコールをコールして、タスク切り替えを許可させる。
ここで、本第３実施形態において、ＣＰＵ１側では、タスク切り替え許可用のシステムコールがコールされると、ＲＴＯＳの処理として、タスク切り替えの許可処理が行われると共に、ＦＩＦＯバッファ５１へのデータ書き込みを禁止する処理も実行され、その禁止処理により、第１実施形態と同様に、ＦＩＦＯコントローラ５３のイネーブル端子に非アクティブレベルの信号が入力されて、ライトアクセス検出器５５の動作が停止するようになっている（図６参照）。
【０１０３】
そして、最後にＳ３５０にて、タスク終了用のシステムコールをコールして、当該センサ処理タスクを終了させる。
このように、ＣＰＵ１では、センサ処理タスクの開始時にコールされるタスク切り替え禁止用のシステムコールによって、ライトアクセス検出器５５を起動させ、そのセンサ処理タスクの終了時にコールされるタスク切り替え許可用のシステムコールによって、ライトアクセス検出器５５の動作を停止させるようにしている。
【０１０４】
尚、タスク切り替えの禁止は、ＯＳを備えないＣＰＵでの割り込み禁止と同様の役割を果たすものであり、タスク切り替えの許可は、ＯＳを備えないＣＰＵでの割り込み許可と同様の役割を果たすものである。
（４）図５に示すように、ＣＰＵ２側では、図２の噴射量算出関数に相当するタスクとして、噴射量算出タスク（データ参照処理のタスクに相当）が実行される。
【０１０５】
そして、ＣＰＵ２で実行される噴射量算出タスクでは、まずＳ４００にて、タスク起床用のシステムコールをコールして、当該噴射量算出タスクを起床させ、次のＳ４１０にて、タスク切り替え禁止用のシステムコールをコールする。すると、ＲＴＯＳの処理として、タスク切り替えの禁止処理が行われる。
【０１０６】
次に、噴射量算出タスクでは、Ｓ４２０とＳ４３０とのそれぞれにて、ＲＡＭ３３からエンジン水温と吸入空気温との各データを読み出し、その各データを用いて燃料噴射量を算出する。
【０１０７】
その後、Ｓ４４０にて、タスク切り替え許可用のシステムコールをコールする。すると、ＲＴＯＳの処理として、タスク切り替えの許可処理が行われる。
最後にＳ４５０にて、タスク終了用のシステムコールをコールして、当該噴射量算出タスクを終了させる。すると、ＲＴＯＳにより、他のタスクに切り替えるためのタスク切り替え処理が行われることとなる（Ｓ４６０）。
（５）ＣＰＵ２では、図６の右側に示すように、ＲＴＯＳが実行対象のタスクを切り替える際に、そのＲＴＯＳの処理として、タスク切り替え処理が実行されるが、そのタスク切り替え処理中において、ＦＩＦＯバッファ５１内にデータがあるか否かが判定され、データがあれば（ＦＩＦＯバッファ５１が空でなければ）、ＦＩＦＯバッファ５１からＲＡＭ３３へデータを書き込む書込処理が行われるようになっている。そして、この書込処理は、第１実施形態のライトコントロール部５７と同じ役割を果たすものである。つまり、本第３実施形態では、ＣＰＵ２のＲＴＯＳによって第２転送手段の機能が実現されている。
【０１０８】
このため、本第３実施形態のＥＣＵでは、ＣＰＵ１側でセンサ処理タスクが実行されて、ＣＰＵ１のＲＡＭ２３とＦＩＦＯバッファ５１の記憶データが更新されても、その時にＣＰＵ２側で噴射量算出タスクが実行されていたならば、ＦＩＦＯバッファ５１からＣＰＵ２のＲＡＭ３３へのデータ書き込みは行われず、その噴射量算出タスクが終了して、他のタスクに切り替えられる際に、ＦＩＦＯバッファ５１からＲＡＭ３３へのデータ書き込みが行われることとなる。よって、次回の噴射量算出タスクでは、最新のデータを用いて燃料噴射量を算出することとなる。
【０１０９】
以上のような第３実施形態によれば、ＦＩＦＯコントローラ５３のライトアクセス検出器５５を起動する機能をＣＰＵ１側のＲＴＯＳが受け持ち、また、ＦＩＦＯバッファ５１からＲＡＭ３３へデータを書き込む機能をＣＰＵ２側のＲＴＯＳが受け持つことから、それらの機能がアプリケーションプログラムにとっては隠蔽されることとなる。
【０１１０】
このため、ＣＰＵ１，２で実行される各タスクのプログラム（アプリケーションプログラム）としては、シングルＣＰＵタイプの場合と同じプログラムを用いることが可能となる。そして、このような第３実施形態によっても、第１実施形態と同様の効果を得ることができる。
【０１１１】
以上、本発明の一実施形態について説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々なる態様で実施し得ることは勿論である。
【０１１２】
例えば、本発明は自動車用の電子制御装置に限らず、他の用途の様々な電子装置について同様に適用することができる。
また、上記各実施形態では、ＣＰＵ１側で更新されるデータをＣＰＵ２が参照する場合について述べたが、その逆もあるのであれば、上記各実施形態にてＣＰＵ１側からＣＰＵ２側へデータを提供するために設けた構成と同様の構成を、ＣＰＵ２側からＣＰＵ１側へデータを提供するために設ければ良い。
【図面の簡単な説明】
【０１１３】
【図１】実施形態のエンジン制御ＥＣＵの構成を表す構成図である。
【図２】第１実施形態における２つのＣＰＵの処理及び両ＣＰＵ間でのデータの流れを説明する説明図である。
【図３】第１実施形態のＦＩＦＯバッファ及びＦＩＦＯコントローラを説明する説明図である。
【図４】第２実施形態の説明図である。
【図５】第３実施形態における２つのＣＰＵの処理及び両ＣＰＵ間でのデータの流れを説明する説明図である。
【図６】第３実施形態のＦＩＦＯバッファ及びＦＩＦＯコントローラを説明する説明図である。
【図７】従来の技術を説明する説明図である。
【符号の説明】
【０１１４】
１，２…ＣＰＵ、３…エンジン制御ＥＣＵ、５…水温センサ、７…吸気温センサ、１１〜１７…インジェクタ、２１，３１…演算器、２３，３３…ＲＡＭ、２５，３５…ＲＯＭ、２７，３７…割り込み制御部、２９…Ａ／Ｄコンバータ、４１〜４７…タイマ、５１…ＦＩＦＯバッファ、５３…ＦＩＦＯコントローラ、５５…ライトアクセス検出器、５７…ライトコントロール部、５９…アンド回路
【図１】
0004419943.tif 000002
【図２】
0004419943.tif 000003
【図３】
0004419943.tif 000004
【図４】
0004419943.tif 000005
【図５】
0004419943.tif 000006
【図６】
0004419943.tif 000007
【図７】
0004419943.tif 000008