JP4864056B2 - 制御装置 - Google Patents

制御装置 Download PDF

Info

Publication number
JP4864056B2
JP4864056B2 JP2008226764A JP2008226764A JP4864056B2 JP 4864056 B2 JP4864056 B2 JP 4864056B2 JP 2008226764 A JP2008226764 A JP 2008226764A JP 2008226764 A JP2008226764 A JP 2008226764A JP 4864056 B2 JP4864056 B2 JP 4864056B2
Authority
JP
Japan
Prior art keywords
program
control device
initialization
microcontroller
cpu
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
JP2008226764A
Other languages
English (en)
Other versions
JP2010061419A (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.)
Hitachi Astemo Ltd
Original Assignee
Hitachi Automotive Systems Ltd
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 Hitachi Automotive Systems Ltd filed Critical Hitachi Automotive Systems Ltd
Priority to JP2008226764A priority Critical patent/JP4864056B2/ja
Publication of JP2010061419A publication Critical patent/JP2010061419A/ja
Application granted granted Critical
Publication of JP4864056B2 publication Critical patent/JP4864056B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Retry When Errors Occur (AREA)
  • Hardware Redundancy (AREA)
  • Microcomputers (AREA)

Description

本発明は、アクチュエータを制御するシステムの制御装置に係わり、特に、マイクロコントローラを内蔵する制御装置に関する。
自動車のエンジン制御装置においては、クランク角センサ信号などの入力を基に、燃料の量や噴射タイミングを制御する。エンジン制御には、高機能化にともない、多くの情報を基にした高度な制御が要求される。近年、エンジン制御装置は、マイクロコントローラ(以下、「マイコン」と称する)が内蔵され、あらかじめ処理の手順が記されたプログラムがROM(読み出し専用メモリ)に記憶されている。さらに、マイコンが複数個搭載されたり、マイコンに内蔵されるCPU(中央処理装置)コアが複数になったりすると、処理を並列に実行できるようになり、性能向上や冗長性を活かした高信頼機能が実現できるようになる。
システムの高信頼性機能を実現する技術として、特許文献1には、メモリを二重化する技術が記載されている。この技術は、エラー検出回路を備えるシステムにおいて、メモリとシステムバスを二重化し、メモリから読み出したデータにエラーがないことをエラー検出回路でチェックするものである。
特開平8−16484号公報
マイコンを搭載した制御装置は、ROMに記憶したプログラムに従って処理を実現する。システム起動時には、制御装置は、あらかじめ決められたプログラム番地から処理を開始する。このシステム起動時に実行するプログラムが格納されているROM内の領域に異常が発生した場合は、システムが動作しなくなり、システムダウンとなる。また、CPUコアを複数搭載したマイコンにおいても、1つのCPUコアが故障した場合、それがシステム起動時に使用されるものであれば、この場合もシステムが動作しなくなり、システムダウンとなる。
特許文献1に記載の技術は、CPUコアの故障時については言及がなく、また、エラー検出回路を備え、メモリだけでなくシステムバスやシステムバス制御装置も二重化するので、システムの規模が大きくなり、コストの上昇や運用・管理の煩雑さが予想される。
本発明は、ROMなどのメモリやCPUコアをはじめとするハードウェアに異常が発生した場合でも、異常を回避しシステムダウンを防止することのできる制御装置を、簡易な構成で提供することを目的としている。
本発明の制御装置は、上記課題を解決するために、次のような特徴を有する。
同じ機能を実現する複数の機能実現手段を有する制御装置であって、前記機能実現手段を切替により選択する切替手段を有し、起動時および異常発生後の再起動時に、前記切替手段は、複数の前記機能実現手段の中から使用対象となるべき機能実現手段を切替動作によって選択し、機能実現手段に異常があった場合、次回の起動時には異なる機能実現手段を選択することを特徴とする。
また、同じ機能を実現する複数の機能実現手段を有する制御装置において、前記制御装置の起動時および再起動時に所定の割当て手順に従って、使用対象となる機能実現手段を複数の前記機能実現手段の中から切替により選択する切替手段を有し、この切替手段は、選択された機能実現手段に異常が生じた場合には、異常が生じた機能実現手段を前記割当て手順から除外して割当て手順を再編し、以後の再起動時の機能実現手段を切替により選択することを特徴とする。
上記の機能実現手段とは、制御装置が備えるマイクロコントローラが実行するプログラム、またはこのマイクロコントローラが備えるCPUのコアである。
本発明によれば、マイコンを搭載した制御装置において、同じ機能を実現するハードウェアを複数備え、マイコンの起動時やリセット(再起動)時毎にこれらのハードウェアを切り替えて動作させることで、システムダウンを回避することができる。
本発明は、マイコンの起動時やリセット(再起動)時毎にハードウェアを所定の割当て手順、例えばローテーションに従って切り替えることを特徴とするものであり、以下の実施例では、切り替えるハードウェアの例として、メモリの番地、CPUコア、およびメモリの番地とCPUコアの両者の場合について説明する。マイコンは、システムの稼動時にリセットされるものとする。なお、本実施例では、電源投入後のマイコンの起動もリセットと称し、CPUコアのことを単に「CPU」と称する。
実施例1は、同じ初期化処理プログラムをメモリ内に2つ持つことにより、初期化処理プログラムを格納したメモリ領域に異常が発生した場合でもシステムダウンを回避できることを示す例である。本実施例では、マイコンのリセット毎にプログラムの開始番地を切り替えることにより、メモリ内の初期化処理プログラムを切り替える。
図1は、本発明の一実施形態を示す制御装置の構成図である。制御装置1は、1つまたは複数のセンサ3および1つまたは複数のアクチュエータ2に接続され、また、ネットワーク4を介して他の制御装置5と通信し、システムを制御する。さらに、制御装置1は、マイコンA11、マイコンB12、および1つまたは複数の周辺IC(集積回路)13を搭載する。
マイコンA11は、マイコンB12、および周辺IC13と接続されている。また、マイコンA11は、制御装置1が制御を実行するのに必要なプログラムやデータが格納されたFlashROM(フラッシュメモリ)112、RAM(ランダムアクセスメモリ)113、プログラム起動制御部111、DMA(ダイレクトメモリアクセス)コントローラ115、例外発生識別子格納部117、CPU(中央処理装置)114、および周辺モジュール116から構成される。CPU114は、起動時にプログラム起動制御部111に格納された起動識別子に従い、FlashROM112に格納されたプログラムの処理を指定番地から開始し、制御装置1の制御を実施する。
マイコンB12は、マイコンA11と同様の構成でもよいし、他の任意の構成でもよい。以下では、マイコンA11に着目し、マイコンA11での処理について説明する。
図2は、プログラム起動制御部111の構成図である。プログラム起動制御部111は、起動識別子格納部1111と起動テーブル1112とから構成される。
起動識別子格納部1111は、プログラム起動を行う起動識別子が格納されている。電源投入時は、起動識別子は不定値となる。
起動テーブル1112は、起動識別子、開始番地、および開始許可が記録されているテーブルであり、先に述べた所定のローテーション(割当て手順)が記録されている。プログラムは、起動識別子に従い、指定されている開始番地から実行を開始する。開始番地とは、プログラムを開始するメモリの番地であり、開始許可に従い、該当する開始番地からプログラムが開始される。
開始許可は、該当する開始番地からプログラムを開始することの許可/禁止を設定するためのものであり、プログラムは、「許可」に設定された開始番地から開始されるが、「禁止」に設定された開始番地からは開始されない。すなわち、「禁止」に設定された開始番地は、ローテーションから除外される。ローテーションは、このような開始許可の許可/禁止の設定により再編される。なお、開始許可が「許可」に設定されている起動識別子が1つだけの場合も、ローテーションに含める。
図2の起動テーブル1112の例では、起動識別子が起動_0の場合は、開始番地が0x0000で開始許可が「許可」であるので、プログラムは0x0000番地から開始する。起動識別子が起動_1の場合は、開始番地が0x2000で開始許可が「許可」であるので、プログラムは0x2000番地から開始する。
開始許可が「禁止」、すなわち開始が禁止されている場合には、該当する起動識別子は選択されず、起動識別子格納部1111に格納されない。例えば、起動_1の開始許可が「禁止」に設定された場合、0x2000番地からプログラムがスタートするケースはない。プログラムは、開始許可が「許可」と設定されている開始番地だけから開始する。図2の例で起動_1の開始許可が「禁止」に設定された場合は、常に起動_0の0x0000番地からプログラムがスタートすることになる。開始許可が「許可」と設定されている開始番地が複数ある場合は、プログラムの開始番地は、起動テーブル1112に記録されている順に切り替わる。
図3は、マイコンA11のリセット時からプログラム開始までの処理フローを示した図である。図2のプログラム起動制御部111の構成図を用いて、本処理フローを説明する。なお、電源投入後の起動時の処理は、起動識別子の値が不定であること以外は、リセット時の処理と同様である。以下では、電源投入後の起動時の処理も、リセット時の処理に含めて説明する。
まず処理191で、マイコンA11がリセット(電源投入時は起動)される。
処理192では、起動識別子格納部1111に格納してある起動識別子が有効な値であるか、すなわち不定値でないかを判別する。これは、電源投入時には、起動識別子が不定値になっているためである。なお、起動識別子格納部1111は、システム電源が保持されている場合は、リセットが発生しても初期化されないため、前回のリセット時にセットされた値が保持されている。
処理192で判定がYES、すなわち起動識別子が有効な値である場合、処理193を実施する。処理193は、起動テーブル1112に記録されている起動識別子のうち、開始許可が「許可」と設定されている起動識別子であって、現在、起動識別子格納部1111に保存してある起動識別子の次に記録されているものを起動識別子格納部1111に格納する。例えば図2の例では、現在の起動識別子が起動_0であれば、起動_1を格納する。このとき、現在の起動識別子は上書きされ、新たに格納された起動識別子である起動_1だけが起動識別子格納部1111に保存される。もし、現在の起動識別子が起動テーブル1112の最後に記録されている起動識別子であれば、最上位に記録されている起動識別子に戻って、開始許可が「許可」と設定されている起動識別子を格納する。
処理192で判定がNO、すなわち起動識別子が不定値である場合は、処理194を実施する。処理194では、起動テーブル1112の最上位に記録されている起動識別子である起動_0を、デフォルトの起動識別子として保存する。もし、最上位に記録されている起動識別子の開始許可が「禁止」である場合は、その起動識別子を飛ばし、開始許可が「許可」である次の起動識別子を保存する。
以上のように、本処理フローでは、開始許可が「禁止」であるものを除いて、起動識別子を起動識別子格納部1111に順に保存する。
処理193または処理194が終了したら、処理195に進む。処理195では、起動識別子格納部1111に格納してある起動識別子に対応する開始番地にジャンプして、プログラムの処理を開始する。例えば、起動_1が起動識別子格納部1111に保存されている場合、起動テーブル1112に従い0x2000番地から処理を開始する。
このようにして、マイコンA11は、リセット毎にプログラムの開始番地を切り替えることができる。
図4は、マイコンのリセット毎に起動識別子が切り替わる様子を示したチャート図である。図2と図3を用いて、本チャート図を説明する。
図4の上図は、通常ケースであり、システムが正常に稼動している場合の例である。
時刻t1801で電源が投入(パワーON)されシステムが稼動(システムON)されると、マイコンA11のリセットが発生し、図3の処理フローに従ってプログラム開始処理が実施される。このとき、起動識別子格納部1111には、不定値が入っているため、起動_0が格納され、プログラムは、起動_0に対応する開始番地0x0000から開始される。
時刻t1802でシステムが停止(システムOFF)した後、時刻t1803でシステムがONになると、マイコンA11のリセットが発生し、図3の処理フローに従ってプログラム開始処理が実施される。このときは、起動識別子格納部1111に起動_0が既に格納されているので、次の起動識別子である起動_1が格納され、プログラムは、起動_1に対応する開始番地0x2000から開始される。
以後、システムがOFFした後、システムがONになりマイコンA11のリセットが発生する度に、起動テーブル1112に記録されている順に従って、起動識別子が起動識別子格納部1111に格納される。プログラムの開始番地も、起動テーブル1112に記録されている順に従って切り替わる。図2の例では、起動_0と起動_1が順に切り替わって起動識別子格納部1111に格納される。従って、プログラムは、開始番地0x0000と0x2000が交互に切り替わって開始される。
図4の下図は、異常ケースの例であり、FlashROM112の0x0000番地またはその付近の番地に異常が発生したため、起動_0による動作が異常となるケースである。
時刻t1811にパワーONとシステムONになると、通常ケースと同様に、マイコンA11のリセットが発生し、起動_0が選択される。プログラムは、起動_0に対応する開始番地0x0000から開始される。
このとき、0x0000番地またはその付近のメモリが異常なため、時刻t1812でプログラムが誤動作する。マイコンA11は、この誤動作による例外を処理するとリセットが発生する。このリセットにより、次に起動_1が割り当てられる。
時刻t1813でシステムがOFFとなった後、時刻t1814でシステムがONになると、マイコンA11のリセットが発生する。このリセットでは、再度、起動_0が割り当てられるが、時刻t1811のシステムON時と同様にプログラムの誤動作が起こり、例外処理により時刻t1815でリセットが発生する。
このときのリセットで、起動_0でプログラム開始時の誤動作によるリセットが2回連続で発生したため、例外処理により、起動_0での起動は異常が発生するとマイコンA11が判断し、起動テーブル1112の起動_0の開始を「禁止」と設定する(図4下図内の起動テーブル1112参照)。これ以降のリセット時は、起動_0によりプログラムが開始されることはなく、起動_0以外の起動識別子が選択される。図4の起動テーブル1112の例では、起動_1のみが繰り返し選択される(図4の時刻t1817)。これにより、メモリ異常によるプログラムの誤動作発生を回避するとともに、システムダウンも回避することができる。例外処理の詳細については、後述する。
なお、上記の例では、プログラムの誤動作によるリセットが2回連続で発生したときに異常が発生したと判断したが、連続でなくても累積で2回リセットが発生したときに、異常が発生したと判断するようにしてもよい。また、異常が発生したと判断するリセットの回数は、2回に限るものではなく、例えば3回以上でもよい。この回数は、あらかじめ規定しておくことができる。
図5は、FlashROM112に格納されているプログラムのメモリ上の配置図である。FlashROM112内の0x0000番地と0x2000番地には、それぞれ初期化処理(#0)1121と初期化処理(#1)1122とが配置されている。初期化処理1121と1122の内容は同じである。また、0x3000番地には、メイン処理1123が配置されている。
初期化処理1121と1122は、システムを起動するとともにシステムダウンを避けるための必要最低限の処理であり、システムに応じて異なる。図2の起動テーブル1112に示したように、起動識別子が起動_0の場合は0x0000番地に格納されている初期化処理1121が、起動_1の場合は0x2000番地に格納されている初期化処理1122が、それぞれ実行される。プログラムが開始され、初期化処理1121または初期化処理1122が終了すると、メイン処理1123に移り、システムのメイン処理が実行される。
なお、図4の異常ケースに示したように、起動_0に異常が発生した場合は、時刻t1812からt1813まで、および時刻t1815以降は、初期化処理(#1)1122が実施された後に、メイン処理1123が実施される。時刻t1811と時刻t1814のリセット時では、初期化処理(#0)1121で異常が発生するため、メイン処理1123は実施されない。
このように、起動時に実施する初期化処理のプログラムを格納したメモリ領域に異常が発生しても、メモリ内に初期化処理を複数備えてそれらを切り替えて実施することで、メモリの異常を回避し、プログラムの誤動作やシステムダウンを避けることができる。
異常発生時の例外処理を、図6に示した異常発生時の例外処理フロー図を用いて説明する。
異常により例外が発生した後、処理171では、起動識別子格納部1111に格納してある起動識別子を、例外発生識別子格納部117(図1参照)に保存する。
処理172で、例外処理ハンドラを起動し、例外を処理してプログラムを続行する。
処理173では、例外発生識別子格納部117に保存された起動識別子を読み出し、過去に同じ起動識別子で例外が発生していないか、発生している場合は発生の連続回数または累積回数を調べる。例外発生の連続回数または蓄積回数が規定以上の場合は、その起動識別子を異常と判定する。図4の異常ケースの例では、起動_0が2回連続して例外を発生しており、その時点で起動_0を異常と判定している。
処理173で異常と判定した場合は、処理174に進み、起動テーブル1112の該当起動識別子の開始許可を「禁止」に設定する。これにより、起動_0によるプログラム開始を回避することができる。
処理173または処理174が終了したら、処理175に進んでマイコンのリセットを発生させ、図4のチャート図に示したように処理を続行する。
実施例1では、1つのCPUを搭載し、同じ初期化処理プログラムを2つ持つことにより、初期化処理に異常が発生した場合でもシステムダウンに至らないことを示した。実施例2では、複数のCPUコア(CPU)を搭載するマイコンにおいて本発明を実施した場合を示す。本実施例は、マイコンのリセット毎にCPUを切り替えるものである。
図7は、本実施例における制御装置の構成図である。制御装置6は、1つまたは複数のセンサ8および1つまたは複数のアクチュエータ7に接続され、また、ネットワーク9を介して他の制御装置10と通信し、システムを制御する。さらに、制御装置6は、マイコンA61、マイコンB62、および1つまたは複数の周辺IC63を搭載する。
マイコンA61は、マイコンB62、および周辺IC63と接続されている。また、マイコンA61は、制御装置6が制御を実行するのに必要なプログラムやデータが格納されたFlashROM612、RAM613、プログラム起動制御部611、DMAコントローラ615、例外発生識別子格納部617、および周辺モジュール616から構成される。さらに、マイコンA61は、3つのCPU、すなわちCPU(0)614a、CPU(1)614b、およびCPU(2)614cを搭載する。CPU(0)614a、CPU(1)614b、およびCPU(2)614cは、起動時にプログラム起動制御部611に従い、FlashROM612に格納されたプログラムの処理をそれぞれの指定番地から開始し、制御装置6の制御を実施する。なお、本実施例では3つのCPUがマイコンA61に搭載されているが、CPUの数はこれに限るものではなく、複数であればよい。
実施例1と同様に、マイコンB62は、マイコンA61と同様の構成でもよいし、他の任意の構成でもよい。以下では、マイコンA61に着目し、マイコンA61での処理について説明する。
図8は、プログラム起動制御部611の構成図である。プログラム起動制御部611は、CPU割当テーブル6111とCPUプログラム起動テーブル6112とから構成される。
CPU割当テーブル6111には、物理CPU、論理CPU、LOCK、および開始許可のデータが格納されており、先に述べた所定のローテーションが記録されている。物理CPUは、CPUそのものを物理的に識別する識別子であり、マイコンA61が備えるCPUに対するデータである。論理CPUは、論理的にCPUを識別する識別子であり、CPUプログラム起動テーブル6112により、プログラムを開始するメモリ上の番地(開始番地)が決まっている。電源投入時は、論理CPUは不定値となる。
LOCKは、物理CPUと論理CPUとの対応(割当て)を切り替えずに、現在の設定を固定にしておくために設けられたフラグである。LOCKの値が「unlock」の場合は、マイコンA61のリセット毎に論理CPUに割り当てられる物理CPUが切り替わり、「lock」の場合は、切り替わらず割当てがロックされる。
開始許可は、該当するCPUに対してプログラムを開始することの許可/禁止を設定するためのものである。LOCKの値が「unlock」であると開始許可は「許可」であり、「lock」であると開始許可は「禁止」となる。「許可」に設定されたCPUのみが処理を実行し、「禁止」に設定されたCPUは実行しない。すなわち、「禁止」に設定されたCPUは、ローテーションから除外される。ローテーションは、このような開始許可の許可/禁止の設定により再編される。なお、開始許可が「許可」に設定されているCPUが1つだけの場合も、ローテーションに含める。
これらのテーブル情報により、CPUに故障が発生した場合は、そのCPUの動作そのものを停止することができる。また、プログラムを格納するメモリ領域に異常が発生した場合には、そのプログラムを実行する論理CPUを開始禁止にすることで、メモリの異常領域に格納されたプログラムの実行を回避することもできる。
図9は、マイコンA61のリセット時からプログラム開始までの処理フローを示した図である。図8のプログラム起動制御部611の構成図を用いて、本処理フローを説明する。なお本実施例でも、電源投入後の起動時の処理は、論理CPUの値が不定であること以外は、リセット時の処理と同様である。以下では、電源投入後の起動時の処理も、リセット時の処理に含めて説明する。
まず処理691で、マイコンA61がリセット(電源投入時は起動)される。
処理692では、CPU割当テーブル6111に格納してある、物理CPU(CPU(0))に該当する論理CPUが有効な値であるか、すなわち不定値でないかを判別する。これは、電源投入時には、論理CPUの値が不定になっているためである。なお、CPU割当テーブル6111は、システム電源が保持されている場合は、リセットが発生しても初期化されないため、前回のリセット時にセットされた値が保持されている。
処理692で判定がYES、すなわち論理CPUが有効な値である場合、処理693を実施する。処理693は、CPU割当テーブル6111で最上位に記録されている物理CPUに対応させる(割り当てる)論理CPUを切り替える。例えば、現在、物理CPUであるCPU(0)に割り当てられている論理CPUがCPU_Aであれば、この割当てを変更し、CPU_Cを割り当てる。この割当ては、CPUプログラム起動テーブル6112に記録されている順(本実施例では下から上へ)に従って行うことができる。
この際、CPU割当テーブル6111の最上位に記録されている物理CPUのLOCKの値が「lock」であれば、この物理CPUは、論理CPUの割当てが変更されない。この場合、その物理CPUを飛ばし、次のLOCKの値が「unlock」である物理CPUに対し、割り当てる論理CPUを切り替える。
処理692で判定がNO、すなわち論理CPUが不定値の場合は、処理694を実施する。処理694では、論理CPUが不定値であるので、あらかじめ規定したデフォルトの論理CPUを物理CPUのCPU(0)に設定する。本実施例では、デフォルトの論理CPUをCPU_Aとしている。
処理693または処理694が終了したら、処理695に進む。処理695では、CPU(0)に対する論理CPUの割当てを基準に、CPU(1)以降の論理CPUの割当てを実施する。上記の例では、CPU(0)にはCPU_Aが割り当てられているので、CPU(1)とCPU(2)には、それぞれCPU_BとCPU_Cが割り当てられる。
この際、CPU割当テーブル6111でLOCKの値が「lock」である物理CPUに関しては、割当てが変更されない。この場合、その物理CPUを飛ばし、次のLOCKの値が「unlock」である物理CPUに対し、割り当てる論理CPUを切り替える。
処理696では、各論理CPUは、CPUプログラム起動テーブル6112に従って開始番地にジャンプし、プログラムの処理を開始する。このとき、開始許可が「禁止」に設定されているCPUは、処理を実行しない。
このようにして、マイコンA61は、リセット毎に物理CPUと論理CPUの割当てを変更することで、物理CPUが処理するプログラムが格納されているメモリ上の番地、すなわち、物理CPUが実際に処理するプログラムの内容を切り替えることができる。また、物理CPUが処理を実行できなくすることもできる。
図10は、マイコンのリセット毎に物理CPUと論理CPUの割当てが切り替わる様子を示したチャート図である。図8と図9を用いて、本チャート図を説明する。なお、図10では簡略化のために、時刻t6801の後はマイコンがリセットされる時刻のみを示したが、図4と同様に、システムが停止(システムOFF)した後、システムが稼動(システムON)してマイコンのリセットが発生する。
図10の上図は、通常ケースであり、システムが正常に稼動している場合の例である。
時刻t6801で電源が投入(パワーON)されてシステムONになると、マイコンA61のリセットが発生し、図9の処理フローに従ってプログラム開始処理が実施される。
このとき、CPU割当テーブル6111の論理CPUには不定値が入っているため、デフォルトの論理CPU(CPU_A)が物理CPUであるCPU(0)に設定される。また、CPU(1)とCPU(2)には、CPU_BとCPU_Cがそれぞれ割り当てられる。
以後、時刻t6802、t6803、およびt6804でマイコンA61のリセットが発生する度に、CPUプログラム起動テーブル6112に記録されている順(本実施例では下から上へ)に従って、物理CPUと論理CPUとの割当てが切り替わる。従って、各物理CPUが処理するプログラムの内容も切り替わる。
図10の下図は、異常ケースの例であり、CPU(1)が故障して動作が異常となるケースである。
時刻t6811にパワーONとシステムONになると、通常ケースと同様に、マイコンA61のリセットが発生し、CPU(1)にはCPU_Bが割り当てられる。このとき、CPU(1)は故障しているため、マイコンA61がプログラムを実行すると、CPU_Bに異常が発生する。
このCPU_Bの異常発生により、マイコンA61は例外を処理し、時刻t6812でリセットが発生する。このリセットにより、故障しているCPU(1)にはCPU_Aが割り当てられる。このときは、マイコンA61がプログラムを続行すると、CPU_Aに異常が発生する。
このように、CPU(1)が割り当てられている論理CPUの異常によるリセットが2回連続して発生したため、例外処理により、CPU(1)は、異常と判定され、論理CPUがCPU_Cに割り当てられるとともに、LOCKの値が「lock」に、開始許可が「禁止」に設定される(図10下図内のCPU割当テーブル6111参照)。これにより、異常が発生したCPU(1)では、プログラムが実行されなくなる。また、CPU_Cが実行されないため、開始番地0x4000に格納されたプログラムは開始されない。
時刻t6813以降は、マイコンA61のリセット毎に、CPU(0)とCPU(2)のみに対して、CPU_AとCPU_Bの割当てを切り替えることになる。従って、プログラムは、物理CPUはCPU(0)とCPU(2)だけで、論理CPUはCPU_AとCPU_Bだけで、実行される。これにより、CPUの異常によるプログラムの誤動作発生を回避するとともに、システムダウンも回避することができる。例外処理の詳細については、後述する。
なお、上記の例では、リセットが2回連続して発生したときにCPUに異常が発生したと判断したが、実施例1と同様に、連続でなくても累積で2回リセットが発生したときに、異常が発生したと判断するようにしてもよい。また、この異常が発生したと判断するリセットの回数も実施例1と同様に、2回に限るものではなく、例えば3回以上でもよい。この回数は、あらかじめ規定しておくことができる。
図11は、FlashROM612に格納されているプログラムのメモリ上の配置図である。FlashROM612内の0x0000番地、0x2000番地、および0x4000番地には、各論理CPU、すなわちCPU_A、CPU_B、CPU_Cにより開始されるプログラムが格納されている。それぞれの論理CPUが開始するプログラムの内容については、例えばメイン処理はCPU_Aで実行し、メイン処理に先立つ初期化処理など補助的な処理はCPU_BおよびCPU_Cで実行するというように決めておく。複数の論理CPU(例えばCPU_BおよびCPU_C)で実行される補助的な処理は、同一のものにすることができる。
補助的な処理を実行するCPUの1つが故障したとき、故障した物理CPUをCPU_CまたはCPU_Bに割り当てて開始禁止にする。このようにすると、補助的な処理を実行するCPUが1つ故障したとしても、他のCPUで初期化処理などの補助的な処理を実行でき、引き続いてメイン処理も実行できるようになるので、プログラムの誤動作やシステムダウンを避けることができる。
異常発生時の例外処理を、図12に示した異常発生時の例外処理フロー図を用いて説明する。
異常により例外が発生した後、処理671では、CPU割当テーブル6111に格納してある物理CPUのうち、例外を発生させた物理CPUを例外発生識別子格納部617に保存する。
処理672で、例外処理ハンドラを起動し、例外を処理してプログラムを続行する。
処理673では、例外発生識別子格納部617に保存された物理CPUを読みだし、過去に同じ物理CPUで例外が発生していないか、発生している場合は発生の連続回数または累積回数を調べる。例外発生の連続回数または蓄積回数が規定以上の場合は、その物理CPUを異常と判定する。図10の異常ケースの例では、CPU(1)が2回連続して例外を発生しており、その時点でCPU(1)を異常と判定している。
処理673で異常と判定した場合は、処理674に進む。この処理では、該当物理CPUがメイン処理を実行する論理CPU(図11の説明で用いた例ではCPU_A)に現在割り当てられているかどうかを判定する。この判定をここで行うのは、もし、該当物理CPUがメイン処理を担当する論理CPUに割り当てられている場合に、次の処理675で行う、CPU割当テーブル6111のLOCKを「lock」に設定し開始許可を「禁止」に設定する処理を実施すると、この論理CPU(CPU_A)で行うメイン処理が実行できなくなるからである。
これを回避するために、この時点でのCPU割当テーブル6111のLOCKや開始許可の設定は避け、次回以降に該当物理CPU(CPU(1))がメイン処理を行わない論理CPUに割り当たったときに、LOCKを「lock」に、開始許可を「禁止」に設定する。このようにして、メイン処理を実行する論理CPUが常時処理を実行できるようにする。
処理674で該当物理CPUがメイン処理を実行する論理CPUに割り当てられていないと判定した場合は、処理675に進む。この処理では、CPU割当テーブル6111における該当物理CPUのLOCKを「lock」に設定し、開始許可を「禁止」に設定する。こうすることにより、該当物理CPU(CPU(1))によるプログラム開始を回避することができる。
処理673、処理674、または処理675が終了したら、処理676に進んでマイコンのリセットを発生させ、図10のチャート図に示したように処理を続行する。
実施例1では、プログラムの開始番地を切り替える実施例を示し、実施例2では、プログラムを実行するCPUを切り替える実施例を示した。本実施例は、上記2つの実施例での処理を並行して実行し、所定のローテーションに従って、プログラムを実行するCPUを切り替えるとともに、その各CPUでもプログラムの開始番地を切り替える例である。すなわち、実施例2で記載したように論理CPUを切り替えたときに、その論理CPU毎に、実施例1で記載したように実行するプログラムの開始番地を切り替える。
本実施例における制御装置の構成図は、実施例2で示した図7と同様である。マイコンA61は、複数のCPUを搭載する。ただし、プログラム起動制御部611は、実施例1の図2に示した起動識別子格納部1111および起動テーブル1112、ならびに実施例2の図8に示したCPU割当テーブル6111およびCPUプログラム起動テーブル6112を備える。
FlashROM112に格納されているプログラムのメモリ上の配置も、実施例1(図5)と実施例2(図11)とを合わせたものである。すなわち、図11のように各CPUにプログラムが割り当てられるが、その割り当てられるプログラムは、図5のように各CPUに対し複数(図5の例では2つ)である。
マイコンA61の処理内容も、実施例1と実施例2とを合わせたものである。まず、実施例2のように所定のローテーションに従ってCPUを切り替えた後、それぞれのCPUに対して、実施例1のように所定のローテーションに従ってプログラムの開始番地を切り替える処理を行う。処理フローやチャートは、実施例1と実施例2とで用いたものを利用することができる。
本実施例により、実施例2で記載したCPU故障時のシステムダウンの回避と、実施例1で記載したプログラム故障によるシステムダウンの回避との両方を実施することができる。
本発明は、自動車制御をはじめとして、マイコンを内蔵した制御装置に適用可能である。
本発明の一実施形態(実施例1)を示す制御装置の構成図である。 実施例1におけるプログラム起動制御部の構成図である。 実施例1におけるリセット時の処理フローを示した図である。 実施例1における起動識別子が切り替わる様子を示したチャート図である。 実施例1におけるFlashROM内のプログラムの配置図である。 実施例1における異常発生時の例外処理フロー図である。 本発明の別の実施形態(実施例2)を示す制御装置の構成図である。 実施例2におけるプログラム起動制御部の構成図である。 実施例2におけるリセット時の処理フローを示した図である。 実施例2におけるCPUの割当てが切り替わる様子を示したチャート図である。 実施例2におけるFlashROM内のプログラムの配置図である。 実施例2における異常発生時の例外処理フロー図である。
符号の説明
1…制御装置、2、7…アクチュエータ、3、8…センサ、4、9…ネットワーク、5、10…制御装置、6…制御装置、11…マイコンA、12、62…マイコンB、13、63…周辺IC、61…マイコンA、111…プログラム起動制御部、112…FlashROM、113、613…RAM、114…CPU、115、615…DMAコントローラ、116、616…周辺モジュール、117…例外発生識別子格納部、611…プログラム起動制御部、612…FlashROM、614a…CPU(0)、614b…CPU(1)、614c…CPU(2)、617…例外発生識別子格納部、1111…起動識別子格納部、1112…起動テーブル、6111…CPU割当テーブル、6112…CPUプログラム起動テーブル、1121…初期化処理(#0)、1122…初期化処理(#1)、1123…メイン処理。

Claims (16)

  1. マイクロコントローラを備える制御装置において、
    前記マイクロコントローラの起動時および再起動時に実行される初期化処理プログラムを複数格納したメモリと、前記初期化処理プログラムを切替により選択する切替手段と、を有し、
    前記切替手段は、前記マイクロコントローラの起動時および前記マイクロコントローラの再起動時に、複数の前記初期化処理プログラムの中から使用対象となるべき初期化処理プログラム、所定の割当て手順に従って切替動作によって選択し、前記マイクロコントローラの再起動時には、前記マイクロコントローラが前回起動したときに実行された初期化処理プログラムと異なる初期化処理プログラム前記切替動作により選択することを特徴とする制御装置。
  2. マイクロコントローラを備える制御装置において、
    前記マイクロコントローラの起動時および再起動時に実行される初期化処理プログラムを実行する複数の演算処理手段と、前記演算処理手段が実行する処理を切替により選択する切替手段と、を有し、
    前記切替手段は、前記マイクロコントローラの起動時および前記マイクロコントローラの再起動時に、複数の前記演算処理手段のそれぞれが実行する処理を、所定の割当て手順に従って切替動作によって選択し、前記マイクロコントローラの再起動時には、複数の前記演算処理手段のそれぞれが、前記マイクロコントローラが前回起動したときに実行した処理とは異なる処理を実行するように前記切替動作を行うことを特徴とする制御装置。
  3. マイクロコントローラを備える制御装置において、
    前記マイクロコントローラの起動時および再起動時に実行される初期化処理プログラムを複数格納したメモリと、前記初期化処理プログラムを実行する複数の演算処理手段と、前記演算処理手段が実行する処理を切替により選択するとともに前記初期化処理プログラムを切替により選択する切替手段と、を有し、
    前記切替手段は、前記マイクロコントローラの起動時および前記マイクロコントローラの再起動時に、複数の前記演算処理手段のそれぞれが実行する処理と、複数の前記初期化処理プログラムの中から使用対象となるべき初期化処理プログラムと、所定の割当て手順に従って切替動作によって選択し、前記マイクロコントローラの再起動時には、複数の前記演算処理手段のそれぞれが、前記マイクロコントローラが前回起動したときに実行した処理とは異なる処理を実行するように前記切替動作を行い、その後、複数の前記演算処理手段のうち前記初期化処理プログラムを実行する演算処理手段が、前記マイクロコントローラが前回起動したときに実行した初期化処理プログラムとは異なる初期化処理プログラムを実行するように前記切替動作を行うことを特徴とする制御装置。
  4. 請求項1記載の制御装置において、
    前記切替手段は、選択された初期化処理プログラムを格納したメモリ領域に異常が生じた場合には、異常が生じたメモリ領域を前記割当て手順から除外して割当て手順を再編し、以後の前記マイクロコントローラの再起動時の初期化処理プログラムを、前記切替動作により選択することを特徴とする制御装置。
  5. 請求項2記載の制御装置において、
    前記切替手段は、前記演算処理手段に異常が生じた場合には、異常が生じた演算処理手段を前記割当て手順から除外して割当て手順を再編し、以後の前記マイクロコントローラの再起動時に前記演算処理手段のそれぞれが実行する処理を、前記切替動作により選択することを特徴とする制御装置。
  6. 請求項3記載の制御装置において、
    前記切替手段は、選択された初期化処理プログラムを格納したメモリ領域に異常が生じた場合には、異常が生じたメモリ領域を前記割当て手順から除外して割当て手順を再編し、以後の前記マイクロコントローラの再起動時の初期化処理プログラムを、前記切替動作により選択し、前記演算処理手段に異常が生じた場合には、異常が生じた演算処理手段を前記割当て手順から除外して割当て手順を再編し、以後の前記マイクロコントローラの再起動時に前記演算処理手段のそれぞれが実行する処理を、前記切替動作により選択することを特徴とする制御装置。
  7. 請求項記載の制御装置において、
    前記制御装置は、前記初期化処理プログラムの実行を禁止する機能を有し、前記切替手段は、実行が禁止されていない初期化処理プログラムに切り替える制御装置。
  8. 請求項2記載の制御装置において、
    前記制御装置は、前記演算処理手段が実行する処理を固定する機能を有し、前記切替手段は、実行する処理が固定されていない演算処理手段の処理を切り替える制御装置。
  9. 請求項記載の制御装置において、
    前記制御装置は、前記初期化処理プログラムの実行を禁止する機能と、前記演算処理手段が実行する処理を固定する機能と、を有し、前記切替手段は、実行が禁止されていない初期化処理プログラムに切り替えるとともに、実行する処理が固定されていない演算処理手段の処理を切り替える制御装置。
  10. 請求項記載の制御装置において、
    前記制御装置は、実行中に例外が発生した前記初期化処理プログラムを識別できる情報を記憶する例外発生記憶部を備える制御装置。
  11. 請求項2記載の制御装置において、
    前記制御装置は、実行中に例外が発生した前記演算処理手段を識別できる情報を記憶する例外発生記憶部を備える制御装置。
  12. 請求項記載の制御装置において、
    前記制御装置は、実行中に例外が発生した前記初期化処理プログラムと前記演算処理手段を識別できる情報を記憶する例外発生記憶部を備える制御装置。
  13. 請求項記載の制御装置において、
    前記切替手段は、選択された前記初期化処理プログラムの実行中に例外が発生したとき、この初期化処理プログラムに対し、例外発生回数があらかじめ定めた回数以上の場合は、前記割当て手順から除外する制御装置。
  14. 請求項2記載の制御装置において、
    前記切替手段は、選択された前記演算処理手段の処理の実行中に例外が発生したとき、この演算処理手段に対し、例外発生回数があらかじめ定めた回数以上の場合は、前記割当て手順から除外する制御装置。
  15. 請求項記載の制御装置において、
    前記切替手段は、選択された前記初期化処理プログラムの実行中、または選択された前記演算処理手段の処理の実行中に例外が発生したとき、この初期化処理プログラムまたは演算処理手段に対し、例外発生回数があらかじめ定めた回数以上の場合は、前記割当て手順から除外する制御装置。
  16. マイクロコントローラを備える制御装置において、
    前記マイクロコントローラは、切替手段とメモリとCPUとを備え
    前記メモリは、前記マイクロコントローラの起動時および再起動時に実行される初期化処理プログラムを複数格納し、これらの初期化処理プログラムは同じプログラムであり、
    前記CPUは、前記初期化処理プログラムを実行するコアを1つまたは複数備え、
    前記切替手段は、1つまたは複数の前記コアと複数の前記初期化処理プログラムを格納した前記メモリの番地とを対応させ、前記マイクロコントローラの起動時および再起動時にはこの対応関係を切り替えることを特徴とする制御装置。
JP2008226764A 2008-09-04 2008-09-04 制御装置 Expired - Fee Related JP4864056B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008226764A JP4864056B2 (ja) 2008-09-04 2008-09-04 制御装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008226764A JP4864056B2 (ja) 2008-09-04 2008-09-04 制御装置

Publications (2)

Publication Number Publication Date
JP2010061419A JP2010061419A (ja) 2010-03-18
JP4864056B2 true JP4864056B2 (ja) 2012-01-25

Family

ID=42188150

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008226764A Expired - Fee Related JP4864056B2 (ja) 2008-09-04 2008-09-04 制御装置

Country Status (1)

Country Link
JP (1) JP4864056B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102314421B (zh) 2010-06-29 2014-12-10 中兴通讯股份有限公司 一种文件***被破坏后的自救方法和设备
JP2015106226A (ja) * 2013-11-29 2015-06-08 三菱電機株式会社 二重化システム
WO2016132432A1 (ja) * 2015-02-16 2016-08-25 三菱電機株式会社 プロセッサ及びマイクロコンピュータ

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05216855A (ja) * 1992-02-04 1993-08-27 Fujitsu Ltd マルチcpu制御方式
JPH11136427A (ja) * 1997-10-27 1999-05-21 Ricoh Co Ltd ファクシミリ装置
JP3250522B2 (ja) * 1998-07-23 2002-01-28 日本電気株式会社 ファームウエアの入れ替え装置及び入れ替え方法
JP2007286859A (ja) * 2006-04-17 2007-11-01 Ricoh Co Ltd 制御装置および画像形成装置

Also Published As

Publication number Publication date
JP2010061419A (ja) 2010-03-18

Similar Documents

Publication Publication Date Title
KR101110490B1 (ko) 정보 처리 장치, 프로세서 및 메모리 관리 방법
US7750676B2 (en) Embedded system and control method therefor
CN107077407B (zh) 车辆控制装置
WO2016101519A1 (zh) 一种实现操作***重启的方法和装置
JPWO2011016115A1 (ja) リセット方法及び監視装置
JP4864056B2 (ja) 制御装置
JP2007323631A (ja) Cpu暴走判定回路
KR100894251B1 (ko) 다중화된 에스피디 롬을 가지는 메모리 모듈 시스템 및 그부팅 방법
US20160041860A1 (en) Microcomputer and microcomputer system
JP2004338883A (ja) エレベーターの制御装置
JP2011008702A (ja) 故障処理装置
JP2006099704A (ja) 情報処理装置および起動制御方法
TWI750215B (zh) Bios切換裝置
JP2018112977A (ja) マイクロコンピュータ
US20060156194A1 (en) Method for reallocation of a memory of a subsystem, and subsystem
JP2002049509A (ja) データ処理システム
JP6822203B2 (ja) ファームウェア実行装置、ドライバ実行装置、ドライバ管理装置、ファームウェア管理装置、コンピュータ装置、方法およびプログラム
JP4853620B2 (ja) マルチプロセッサシステムと初期立ち上げ方法およびプログラム
JP2006079230A (ja) 半導体回路装置及び暴走検出方法
JP2009025967A (ja) 二重化ファームウェアのバックアップ方式、方法、及び、オペレーティングシステム
JP2008140124A (ja) データ処理装置
JP2011039667A5 (ja)
JP2988518B2 (ja) マルチプロセッサ制御方式
JP4114004B2 (ja) 半導体集積回路
TWI722852B (zh) 固態硬碟以及啟動方法

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20100108

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100804

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110517

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110818

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: 20111011

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: 20111108

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

Free format text: PAYMENT UNTIL: 20141118

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4864056

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees