JP4419943B2 - Cpu間データ転送装置 - Google Patents

Cpu間データ転送装置 Download PDF

Info

Publication number
JP4419943B2
JP4419943B2 JP2005327517A JP2005327517A JP4419943B2 JP 4419943 B2 JP4419943 B2 JP 4419943B2 JP 2005327517 A JP2005327517 A JP 2005327517A JP 2005327517 A JP2005327517 A JP 2005327517A JP 4419943 B2 JP4419943 B2 JP 4419943B2
Authority
JP
Japan
Prior art keywords
cpu
data
memory
interrupt
transfer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2005327517A
Other languages
English (en)
Other versions
JP2007133744A (ja
Inventor
弘樹 中里
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Denso Corp
Original Assignee
Denso Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Denso Corp filed Critical Denso Corp
Priority to JP2005327517A priority Critical patent/JP4419943B2/ja
Priority to US11/594,853 priority patent/US7930523B2/en
Priority to EP06023570.2A priority patent/EP1785849B1/en
Publication of JP2007133744A publication Critical patent/JP2007133744A/ja
Application granted granted Critical
Publication of JP4419943B2 publication Critical patent/JP4419943B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Combined Controls Of Internal Combustion Engines (AREA)
  • Multi Processors (AREA)
  • Hardware Redundancy (AREA)

Description

本発明は、電子装置に備えられた2つのCPU間でデータを共有するための技術に関するものである。
従来より、例えば自動車用の電子制御装置においては、エンジンの燃料噴射制御や自動変速機の変速制御等の各種制御を、マイクロコンピュータ(以下、CPUという)を用いて行うのが一般的である。また、近年では、処理の増加や複雑化に対応するために、複数のCPUが連携して制御処理を進める所謂マルチCPUタイプの電子制御装置を用いることがある。
ここで、マルチCPUタイプの電子制御装置では、各CPU間でデータを共用する必要がある。
そして、CPUが2つの場合、その両CPUが共有するデュアルポートRAM(以下、DPRAMという)を設ける構成が知られている(例えば、特許文献1,2)。しかし、DPRAMを設けると、概してハードウェアの複雑化及び高コスト化を招いてしまう。
このため、他の手法として、各CPUで共有されるDPRAMのようなメモリを設けるのではなく、例えば、2つの各CPUが、自分側のRAMと他のCPU側のRAMとの両方にアクセス可能に構成すると共に、各CPUが、その両方のRAMへのアクセス権を取り合い、アクセス権を確保した方のCPUが他のCPU側のRAMにデータを書き込んでいる間、アクセス権を確保できなかったCPUは、処理を停止してアクセス権が開放されるまで待機し、その後、自分側のRAMにアクセスしてデータの参照等を行う、といった仕組みが考えられる。つまり、セマフォのようなアクセス権(リソース)を設け、それを各CPUが取得し合うようにするのである。
以下、こうした調停機構の一例について、エンジンの燃料噴射制御を例に挙げ、図7を用いて説明する。
まず、図7の例では、2つのCPU1,2のうち、一方のCPU1が、センサ処理関数を実行することにより、エンジン水温(エンジンの冷却水温)を検出するための水温センサからの信号とエンジンの吸入空気温を検出するための吸気温センサからの信号とをそれぞれA/D変換してエンジン水温と吸入空気温との各データを更新し、他方のCPU2が、噴射量算出関数を実行することにより、CPU1が更新したエンジン水温と吸入空気温との各データを参照して燃料噴射量を算出する。このため、CPU2側の噴射量算出関数で参照する各データは、同じタイミングで更新されたデータである必要がある。各データが同じタイミングで更新されたものでないと、適切な演算結果(この例では燃料噴射量)が得られないからである。尚、以下では、このようなデータであって、演算に用いられる際に同じタイミングで更新されたもの同士である必要のある複数種類のデータのことを、同時性の必要なデータという。
ここで、図7に示すように、CPU1側のセンサ処理関数では、まず、割り込み禁止処理を行い(S11)、次に、CPU2のRAMへのアクセス権を取得して(S12)、CPU2がRAMを参照できないようにしておく。
そして、水温センサからの信号をA/D変換して、そのデータであるエンジン水温のデータを当該CPU1のRAMに更新記憶すると共に(S13)、吸気温センサからの信号をA/D変換して、そのデータである吸入空気温のデータを当該CPU1のRAMに更新記憶する(S14)。
また、それらのデータはCPU2側の噴射量算出関数でも参照されるため、CPU1は、CPU2のRAMに記憶されているエンジン水温と吸入空気温の各データも、CPU1のRAMに更新記憶したものと同じデータに更新する(S13,S14)。尚、この例では、エンジン水温のデータが80℃から90℃に更新され、吸入空気温のデータが20℃から25℃に更新されている。
そして、CPU1は、両方のRAMへのデータ書き込みが完了した後、CPU2のRAMへのアクセス権を解放し(S15)、最後に、割り込み許可処理を行う(S16)。これでCPU1側のセンサ処理関数が終了する。
一方、CPU2側の噴射量算出関数では、まず、割り込み禁止処理を行い(S21)、次に、当該CPU2のRAMへのアクセス権を取得しようとするが(S22)、図7の例では、この時点でCPU1によりCPU2のRAMへのアクセス権が先に取られてしまっているため、CPU1がアクセス権を解放するまでアクセス権の取得要求を発行し続けることとなる(S22)。
その後、CPU1がCPU2のRAMへのアクセス権を解放すると(S15)、CPU2は自分のRAMへのアクセス権を取得できるようになる。
そして、CPU2は、自分のRAMへのアクセス権を取得すると、その自分のRAMからエンジン水温と吸入空気温との各データを読み出し(S23,S24)、その各データを用いて燃料噴射量を算出する。最後に、割り込み許可処理を行い(S25)、これでCPU2側の噴射量算出関数が終了する。
このような手順及び機構により、同時性の必要なデータに関する排他制御が実現され、例えば、CPU1が同時性の必要なデータを順次更新している最中に、CPU2がRAMにアクセスして、あるデータについては更新後のものを読み込み、他のデータについては更新前のものを読み込んでしまい、その結果、CPU2にて異なるタイミングでのデータを用いて演算処理をしてしまう、といった不具合を回避することができる。
尚、CPU1側のセンサ処理関数において、最初のS11で割り込みを禁止し、最後のS16で割り込みを許可するようにしているのと、CPU2側の噴射量算出関数において、最初のS21で割り込みを禁止し、最後のS25で割り込みを許可するようにしているのは、CPUが1つだけ備えられるシングルCPUタイプの場合であっても、同時性の必要なデータに関する排他制御が実現されるように従来より実施されているものであり、マルチCPUタイプの場合とシングルCPUタイプの場合とでアプリケーションプログラムを極力共通化させようとしているためである。
具体的に説明すると、まず、シングルCPUタイプの場合、図7のセンサ処理関数と噴射量算出関数とが1つのCPUで実行されることとなる。
このため、もし、センサ処理関数の実行中(即ち、同時性の必要なデータを順次更新している最中)に、そのセンサ処理関数で更新される複数種類のデータを参照して演算する噴射量算出関数などの処理(以下、データ参照処理という)が割り込んで開始されてしまうと、そのデータ参照処理にて、あるデータについては更新後のものを読み込み、他のデータについては更新前のものを読み込んでしまい、その結果、異なるタイミングでのデータを用いて演算処理をしてしまう。このため、センサ処理関数の最初に割り込みを禁止して、そのセンサ処理関数の実行中に他の処理が割り込まないようにしている。
また、もし、噴射量算出関数などのデータ参照処理の実行中に、センサ処理関数が割り込んで実行されてしまっても、データ参照処理では、センサ処理関数が開始される前に読み込んだデータは更新前のデータとなり、センサ処理関数が終了してから読み込んだデータは更新後のデータとなるため、やはり、異なるタイミングでのデータを用いて演算処理をしてしまう。このため、データ参照処理の最初に割り込みを禁止して、その処理の実行中に他の処理が割り込まないようにしている。
特開平3−129548号公報 特開平5−8664号公報
ところで、図7のような手続きを行うことにより、2つのCPU1,2間にて同時性の必要なデータに関する排他制御を行うことができるが、CPU1側で同時性の必要なデータを更新する処理(センサ処理関数)が実行されている時に、CPU2側で同時性の必要なデータを参照する処理(噴射量算出関数)が起動された場合、CPU2は、そのCPU2のRAMへのアクセス権をCPU1が解放するまで待たされることになる(S22)。
このため、マルチCPUタイプの構成に期待される並列処理の効果(即ち、処理の高速性)が損なわれてしまう。特に、例えばエンジン制御用のアプリケーションプログラムの場合、同時性の必要なデータを用いて演算を行う処理が多数の箇所に存在しており、そのような演算処理の実行が待たされることは、処理効率の大きな低下につながる。
また、図7のような手続を行う構成の場合、2つのCPUがRAMへのアクセス権を互いに取りに行って、お互い解放待ちになってしまう可能性があり、そうなるとデッドロック状態になってしまう。よって、アプリケーションプログラムを設計する際に、各CPUがRAMへのアクセス権を取得する順番も十分に考慮する必要があり、プログラムの開発効率を悪化させてしまう。具体的には、シングルCPUタイプの電制御装置に使用していた既存のアプリケーションプログラムをマルチCPUタイプの電子制御装置へ流用する場合に、考慮及び変更しなければならない要素が増加してしまう。
本発明は、こうした問題に鑑みなされたものであり、一方のCPUで更新される複数種類のデータを他方のCPUが参照するマルチCPUタイプの電子装置において、データ参照側のCPUを待機させることなく、処理効率を良好にするのに好適なCPU間データ転送装置の提供を目的としている。
請求項1のCPU間データ転送装置が用いられる電子装置では、演算結果記憶用のメモリをそれぞれ有した2つのCPUのうちの一方が、複数種類のデータを更新して該更新した複数種類のデータを当該CPUのメモリに更新記憶するデータ更新処理を実行し、他方のCPUが、前記データ更新処理によって更新される複数種類のデータを当該CPUのメモリから読み出して演算に用いるデータ参照処理を実行する。
そして、請求項1のCPU間データ転送装置は、前記データ更新処理を実行する方のCPU(以下、第1CPUという)のメモリ(以下、第1メモリという)から、前記データ参照処理を実行する方のCPU(以下、第2CPUという)のメモリ(以下、第2メモリという)へ、前記複数種類のデータをコピーすることにより、その複数種類のデータを第1CPU側から第2CPU側へ提供する。
そこで、請求項1のCPU間データ転送装置は、第1メモリから第2メモリへ前記複数種類のデータを転送するために、その複数種類のデータが一時記憶される転送用メモリと、第1転送手段と、第2転送手段とを備えている。
そして、第1転送手段は、第1CPUにおいてデータ更新処理が開始されると起動して、そのデータ更新処理により第1メモリへ書き込まれた複数種類のデータを、転送用メモリへ書き込む。
また、第2転送手段は、第2CPUにおいてデータ参照処理が実行されていないことを検知すると、転送用メモリから第2メモリへ前記複数種類のデータを書き込む。
このようなCPU間データ転送装置によれば、例えば、第1CPU側でデータ更新処理が実行されている時に、第2CPU側でデータ参照処理が開始された場合、転送用メモリには、今回のデータ更新処理で第1メモリに更新記憶されるのと同じ複数種類のデータが第1転送手段により書き込まれるが、第2メモリには前回のデータ更新処理で更新されたデータが記憶されていることとなり、第2CPUは、その前回更新のデータを第2メモリから読み出して演算を行うこととなる。つまり、第2CPU側のデータ参照処理は停止することなく実行される。
そして、第2CPUにおいてデータ参照処理が終了すると、第2転送手段により、転送用メモリから第2メモリへ、今回のデータ更新処理で更新された最新のデータが書き込まれることとなり、その後、再び第2CPU側でデータ参照処理が開始された場合には、第2CPUは、その最新のデータを第2メモリから読み出して演算を行うこととなる。
また、第1CPU側でデータ更新処理が実行されて、転送用メモリへ今回更新されたデータが書き込まれた際に、第2CPU側でデータ参照処理が実行されていなければ、第2転送手段により、転送用メモリから第2メモリへ今回更新された最新のデータが書き込まれることとなり、その後、第2CPU側でデータ参照処理が開始されると、第2CPUは、その最新のデータを第2メモリから読み出して演算を行うこととなる。
このように請求項1のCPU間データ転送装置によれば、第2CPU側のデータ参照処理で演算に用いる複数種類のデータが同じタイミングで更新されたものでなければならないというデータの同時性を確保しつつ、データを参照する側の第2CPUを待機させてしまうことがないため、マルチCPUタイプの電子装置における処理効率を良好にすることができる。
また、このCPU間データ転送装置によれば、図7に示した例のように2つのCPUがメモリへのアクセス権を取り合うことがなく、両CPUがデッドロック状態になってしまう心配がないため、各CPUに実行させるアプリケーションプログラムの設計が容易になる。特に、データ更新処理のプログラム中や、データ参照処理のプログラム中に、図7におけるS12,S15やS22のようなメモリへのアクセス権を取得するための命令を挿入する必要がないため、シングルCPUタイプの装置に使用していた既存のプログラムをマルチCPUタイプの装置へ流用することが容易になり、また、シングルCPUタイプの装置に使用するプログラムとマルチCPUタイプの装置に使用するプログラムとの共通化も容易となる。
ところで、[背景技術]の欄で述べたように、一般に、同時性の必要なデータを参照して演算するデータ参照処理では、その処理の開始時に割り込みを禁止し、その処理の終了時に割り込みを許可するようにプログラムが設計される。
そこで、請求項2に記載のように、第2CPUでは、データ参照処理の開始時に割り込みを禁止し、そのデータ参照処理の終了時に割り込みを許可するようになっているのであれば、第2転送手段は、第2CPUが割り込み許可状態であるか否かを監視して、割り込み許可状態であれば、その第2CPUにおいてデータ参照処理が実行されていないと判断するように構成することができる。
そして、この場合、第2転送手段をハードウェアで構成したならば、第2CPUで実行されるデータ参照処理のプログラムとして、シングルCPUタイプの場合のプログラムと同じものを用いることができるようになる。
次に、請求項3のCPU間データ転送装置では、請求項1,2のCPU間データ転送装置において、転送用メモリは、当該転送用メモリから第2メモリへのデータ書き込みが行われると、記憶データが消去されるようになっている。そして、第2転送手段は、転送用メモリ内にデータがあり、且つ、第2CPUにおいてデータ参照処理が実行されていないことを検知すると、転送用メモリから第2メモリへ複数種類のデータを書き込むようになっている。
このような請求項3のCPU間データ転送装置によれば、第1CPU側でデータ更新処理が実行された場合(即ち、複数種類のデータが更新された場合)にだけ、その更新後の最新のデータが転送用メモリから第2メモリへ書き込まれることとなる。よって、転送用メモリから第2メモリへのデータ書き込み頻度を必要最小限にすることができる。
また、請求項4のCPU間データ転送装置では、請求項2のCPU間データ転送装置において、第1CPUは、データ更新処理の終了時に、第2CPUに対して割り込み要求を発行するようになっており、第2CPUは、第1CPUからの割り込み要求により起動される特定の割り込みルーチンにより、転送用メモリから第2メモリへ前記複数種類のデータを書き込む処理を行うようになっている。よって、第2転送手段の機能は、第2CPUが前記特定の割り込みルーチンを実行することで実現される。
このようなCPU間データ転送装置では、第1CPU側でデータ更新処理が実行されると、そのデータ更新処理の終了時に、第1CPUから第2CPUへ割り込み要求が発行される。そして、その割り込み要求が発行された時に、もし第2CPUがデータ参照処理の実行中で割り込み禁止状態ならば、その第2CPUにて、データ参照処理が終了し割り込み許可状態になった時点で特定の割り込みルーチンが実行されて、転送用メモリから第2メモリへのデータ書き込みが行われる。また、第1CPUから割り込み要求が発行された時に、第2CPUがデータ参照処理の実行中でなく割り込み許可状態ならば、その割り込み要求が発行された時点で、第2CPUにて特定の割り込みルーチンが実行され、転送用メモリから第2メモリへのデータ書き込みが行われることとなる。
そして、このような請求項4のCPU間データ転送装置によっても、請求項3のCPU間データ転送装置と同様の効果を得ることができる。つまり、第1CPU側でデータ更新処理が実行されて複数種類のデータが更新された場合にだけ、その更新後の最新のデータが転送用メモリから第2メモリへ書き込まれることとなり、転送用メモリから第2メモリへのデータ書き込み頻度を必要最小限にすることができる。
一方、請求項1〜4のCPU間データ転送装置において、第1転送手段は、請求項5に記載のように、第1CPUがデータ更新処理の開始時に実行する特定の命令によって起動されるように構成することができる。
このような構成によれば、第1CPUで実行されるデータ更新処理のプログラム中に前記特定の命令を設けるだけで、第1転送手段を起動させることができる。このため、第1CPUで実行されるデータ更新処理のプログラムを、シングルCPUタイプの場合のデータ更新処理のプログラムを流用して簡単に作成することができるようになる。
次に、請求項6のCPU間データ転送装置では、請求項5のCPU間データ転送装置において、第1CPUでは、データ更新処理の開始時に割り込みを禁止し、そのデータ更新処理の終了時に割り込みを許可するようになっている。更に、第1CPUでは、割り込み禁止処理用の関数がコールされると、割り込みを禁止する処理と、第1転送手段を起動する処理とが実行されるようになっている。
そして、第1転送手段は、第1CPUにてデータ更新処理の開始時に前記割り込み禁止処理用の関数がコールされることで起動されるようになっている。つまり、第1CPUにおいて、データ更新処理の開始時に割り込み禁止処理用の関数がコールされると、割り込みを禁止する処理と第1転送手段を起動する処理とが実行されるからである。
このような請求項6のCPU間データ転送装置によれば、第1CPUで実行されるデータ更新処理のプログラムとして、シングルCPUタイプの場合のデータ更新処理のプログラムをそのまま流用することが可能となる。データ更新処理のプログラムとして、最初に割り込み禁止処理用の関数をコールする部分はシングルCPUタイプの場合であっても同じであるからである。
次に、請求項7のCPU間データ転送装置では、請求項1のCPU間データ転送装置において、2つのCPUのうち、少なくとも第2CPUでは、各処理のタスクがオペレーティングシステム(以下、OSという)上で実行されるようになっている。
更に、第2CPUでは、OSが実行対象のタスクを切り替える際に、そのOSの処理として、転送用メモリから第2メモリへ前記複数種類のデータを書き込む書込処理が行われるようになっている。よって、第2転送手段の機能は、第2CPUのOSによって実現される。
このようなCPU間データ転送装置によれば、第2転送手段に相当するハードウェアを設ける必要がなくなると共に、第2CPUで実行される各タスクのプログラム(アプリケーションプログラム)としては、シングルCPUタイプの場合と同じプログラムを用いることが可能となる。第2転送手段に関連する機能をOSが受け持つことにより、その機能がアプリケーションプログラムにとっては隠蔽されるからである。
次に、請求項8のCPU間データ転送装置では、請求項7のCPU間データ転送装置において、転送用メモリは、当該転送用メモリから第2メモリへのデータ書き込みが行われると、記憶データが消去されるようになっている。そして、第2CPUにおいて、前記書込処理は、OSが実行対象のタスクを切り替える際に、転送用メモリ内にデータがあれば行われるようになっている。
このような請求項8のCPU間データ転送装置によれば、請求項3のCPU間データ転送装置と同様に、第1CPU側でデータ更新処理が実行された場合(即ち、複数種類のデータが更新された場合)にだけ、その更新後の最新のデータが転送用メモリから第2メモリへ書き込まれることとなる。よって、前記書込処理の実行頻度を必要最小限にすることができる。
次に、請求項9のCPU間データ転送装置では、請求項7,8のCPU間データ転送装置において、第1CPUでは、各処理のタスクがOS上で実行されるようになっていると共に、データ更新処理のタスクの開始時にタスク切り替えを禁止し、そのタスクの終了時にタスク切り替えを許可するようになっている。尚、OSを備えたCPUにおけるタスク切り替えの禁止は、OSを備えないCPUでの割り込み禁止と同様の役割を果たすものであり、OSを備えたCPUにおけるタスク切り替えの許可は、OSを備えないCPUでの割り込み許可と同様の役割を果たすものである。
更に、第1CPUでは、データ更新処理のタスクの開始時にて、タスク切り替え禁止処理用の関数がコールされると、OSによりタスク切り替えの禁止と第1転送手段の起動とが行われるようになっている。
このような請求項9のCPU間データ転送装置によれば、第1CPUで実行されるデータ更新処理のタスクのプログラムとして、シングルCPUタイプの場合におけるデータ更新処理のタスクのプログラムをそのまま流用することが可能となる。第1転送手段を起動する機能をOSが受け持つことにより、その機能がアプリケーションプログラムにとっては隠蔽されるからであり、データ更新処理のタスクのプログラムとして、最初にタスク切り替え禁止処理用の関数をコールする部分はシングルCPUタイプの場合であっても同じであるからである。
以下に、本発明が適用された実施形態の電子制御装置について説明する。尚、本実施形態の電子制御装置は、例えば自動車に搭載された内燃機関型の多気筒(この例では4気筒)エンジンを制御するものである。そして、以下では、この電子制御装置のことを、エンジン制御ECU、或いは単にECUという。
[第1実施形態]
図1に示すように、第1実施形態のエンジン制御ECU3は、2つのCPU1,2を備えている。
そして、CPU1は、各種演算を行う演算器(ALU)21と、演算結果が記憶されるRAM23と、プログラムや固定のデータが記憶されるROM25と、割り込みを制御する割り込み制御部27と、A/Dコンバータ29とを備えている。また、CPU2は、CPU1と同様の、演算器31、RAM33、ROM35、及び割り込み制御部37に加えて、タイマ41,43,45,47を備えている。
更に、ECU3には、CPU1のRAM23とCPU2のRAM33との間で複数種類のデータを転送するためのFIFO(First−In First−Out)型のバッファレジスタ(以下、FIFOバッファという)51と、そのFIFOバッファ51の書き込み及び読み出しを制御するFIFOコントローラ53とが備えられている。
また、ECU3には、エンジンの冷却水温を検出するための水温センサ5と、エンジンの吸入空気温を検出するための吸気温センサ7と、エンジンの各気筒に燃料を噴射供給するインジェクタ11,13,16,17とが接続されている。
このECU3においては、水温センサ5からの信号と吸気温センサ7からの信号とがCPU1のA/Dコンバータ29によって一定時間毎にA/D変換され、そのA/D変換値(即ち、エンジン水温と吸入空気温との各データ)は、CPU1のRAM23に更新記憶される。そして、そのRAM23に更新記憶されたデータは、FIFOバッファ51を通じてCPU2のRAM33にもコピーされる。
また、CPU2では、インジェクタ11〜17の制御を行っており、FIFOバッファ51からRAM33にコピーされたエンジン水温と吸入空気温との各データを用いて各インジェクタ11〜17への通電時間(即ち、燃料噴射量)を演算し、その演算した時間をタイマ41〜47にセットする。すると、タイマ41〜47にセットされた時間だけインジェクタ11〜17へ通電され、そのインジェクタ11〜17から各気筒へ燃料が噴射される。
つまり、本実施形態のECU3において、CPU1は、自分側の処理で更新したエンジン水温や吸入空気温等のデータを自分のRAM23にだけ更新記憶し、また、CPU2は、CPU1によって更新されるデータを、CPU1のRAM23から直接読み出すのではなく、自分のRAM33から読み出すようになっており、各CPU1,2は他方のCPUのRAMをアクセスしないようになっている。このため、本実施形態のECU3では、CPU1のRAM23に更新記憶されるデータを、FIFOバッファ51を通して、CPU2のRAM33にも更新記憶する構成としている。
そこで次に、こうしたFIFOバッファ51を介したCPU1,2間のデータ転送について、CPU1のRAM23からCPU2のRAM33へ、エンジン水温と吸入空気温のデータが転送される場合を例に挙げて、図2,3を用い説明する。尚、図2は、処理及びデータの流れを説明する説明図であり、図3は、FIFOバッファ51及びFIFOコントローラ53を説明する説明図である。
まず、図2に示すように、ECU3では、前述した図7の例と同様に、CPU1が、センサ処理関数を実行することにより、水温センサからの信号と吸気温センサからの信号とをそれぞれA/D変換してエンジン水温と吸入空気温との各データを更新し、CPU2が、噴射量算出関数を実行することにより、CPU1が更新したエンジン水温と吸入空気温との各データを用いて燃料噴射量を算出する。このため、CPU2側の噴射量算出関数で参照されるエンジン水温と吸入空気温との各データは、同時性の必要なデータである。尚、CPU1側のセンサ処理関数は一定時間毎に実行され、CPU2側の噴射量算出関数は、エンジンの回転に同期して所定クランク角のタイミングで実行される。
そして、図2に示すように、CPU1側のセンサ処理関数では、まず、割り込み禁止処理用の関数をコールすることで、割り込み禁止の処理を行う(S110)。
ここで、CPU1,2のプログラムでは、少なくとも割り込み禁止処理用の関数と、割り込み許可処理用の関数とのそれぞれに対して実行されるべき命令がライブラリ化されている。そして、CPU1においては、割り込み禁止処理用の関数がコールされると、割り込みを禁止する命令と、FIFOバッファ51へのデータ書き込みを許可する命令とが実行されるようになっている。このため、CPU1にてセンサ処理関数が開始されると、FIFOバッファ51へのデータ書き込みが許可される(S110)。
次に、CPU1側のセンサ処理関数では、水温センサからの信号をA/D変換して、そのデータであるエンジン水温のデータをRAM23に更新記憶すると共に(S120)、吸気温センサからの信号をA/D変換して、そのデータである吸入空気温のデータをRAM23に更新記憶する(S130)。図2の例では、エンジン水温のデータが80℃から90℃に更新され、吸入空気温のデータが20℃から25℃に更新されている。
また、この時、FIFOバッファ51へのデータ書き込みが許可されているため、CPU1のRAM23にデータが書き込まれると、そのデータと同じデータが、後述するFIFOコントローラ53によってFIFOバッファ51に書き込まれる。具体的には、図2の中央に示すように、FIFOバッファ51には、RAM23に書き込まれたデータ毎に、そのデータと、そのデータのサイズ(バイト数)と、そのデータが書き込まれたRAM23のアドレス(詳しくは先頭アドレス)とが、セットで書き込まれる。
そして、上記S130でRAM23へのデータ書き込みが終了すると、それと同時に、FIFOバッファ51へのデータ書き込みも終了する。
その後、CPU1側のセンサ処理関数では、最後に、割り込み許可処理用の関数をコールすることで、割り込み許可の処理を行う(S140)。
尚、CPU1において、割り込み許可処理用の関数に対しては、実行されるべき命令として、割り込みを許可する命令と、FIFOバッファ51へのデータ書き込みを禁止する命令とがライブラリ化されている。このため、センサ処理関数の最後で割り込み許可処理用の関数がコールされると、割り込みが許可されると共に、FIFOバッファ51へのデータ書き込みが禁止される。また、センサ処理関数において、最初のS110で割り込みを禁止し、最後のS140で割り込みを許可するようにしているのは、[背景技術]の欄で述べた理由による。
一方、CPU2側の噴射量算出関数では、まず、割り込み禁止処理用の関数をコールすることで、割り込み禁止の処理を行う(S210)。
次に、CPU2は、自分のRAM33からエンジン水温と吸入空気温との各データを読み出し(S220,S230)、その各データを用いて燃料噴射量を算出する。
その後、割り込み許可処理用の関数をコールすることで、割り込み許可の処理を行い(S240)、これでCPU2側の噴射量算出関数が終了する。
尚、CPU2側の噴射量算出関数では、S210で割り込み禁止処理用の関数がコールされると、割り込みを禁止する命令だけが実行され、S240で割り込み許可処理用の関数がコールされると、割り込みを許可する命令だけが実行される。また、この噴射量算出関数においても、最初のS210で割り込みを禁止し、最後のS240で割り込みを許可するようにしているのは、[背景技術]の欄で述べた理由による。
ここで更に、本実施形態において、FIFOバッファ51は、そのFIFOバッファ51からCPU2のRAM33へのデータ書き込みが行われると、記憶データが消去されるようになっている。そして、FIFOコントローラ53は、FIFOバッファ51内にデータがあるか否かと、CPU2が割り込み許可状態であるか否かとを監視しており、FIFOバッファ51内にデータがあり、且つ、CPU2が割り込み許可状態であれば、FIFOバッファ51からCPU2のRAM33へデータをコピーするようになっている。
つまり、CPU2が割り込み禁止状態であれば、CPU2が同時性の必要なデータを参照している状態(噴射量算出関数の実行中)である可能性があるため、FIFOバッファ51からCPU2へのRAM33へのコピーは行わず、CPU2が割込み許可状態であれば、CPU2が同時性の必要なデータを参照している状態では無い(噴射量算出関数の実行中ではない)と判断して、FIFOバッファ51からCPU2のRAM33へのコピーを行う仕組みになっている。
次に、FIFOコントローラ53について、図3を用い説明する。
図3に示すように、FIFOコントローラ53は、ライトアクセス検出器55と、ライトコントロール部57と、アンド回路59とを備えている。
そして、FIFOコントローラ53では、CPU1にてFIFOバッファ51へのデータ書き込みを許可する命令(以下、書き込み許可命令ともいう)が実行されると(S110)、当該FIFOコントローラ53のイネーブル端子にアクティブレベルの信号(この例ではハイ信号)が入力され、その信号により、ライトアクセス検出器55が起動する。そして、ライトアクセス検出器55が起動することにより、当該FIFOコントローラ53では、CPU1のRAM23に書き込まれたデータをFIFOバッファ51へ書き込む機能が起動することとなる。よって、上記イネーブル端子は、ライトアクセス検出器55のイネーブル端子であるとも言える。
ライトアクセス検出器55は、上記書き込み許可命令の実行によって起動すると、CPU1がRAM23をアクセスする際に出力するメモリアクセス信号と、そのアクセスがリード(R)とライト(W)との何れであるかを示すR/W信号とを監視し、メモリアクセス信号がアクティブレベル(この例ではハイレベル)となり、且つ、R/W信号がライトを示す方のレベル(この例ではハイレベル)であれば、CPU1にてRAM23にライトアクセスしている(即ち、RAM23にデータを書き込んでいる)と判断する。
そして、ライトアクセス検出器55は、このようにしてRAM23へのライトアクセスを検知すると、CPU1における内部バスをトレースして、その内部バス上に出力されているデータと、データサイズと、書き込み先アドレスとを、FIFOバッファ51に書き込む。このため、前述したように、FIFOバッファ51には、図2のセンサ処理関数のS120とS130とでRAM23に書き込まれたデータ毎に、そのデータと、そのデータのサイズと、そのデータが書き込まれたRAM23のアドレスとが、セットで書き込まれることとなる。
また、FIFOコントローラ53では、CPU1にてFIFOバッファ51へのデータ書き込みを禁止する命令が実行されると(S140)、当該FIFOコントローラ53のイネーブル端子に非アクティブレベルの信号(この例ではロー信号)が入力されて、ライトアクセス検出器55の動作が停止する。そして、ライトアクセス検出器55の動作が停止することにより、当該FIFOコントローラ53は、FIFOバッファ51へのデータ書き込み禁止状態となる。つまり、CPU1のRAM23に書き込まれたデータをFIFOバッファ51へ書き込む機能が停止する。
一方、FIFOコントローラ53のアンド回路59には、FIFOバッファ51の状態ビットと、CPU2の割り込み禁止状態ビットとが入力されている。
FIFOバッファ51の状態ビットは、FIFOバッファ51内にデータがあれば0となり、データがなければ1となる。そして、この状態ビットは、FIFOバッファ51内のデータを監視する監視回路(図示省略)によって出力され、その監視回路は、例えば、FIFOバッファ51内の全ビットが全て同じならば、状態ビットとして空を示す1を出力する。
また、CPU2の割り込み禁止状態ビットは、CPU2の内部状態を表す状態レジスタ(図示省略)の1ビットであり、CPU2が割り込み許可状態であれば0にセットされ、割り込み禁止状態であれば1にセットされる。尚、状態レジスタは、CPU2の割り込み制御部37内に設けられている。
そして、アンド回路59は、FIFOバッファ51の状態ビットとCPU2の割り込み禁止状態ビットとを監視し、その両ビットが0であれば、FIFOバッファ51内にデータがあり、且つ、CPU2が割り込み許可状態であると判断して、ライトコントロール部57を起動させる(イネーブル状態にする)。
ライトコントロール部57は、アンド回路59により起動されると(イネーブル状態になると)、CPU2のRAM33にライトアクセスして、FIFOバッファ51に記憶されている各データをそのRAM33に書き込む。具体的には、FIFOバッファ51に記憶されている各データを、そのデータと共に記憶されているデータサイズ及びアドレスを基にして、CPU1側のRAM23における格納アドレスと同じアドレスに書き込む。尚、FIFOバッファ51内のデータは、このようにしてRAM33への書き込みが実施されると消去され、その結果、FIFOバッファ51の状態ビットは0から1になる。そして、その後、ライトアクセス検出器55によってFIFOバッファ51にデータが書き込まれると、FIFOバッファ51の状態ビットは再び1から0になる。
以上のようなECU3において、例えば図2のように、CPU1側でセンサ処理関数が実行されている時に、CPU2側で噴射量算出関数が開始された場合、FIFOバッファ51には、今回のセンサ処理関数でCPU1のRAM23に更新記憶されるのと同じ複数種類のデータ(エンジン水温のデータと吸入空気温のデータ)がFIFOコントローラ53のライトアクセス検出器55により書き込まれるが、CPU2は割り込み禁止状態であるため、FIFOコントローラ53のライトコントロール部57は作動しない。このため、CPU2のRAM33には前回のセンサ処理関数で更新されたデータ(図2の例では、水温=80℃,吸入空気温=20℃)が記憶されていることとなり、CPU2は、その前回更新のデータをRAM33から読み出して燃料噴射量を演算することとなる。つまり、CPU2側の噴射量算出関数は停止することなく実行される。
そして、CPU2において噴射量算出関数が終了し、CPU2が割り込み許可状態になると(S240)、FIFOコントローラ53のライトコントロール部57が起動して、FIFOバッファ51からCPU2のRAM33へ、今回のセンサ処理関数で更新された最新のデータ(図2の例では、水温=90℃,吸入空気温=25℃)が書き込まれることとなり、その後、再びCPU2側で噴射量算出関数の実行が開始された場合には、CPU2は、その最新のデータをRAM33から読み出して燃料噴射量を演算することとなる。
また、CPU1側でセンサ処理関数が実行されて、FIFOバッファ51へ今回更新されたデータが書き込まれた際に、CPU2側で噴射量算出関数が実行されておらず該CPU2が割り込み許可状態であれば、FIFOコントローラ53のライトコントロール部57がすぐに起動して、FIFOバッファ51からCPU2のRAM33へ今回更新された最新のデータが書き込まれることとなる。そして、その後、CPU2側で噴射量算出関数の実行が開始されると、CPU2は、その最新のデータをRAM33から読み出して燃料噴射量を演算することとなる。
このような本実施形態のECU3によれば、CPU2側で演算に用いる複数種類のデータが同じタイミングで更新されたものでなければならないというデータの同時性を確保しつつ、データを参照する側のCPU2を待機させてしまうことがない。具体的には、CPU1側のセンサ処理関数により同時性の必要なデータ(エンジン水温のデータと吸入空気温のデータ)が更新されている最中でも、CPU2側で噴射量算出関数の実行を進めることができる。よって、処理効率を良好にすることができる。
尚、CPU1側で更新した水温のデータと吸入空気温のデータがCPU2のRAMに書き込まれるタイミングは、図7の例では、センサ処理関数の実行開始時からそれぞれ約300μsと約450μsの時点であるのに対して、図2の例では、センサ処理関数の実行開始時から約600μsの時点となり、CPU2のRAM内のデータが更新されるまでの時間は図2の例の方が長くなってしまうように見える。しかし、CPU2側で実際に水温=90℃、吸入空気温=25℃という最新のデータを参照可能となるまでの時間は、図7の例が約800μsの時点であるのに対し、図2の例では約650μsの時点となり、実使用上はアクセス権の調停による待ち合わせが無い方が高速に最新のデータを利用できるようになる。
更に、本実施形態によれば、図7の例のように2つのCPUがRAMへのアクセス権を取り合うことがなく、両CPU1,2がデッドロック状態になってしまう心配がないため、各CPU1,2に実行させるアプリケーションプログラムの設計が容易になる。
具体的には、センサ処理関数のプログラム中や、噴射量算出関数のプログラム中に、図7におけるS12,S15やS22のようなRAMへのアクセス権を取得するための命令を挿入する必要がないため、シングルCPUタイプのECUに使用していた既存のプログラムをマルチCPUタイプのECUへ流用することが容易になり、また、シングルCPUタイプのECUに使用するプログラムとマルチCPUタイプのECUに使用するプログラムとの共通化も容易となる。
特に、本実施形態では、FIFOコントローラ53のライトコントロール部57及びアンド回路59が、CPU2が割り込み許可状態であるか否かを監視し、割り込み許可状態であれば、CPU2にて噴射量算出関数が実行されていないと判断して、FIFOバッファ51からRAM33へのデータ書き込みを行うようにしているため、CPU2で実行される噴射量算出関数のプログラムとして、シングルCPUタイプの場合のプログラムと全く同じものを用いることができるようになる。
また、本実施形態において、CPU1側では、割り込み禁止処理用の関数がコールされると、割り込みを禁止する命令と、FIFOバッファ51へのデータ書き込みを許可する書き込み許可命令(ライトアクセス検出器55を起動させる命令)とが実行され、割り込み許可処理用の関数がコールされると、割り込みを許可する命令と、FIFOバッファ51へのデータ書き込みを禁止する命令(ライトアクセス検出器55の動作を停止させる命令)とが実行されるように、関数のライブラリが設定されている。そして、ライトアクセス検出器55は、CPU1にてセンサ処理関数の実行開始時に割り込み禁止処理用の関数がコールされることで起動され(S110)、そのセンサ処理関数の実行終了時に割り込み許可処理用の関数がコールされることで動作を停止するようになっている(S140)。
このため、CPU1で実行されるセンサ処理関数のプログラムとしても、シングルCPUタイプの場合のセンサ処理関数のプログラムをそのまま流用することが可能となる。センサ処理関数のプログラムとして、最初に割り込み禁止処理用の関数をコールする部分と、最後に割り込み許可用の関数をコールする部分は、シングルCPUタイプの場合であっても同じであるからである。つまり、アプリケーションプログラムを変更しなくても、予め実装する関数のライブラリを変更するだけで、マルチCPUタイプに対応することができる。
尚、ライブラリを変更せずに、アプリケーションプログラムを変更するようにしても良い。具体的には、図2のS110とS120との間に、ライトアクセス検出器55を起動させる命令を挿入し、図2のS130とS140との間に、ライトアクセス検出器55動作を停止させる命令を挿入しても良い。このような変更をする場合でも、両CPU1,2がデッドロック状態になってしまう心配はないため、CPU1で実行されるセンサ処理関数のプログラムを、シングルCPUタイプの場合のプログラムを流用して簡単に作成することができる。
また更に、本実施形態において、FIFOコントローラ53のライトコントロール部57及びアンド回路59は、FIFOバッファ51内にデータがなければ、FIFOバッファ51からRAM33へのデータ書き込みを実施しないようになっているため、そのデータ書き込みの頻度を必要最小限にすることができる。
尚、上記第1実施形態では、CPU1が第1CPUに相当し、そのCPU1のRAM23が第1メモリに相当し、そのCPU1で実行されるセンサ処理関数がデータ更新処理に相当している。また、CPU2が第2CPUに相当し、そのCPU2のRAM33が第2メモリに相当し、そのCPU2で実行される噴射量算出関数がデータ参照処理に相当している。そして、FIFOバッファ51が転送用メモリに相当し、FIFOコントローラ53のライトアクセス検出器55が第1転送手段に相当し、FIFOコントローラ53のライトコントロール部57及びアンド回路59が第2転送手段に相当している。
[第2実施形態]
次に、第2実施形態のECUについて説明する。
第2実施形態のECUは、第1実施形態のECU3と比較すると、下記の2点が異なっている。
まず、第1の相違点として、図4に示すように、FIFOコントローラ53からライトコントロール部57とアンド回路59が削除されている。
そして、第2の相違点として、FIFOバッファ51からCPU2のRAM33へのデータ書き込み(データコピー)を、CPU2側の割り込みルーチンによって実施している。
詳しく説明すると、まず、CPU1は、センサ処理関数の終了時におけるS140にて、CPU2に対し割り込み要求(IRQ)を発行するようになっている。
具体的には、CPU1において、割り込み許可処理用の関数に対しては、実行されるべき命令として、割り込みを許可する命令と、FIFOバッファ51へのデータ書き込みを禁止する命令(ライトアクセス検出器55の動作を停止させる命令)とに加え、更に、CPU2へ割り込み要求を発行する命令とがライブラリ化されている。このため、センサ処理関数の最後で割り込み許可処理用の関数がコールされると、割り込みが許可されると共に、FIFOバッファ51へのデータ書き込みが禁止され、更に、CPU1からCPU2へ割り込み要求が発行される。尚、この割り込み要求は、例えば、CPU1からCPU2への割り込み要求信号であって、CPU2にて入力信号にエッジが生じると割り込みが発生することとなる割り込み入力端子への信号である。
そして、CPU2側では、そのCPU1からの割り込み要求により起動される割り込みルーチン(以下、データコピー用割り込みルーチンという)により、FIFOバッファ51からRAM33へデータを書き込む処理を行う。
このような第2実施形態のECUでは、CPU1側でセンサ処理関数が実行されると、そのセンサ処理関数の終了時に、CPU1からCPU2へ割り込み要求が発行される。
そして、その割り込み要求が発行された時に、もしCPU2が噴射量算出関数の実行中で割り込み禁止状態ならば、そのCPU2にて、噴射量算出関数が終了し割り込み許可状態になった時点で、割り込み制御部37によりデータコピー用割り込みルーチンが起動される。そして、そのデータコピー用割り込みルーチンにより、FIFOバッファ51からRAM33へのデータ書き込みが行われる。また、CPU1からCPU2へ割り込み要求が発行された時に、CPU2が噴射量算出関数の実行中でなく割り込み許可状態ならば、その割り込み要求が発行された時点で、割り込み制御部37によりデータコピー用割り込みルーチンが起動され、FIFOバッファ51からRAM33へのデータ書き込みが行われることとなる。尚、こうした割り込みルーチンの起動制御を行う割り込み制御部37は周知のものである。
以上のような第2実施形態によれば、第1実施形態と比較すると、CPU1側のセンサ処理関数でCPU2へ割り込み要求が発行されるようにし、CPU2側にはデータコピー用割り込みルーチンを用意する、という追加の設定を行うだけで、前述した第1実施形態の効果と同様の効果を得ることができる。
尚、上記第2実施形態では、割り込み制御部37及びデータコピー用割り込みルーチンが第2転送手段に相当する。
[第3実施形態]
上記第1及び第2実施形態では、データを参照する側のCPU2にOSが搭載されていない場合でもFIFOバッファ51からROM33へのデータ書き込みを適切に実施可能にするために、そのデータ参照側のCPU2が割り込み許可状態か否かでFIFOバッファ51からROM33へのデータ書き込みを行うか否かが決定されるように構成していたが、少なくともデータ参照側のCPU2にOSが搭載される場合には、FIFOバッファ51からROM33へデータを書き込む機能にOSを利用することができる。
そこで次に、第3実施形態のECUについて図5及び図6を用い説明する。
第3実施形態のECUは、第1実施形態のECU3と比較すると、下記の(1)〜(5)の点が異なっている。
(1)CPU1,2には、OSとして、複数のタスクを並行して実行することも可能なRTOS(リアルタイムOS)が搭載されている。このため、CPU1,2では、各処理のタスクがRTOS上で実行される。
(2)図6に示すように、FIFOコントローラ53からライトコントロール部57とアンド回路59が削除されている。尚、この点は、第2実施形態と同じである。
(3)図5に示すように、CPU1側では、図2のセンサ処理関数に相当するタスクとして、センサ処理タスク(データ更新処理のタスクに相当)が実行される。尚、図5において二重線の四角枠で囲まれた処理は、RTOSのシステムコール(関数)によって実施される処理あることを示しており、そのシステムコールをコールする(呼び出す)のはアプリケーションプログラムである。
そして、CPU1で実行されるセンサ処理タスクでは、まずS300にて、タスク起床用のシステムコールをコールして、当該センサ処理タスクを起床させ、次のS310にて、タスク切り替え禁止用のシステムコール(タスク切り替え禁止処理用の関数に相当)をコールして、タスク切り替えを禁止させる。
ここで、本第3実施形態において、CPU1側では、タスク切り替え禁止用のシステムコールがコールされると、RTOSの処理として、タスク切り替えの禁止処理が行われると共に、FIFOバッファ51への書き込みを許可する処理も実行され、その許可処理により、第1実施形態と同様に、FIFOコントローラ53のイネーブル端子にアクティブレベルの信号が入力されて、ライトアクセス検出器55が起動するようになっている(図6参照)。
次に、センサ処理タスクでは、S320にて、水温センサからの信号をA/D変換して、そのデータ(エンジン水温のデータ)をRAM23に更新記憶し、S330にて、吸気温センサからの信号をA/D変換して、そのデータ(吸入空気温のデータ)をRAM23に更新記憶する。
すると、この時、FIFOバッファ51へのデータ書き込みが許可されている(即ち、ライトアクセス検出器55が起動中である)ため、CPU1のRAM23にデータが書き込まれると、そのデータと同じデータがライトアクセス検出器55によってFIFOバッファ51に書き込まれる。そして、上記S330でRAM23へのデータ書き込みが終了すると、それと同時に、FIFOバッファ51へのデータ書き込みも終了する。
次にS340にて、タスク切り替え許可用のシステムコールをコールして、タスク切り替えを許可させる。
ここで、本第3実施形態において、CPU1側では、タスク切り替え許可用のシステムコールがコールされると、RTOSの処理として、タスク切り替えの許可処理が行われると共に、FIFOバッファ51へのデータ書き込みを禁止する処理も実行され、その禁止処理により、第1実施形態と同様に、FIFOコントローラ53のイネーブル端子に非アクティブレベルの信号が入力されて、ライトアクセス検出器55の動作が停止するようになっている(図6参照)。
そして、最後にS350にて、タスク終了用のシステムコールをコールして、当該センサ処理タスクを終了させる。
このように、CPU1では、センサ処理タスクの開始時にコールされるタスク切り替え禁止用のシステムコールによって、ライトアクセス検出器55を起動させ、そのセンサ処理タスクの終了時にコールされるタスク切り替え許可用のシステムコールによって、ライトアクセス検出器55の動作を停止させるようにしている。
尚、タスク切り替えの禁止は、OSを備えないCPUでの割り込み禁止と同様の役割を果たすものであり、タスク切り替えの許可は、OSを備えないCPUでの割り込み許可と同様の役割を果たすものである。
(4)図5に示すように、CPU2側では、図2の噴射量算出関数に相当するタスクとして、噴射量算出タスク(データ参照処理のタスクに相当)が実行される。
そして、CPU2で実行される噴射量算出タスクでは、まずS400にて、タスク起床用のシステムコールをコールして、当該噴射量算出タスクを起床させ、次のS410にて、タスク切り替え禁止用のシステムコールをコールする。すると、RTOSの処理として、タスク切り替えの禁止処理が行われる。
次に、噴射量算出タスクでは、S420とS430とのそれぞれにて、RAM33からエンジン水温と吸入空気温との各データを読み出し、その各データを用いて燃料噴射量を算出する。
その後、S440にて、タスク切り替え許可用のシステムコールをコールする。すると、RTOSの処理として、タスク切り替えの許可処理が行われる。
最後にS450にて、タスク終了用のシステムコールをコールして、当該噴射量算出タスクを終了させる。すると、RTOSにより、他のタスクに切り替えるためのタスク切り替え処理が行われることとなる(S460)。
(5)CPU2では、図6の右側に示すように、RTOSが実行対象のタスクを切り替える際に、そのRTOSの処理として、タスク切り替え処理が実行されるが、そのタスク切り替え処理中において、FIFOバッファ51内にデータがあるか否かが判定され、データがあれば(FIFOバッファ51が空でなければ)、FIFOバッファ51からRAM33へデータを書き込む書込処理が行われるようになっている。そして、この書込処理は、第1実施形態のライトコントロール部57と同じ役割を果たすものである。つまり、本第3実施形態では、CPU2のRTOSによって第2転送手段の機能が実現されている。
このため、本第3実施形態のECUでは、CPU1側でセンサ処理タスクが実行されて、CPU1のRAM23とFIFOバッファ51の記憶データが更新されても、その時にCPU2側で噴射量算出タスクが実行されていたならば、FIFOバッファ51からCPU2のRAM33へのデータ書き込みは行われず、その噴射量算出タスクが終了して、他のタスクに切り替えられる際に、FIFOバッファ51からRAM33へのデータ書き込みが行われることとなる。よって、次回の噴射量算出タスクでは、最新のデータを用いて燃料噴射量を算出することとなる。
以上のような第3実施形態によれば、FIFOコントローラ53のライトアクセス検出器55を起動する機能をCPU1側のRTOSが受け持ち、また、FIFOバッファ51からRAM33へデータを書き込む機能をCPU2側のRTOSが受け持つことから、それらの機能がアプリケーションプログラムにとっては隠蔽されることとなる。
このため、CPU1,2で実行される各タスクのプログラム(アプリケーションプログラム)としては、シングルCPUタイプの場合と同じプログラムを用いることが可能となる。そして、このような第3実施形態によっても、第1実施形態と同様の効果を得ることができる。
以上、本発明の一実施形態について説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々なる態様で実施し得ることは勿論である。
例えば、本発明は自動車用の電子制御装置に限らず、他の用途の様々な電子装置について同様に適用することができる。
また、上記各実施形態では、CPU1側で更新されるデータをCPU2が参照する場合について述べたが、その逆もあるのであれば、上記各実施形態にてCPU1側からCPU2側へデータを提供するために設けた構成と同様の構成を、CPU2側からCPU1側へデータを提供するために設ければ良い。
実施形態のエンジン制御ECUの構成を表す構成図である。 第1実施形態における2つのCPUの処理及び両CPU間でのデータの流れを説明する説明図である。 第1実施形態のFIFOバッファ及びFIFOコントローラを説明する説明図である。 第2実施形態の説明図である。 第3実施形態における2つのCPUの処理及び両CPU間でのデータの流れを説明する説明図である。 第3実施形態のFIFOバッファ及びFIFOコントローラを説明する説明図である。 従来の技術を説明する説明図である。
符号の説明
1,2…CPU、3…エンジン制御ECU、5…水温センサ、7…吸気温センサ、11〜17…インジェクタ、21,31…演算器、23,33…RAM、25,35…ROM、27,37…割り込み制御部、29…A/Dコンバータ、41〜47…タイマ、51…FIFOバッファ、53…FIFOコントローラ、55…ライトアクセス検出器、57…ライトコントロール部、59…アンド回路

Claims (9)

  1. 演算結果記憶用のメモリをそれぞれ有した2つのCPUを備え、
    前記2つのCPUのうちの一方が、複数種類のデータを更新して該更新した複数種類のデータを当該CPUのメモリに更新記憶するデータ更新処理を実行し、
    前記2つのCPUのうちの他方が、前記データ更新処理によって更新される複数種類のデータを当該CPUのメモリから読み出して演算に用いるデータ参照処理を実行するように構成される電子装置に用いられ、
    前記一方のCPU(以下、第1CPUという)のメモリ(以下、第1メモリという)から、前記他方のCPU(以下、第2CPUという)のメモリ(以下、第2メモリという)へ、前記複数種類のデータをコピーするCPU間データ転送装置であって、
    前記第1メモリから前記第2メモリへ前記複数種類のデータを転送するために、その複数種類のデータが一時記憶される転送用メモリと、
    前記第1CPUにおいて前記データ更新処理が開始されると起動して、そのデータ更新処理により前記第1メモリへ書き込まれた前記複数種類のデータを、前記転送用メモリへ書き込む第1転送手段と、
    前記第2CPUにおいて前記データ参照処理が実行されていないことを検知すると、前記転送用メモリから前記第2メモリへ前記複数種類のデータを書き込む第2転送手段と、
    を備えていることを特徴とするCPU間データ転送装置。
  2. 請求項1に記載のCPU間データ転送装置において、
    前記第2CPUでは、前記データ参照処理の開始時に割り込みを禁止し、そのデータ参照処理の終了時に割り込みを許可するようになっており、
    前記第2転送手段は、前記第2CPUが割り込み許可状態であるか否かを監視し、該第2CPUが割り込み許可状態であれば、前記第2CPUにおいて前記データ参照処理が実行されていないと判断すること、
    を特徴とするCPU間データ転送装置。
  3. 請求項1又は請求項2に記載のCPU間データ転送装置において、
    前記転送用メモリは、当該転送用メモリから前記第2メモリへのデータ書き込みが行われると、記憶データが消去されるようになっており、
    前記第2転送手段は、前記転送用メモリ内にデータがあり、且つ、前記第2CPUにおいて前記データ参照処理が実行されていないことを検知すると、前記転送用メモリから前記第2メモリへ前記複数種類のデータを書き込むこと、
    を特徴とするCPU間データ転送装置。
  4. 請求項2に記載のCPU間データ転送装置において、
    前記第1CPUは、前記データ更新処理の終了時に、前記第2CPUに対して割り込み要求を発行するようになっており、
    前記第2CPUは、前記第1CPUからの割り込み要求により起動される特定の割り込みルーチンにより、前記転送用メモリから前記第2メモリへ前記複数種類のデータを書き込む処理を行うようになっており、
    前記第2転送手段の機能は、前記第2CPUが前記特定の割り込みルーチンを実行することで実現されること、
    を特徴とするCPU間データ転送装置。
  5. 請求項1ないし請求項4の何れか1項に記載のCPU間データ転送装置において、
    前記第1転送手段は、前記第1CPUが前記データ更新処理の開始時に実行する特定の命令によって起動されるように構成されていること、
    を特徴とするCPU間データ転送装置。
  6. 請求項5に記載のCPU間データ転送装置において、
    前記第1CPUでは、前記データ更新処理の開始時に割り込みを禁止し、そのデータ更新処理の終了時に割り込みを許可するようになっており、
    更に、前記第1CPUでは、割り込み禁止処理用の関数がコールされると、割り込みを禁止する処理と前記第1転送手段を起動する処理とが実行されるようになっており、
    前記第1転送手段は、前記第1CPUにて前記データ更新処理の開始時に前記割り込み禁止処理用の関数がコールされることで起動されること、
    を特徴とするCPU間データ転送装置。
  7. 請求項1に記載のCPU間データ転送装置において、
    前記2つのCPUのうち、少なくとも前記第2CPUでは、各処理のタスクがオペレーティングシステム(以下、OSという)上で実行されるようになっており、
    更に、前記第2CPUでは、OSが実行対象のタスクを切り替える際に、そのOSの処理として、前記転送用メモリから前記第2メモリへ前記複数種類のデータを書き込む書込処理が行われるようになっており、前記第2転送手段の機能は、前記第2CPUのOSによって実現されること、
    を特徴とするCPU間データ転送装置。
  8. 請求項7に記載のCPU間データ転送装置において、
    前記転送用メモリは、当該転送用メモリから前記第2メモリへのデータ書き込みが行われると、記憶データが消去されるようになっており、
    前記第2CPUにおいて、前記書込処理は、前記OSが実行対象のタスクを切り替える際に、前記転送用メモリ内にデータがあれば行われるようになっていること、
    を特徴とするCPU間データ転送装置。
  9. 請求項7又は請求項8に記載のCPU間データ転送装置において、
    前記第1CPUでは、各処理のタスクがOS上で実行されるようになっていると共に、前記データ更新処理のタスクの開始時にタスク切り替えを禁止し、そのタスクの終了時にタスク切り替えを許可するようになっており、
    更に、前記第1CPUでは、前記データ更新処理のタスクの開始時にて、タスク切り替え禁止処理用の関数がコールされると、OSによりタスク切り替えの禁止と前記第1転送手段の起動とが行われるようになっていること、
    を特徴とするCPU間データ転送装置。
JP2005327517A 2005-11-11 2005-11-11 Cpu間データ転送装置 Expired - Fee Related JP4419943B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2005327517A JP4419943B2 (ja) 2005-11-11 2005-11-11 Cpu間データ転送装置
US11/594,853 US7930523B2 (en) 2005-11-11 2006-11-09 Inter-CPU data transfer device
EP06023570.2A EP1785849B1 (en) 2005-11-11 2006-11-13 Inter-CPU data transfer device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005327517A JP4419943B2 (ja) 2005-11-11 2005-11-11 Cpu間データ転送装置

Publications (2)

Publication Number Publication Date
JP2007133744A JP2007133744A (ja) 2007-05-31
JP4419943B2 true JP4419943B2 (ja) 2010-02-24

Family

ID=37946035

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005327517A Expired - Fee Related JP4419943B2 (ja) 2005-11-11 2005-11-11 Cpu間データ転送装置

Country Status (3)

Country Link
US (1) US7930523B2 (ja)
EP (1) EP1785849B1 (ja)
JP (1) JP4419943B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5365551B2 (ja) * 2010-03-05 2013-12-11 トヨタ自動車株式会社 内燃機関制御装置
JP5673576B2 (ja) * 2012-02-01 2015-02-18 トヨタ自動車株式会社 エンジン制御装置
US20160321118A1 (en) * 2013-12-12 2016-11-03 Freescale Semiconductor, Inc. Communication system, methods and apparatus for inter-partition communication
JP6388516B2 (ja) * 2014-10-01 2018-09-12 株式会社小野測器 噴射量計測装置及び方法
JP6337795B2 (ja) * 2015-02-12 2018-06-06 株式会社デンソー 燃料噴射制御装置及び燃料噴射制御方法

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4402046A (en) * 1978-12-21 1983-08-30 Intel Corporation Interprocessor communication system
JPS6191758A (ja) 1984-10-11 1986-05-09 Niles Parts Co Ltd 高速・大容量デ−タ通信装置
JPS62108345A (ja) 1985-11-07 1987-05-19 Fuji Electric Co Ltd デ−タ通信回路
JP2554674B2 (ja) 1987-10-17 1996-11-13 マツダ株式会社 データ収集装置
IT1227360B (it) 1988-11-18 1991-04-08 Honeywell Bull Spa Sistema multiprocessore di elaborazione dati con replicazione di dati globali.
US4967398A (en) * 1989-08-09 1990-10-30 Ford Motor Company Read/write random access memory with data prefetch
JPH058664A (ja) 1991-06-28 1993-01-19 Mazda Motor Corp コントロールユニツトの処理装置
JP2786065B2 (ja) * 1992-08-31 1998-08-13 日本電気株式会社 メモリデータコピー方式
JP3129548B2 (ja) 1992-11-18 2001-01-31 三菱電機株式会社 内燃機関制御装置
JPH07319839A (ja) 1994-05-23 1995-12-08 Hitachi Ltd 分散共有メモリ管理方法及びネットワーク計算機システム
US6249843B1 (en) * 1999-08-05 2001-06-19 International Business Machines Corporation Store instruction having horizontal memory hierarchy control bits
JP2001242929A (ja) 2000-03-02 2001-09-07 Denso Corp 電子制御装置
FR2814555B1 (fr) 2000-09-25 2003-02-28 Thomson Multimedia Sa Systeme et procede de gestion memoire de coherence de donnees et reseau multiprocesseur associe
US7237071B2 (en) * 2001-12-20 2007-06-26 Texas Instruments Incorporated Embedded symmetric multiprocessor system with arbitration control of access to shared resources
US7231638B2 (en) * 2002-12-03 2007-06-12 International Business Machines Corporation Memory sharing in a distributed data processing system using modified address space to create extended address space for copying data

Also Published As

Publication number Publication date
EP1785849A3 (en) 2008-03-19
US7930523B2 (en) 2011-04-19
EP1785849A2 (en) 2007-05-16
US20070109308A1 (en) 2007-05-17
JP2007133744A (ja) 2007-05-31
EP1785849B1 (en) 2018-07-04

Similar Documents

Publication Publication Date Title
JP5816572B2 (ja) 車両用制御装置
JP4920015B2 (ja) 分散制御用制御ソフトウェアおよび電子制御装置
JP3578082B2 (ja) 処理実行装置及び記録媒体
JP4728020B2 (ja) 車両制御用ソフトウェア及び車両制御装置
US20030079065A1 (en) Methods and apparatus for providing data transfer control
US20030014472A1 (en) Thread ending method and device and parallel processor system
JP3610915B2 (ja) 処理実行装置及びプログラム
JP4419943B2 (ja) Cpu間データ転送装置
US20130298136A1 (en) Multiprocessor system
JP2009245009A (ja) 車両制御装置及びマルチコアプロセッサ
JP2005276097A (ja) 割り込み依頼プログラムおよびマイクロコンピュータ
JP5213485B2 (ja) マルチプロセッサシステムにおけるデータ同期方法及びマルチプロセッサシステム
JP2014191655A (ja) マルチプロセッサ、電子制御装置、プログラム
JP6519515B2 (ja) マイクロコンピュータ
JP2004234530A (ja) マイクロコンピュータのロジック開発装置
JP7476638B2 (ja) マルチプロセッサシステム
JP5085719B2 (ja) 車両制御用ソフトウェア及び車両制御装置
JP6981512B2 (ja) 電子制御装置
JP2013062734A (ja) 情報処理装置
JP3617445B2 (ja) 情報処理装置
JP2002312302A (ja) 周辺装置
JP2017016409A (ja) 電子制御装置及びスタック使用方法
JP2013125305A (ja) マルチプロセッサ装置
JP2021060758A (ja) 車両制御装置
JP2001117862A (ja) マイクロコンピュータ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071225

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20081114

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081202

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20091110

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20091123

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121211

Year of fee payment: 3

R151 Written notification of patent or utility model registration

Ref document number: 4419943

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121211

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131211

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees