(57)【要約】【課題】復帰プログラムが転送される領域の制約を低減可能な情報処理装置を提供すること。【解決手段】プログラム３０を記憶する第１のプログラム記憶手段２６と、前記第１のプログラム記憶手段に記憶されたプログラムを実行する演算手段２８と、前記第１のプログラム記憶手段に記憶されたプログラムの異常箇所を特定する異常箇所特定手段３１と、前記異常箇所の機能を、分岐処理を含まないコードで提供する代替プログラムを取得して、第２のプログラム記憶手段に記憶する代替プログラム取得手段３２と、前記演算手段がプログラムを実行する実行アドレスが前記異常箇所に到達すると、前記実行アドレスを前記第２のプログラム記憶手段に記憶された前記代替プログラムの先頭アドレスに変更する実行アドレス変更手段３３と、を有することを特徴とする。【選択図】図３
2014191656.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを記憶する第１のプログラム記憶手段と、
前記第１のプログラム記憶手段に記憶されたプログラムを実行する演算手段と、
前記第１のプログラム記憶手段に記憶されたプログラムの異常箇所を特定する異常箇所特定手段と、
前記異常箇所の機能を、分岐処理を含まないコードで提供する代替プログラムを取得して、第２のプログラム記憶手段に記憶する代替プログラム取得手段と、
前記演算手段がプログラムを実行する実行アドレスが前記異常箇所に到達すると、前記実行アドレスを前記第２のプログラム記憶手段に記憶された前記代替プログラムの先頭アドレスに変更する実行アドレス変更手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記異常箇所特定手段が２箇所目以降の前記異常箇所を特定した場合、
過去に前記第２のプログラム記憶手段に記憶された前記代替プログラムのサイズに応じて、前記異常箇所特定手段が特定した２箇所目以降の前記異常箇所に対応する前記代替プログラムの前記先頭アドレスを計算する先頭アドレス計算手段、を有し、
前記代替プログラム取得手段は、前記先頭アドレス計算手段が計算した前記先頭アドレスに前記代替プログラムを記憶する、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記先頭アドレス計算手段は、前記代替プログラムの最後に、前記実行アドレスを前記異常箇所の次の箇所にジャンプさせる復帰命令を挿入し、
前記代替プログラム取得手段は、前記復帰命令が挿入された前記代替プログラムを、前記第２のプログラム記憶手段の前記先頭アドレスに記憶する、
ことを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記代替プログラム取得手段は、前記代替プログラムと共に前記代替プログラムのプログラム識別情報及び前記先頭アドレスを取得し、
前記実行アドレス変更手段は、前記実行アドレスが前記異常箇所に到達すると、予め保持するテーブルに基づき前記異常箇所に対応する前記プログラム識別情報を特定し、特定した前記プログラム識別情報と一致する、前記プログラム識別情報の前記代替プログラムが記憶された前記先頭アドレスに、前記実行アドレスを変更する、
ことを特徴とする請求項２又は３記載の情報処理装置。
【請求項５】
前記異常箇所特定手段は、前記第１のプログラム記憶手段に記憶されたプログラムの機能毎に分割された箇所単位に異常を検出し、
前記代替プログラムは前記機能毎に作成されている、
ことを特徴とする請求項１〜４いずれか１項記載の情報処理装置。
【請求項６】
前記代替プログラムは、分岐処理で分岐されうる複数の処理を、分岐条件に関わらず１つの処理で代替することで、分岐処理を含まないコードで記述されており、
前記演算手段は前記代替プログラムを実行して、前記異常箇所の機能を提供する、
ことを特徴とする請求項１〜５いずれか１項記載の情報処理装置。
【請求項７】
センサと接続された入力回路と、
前記入力回路が取得した信号が出力される請求項１〜６いずれか１項記載の情報処理装置と、
前記情報処理装置が演算した演算結果をアクチュエータに出力する出力回路と、
を有することを特徴とする車両用電子制御ユニット。
【請求項８】
プログラムを実行する情報処理装置と、代替プログラムを提供するプログラム提供装置と有する情報処理システムであって、
前記情報処理装置は、
プログラムを記憶する第１のプログラム記憶手段と、
前記第１のプログラム記憶手段に記憶されたプログラムを実行する演算手段と、
前記第１のプログラム記憶手段に記憶されたプログラムの異常箇所を検出する異常箇所特定手段と、
前記プログラム提供装置から、前記異常箇所の機能を、分岐処理を含まないコードで提供する前記代替プログラムを取得して、第２のプログラム記憶手段に記憶する代替プログラム取得手段と、
前記演算手段が実行する実行アドレスが前記異常箇所に到達すると、前記実行アドレスを前記第２のプログラム記憶手段における前記代替プログラムの先頭アドレスに変更する実行アドレス変更手段と、を有し、
前記プログラム提供装置は、
前記異常箇所に対応する前記代替プログラムを前記情報処理装置に提供するプログラム提供手段を有する、ことを特徴とする情報処理システム。
【請求項９】
前記プログラム提供装置は、プログラム記憶手段に記憶されている前記代替プログラムを前記情報処理装置に提供するか、又は、車外から前記代替プログラムを取得して前記情報処理装置に提供する、
ことを特徴とする請求項８記載の情報処理システム。
【請求項１０】
第１のプログラム記憶手段に記憶されたプログラムを実行する演算手段に、
前記第１のプログラム記憶手段に記憶されたプログラムの異常箇所を特定する異常箇所特定ステップと、
前記異常箇所の機能を、分岐処理を含まないコードで提供する代替プログラムを取得するステップと、
取得した前記代替プログラムを第２のプログラム記憶手段に記憶する代替プログラム取得ステップと、
前記演算手段がプログラムを実行する実行アドレスが前記異常箇所に到達すると、前記実行アドレスを前記第２のプログラム記憶手段に記憶された前記代替プログラムの先頭アドレスに変更する実行アドレス変更ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置が故障した場合に、第２の記憶装置に記憶されたプログラムを実行する情報処理装置に関する。
【背景技術】
【０００２】
マイコンは、プログラムを格納しているメモリから命令をアドレス順に読み出して、データの読み出し・演算・書き出しなどを行っている。メモリには主にＲＯＭ又はＲＡＭがあるが、プログラムの本体はＲＯＭに記憶されており、ＲＡＭは外部から取得したデータや演算過程の変数などが記憶される。
【０００３】
プログラムは充分な品質管理の後にＲＯＭに記憶された状態でマイコンと共に出荷される。しかしながら、出荷後にＲＯＭのプログラムが書き換わるという故障が生じる可能性がゼロではない。この場合、マイコンを交換するかプログラムを書き換えればよいが、出荷後の製品（例えば車両）内のマイコンを交換することは不可能ではないものの複雑な作業が必要になる。プログラムの書き換えも専用のツールが必要とされる。
【０００４】
このため、マイコンが本来、行うべき処理を最小限行えるように、復帰プログラムを記憶手段（例えばＲＯＭの一部や別のＲＯＭ）に記憶しておく技術が知られている。ＲＯＭの故障が検出された場合、復帰プログラムはＲＡＭに転送され、ＣＰＵはＲＡＭから復帰プログラムを実行する（例えば、特許文献１参照。）。なお、復帰プログラムは故障箇所のプログラムと同等以下の機能を提供するプログラムである。
【０００５】
特許文献１には、ＲＯＭの故障箇所のスタートアドレスを被変更アドレス設定部に設定し、ＲＯＭから実行中のプログラムのアドレスが被変更アドレス設定部のスタートアドレスと一致すると、ジャンプコードを発生させ、変更アドレス設定部に設定されたＲＡＭの変更プログラムのスタートアドレスをプログラムカウンタにセットして、ＲＡＭの変更プログラムを実行する情報処理装置が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−１１０２０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、ＲＡＭに記憶される復帰プログラムは、分岐命令のジャンプ先のアドレスが絶対アドレスで記述されているため、復帰プログラムが記憶されるＲＡＭの領域は復帰プログラムに固有の領域に制限される。これは、復帰プログラムをＲＡＭに転送する際に、ＲＡＭ内の配置位置に応じてジャンプ先のアドレスを書き換えることが困難なためである。復帰プログラムの転送先が制限されるため、以下のような問題が生じる。
【０００８】
図１６は、復帰プログラムをＲＡＭに転送する際の問題を説明する図の一例である。ＲＯＭの故障発生ブロックに対し、予め復帰プログラムＡが用意されている。この復帰プログラムＡは故障発生ブロックの代替処理を行うプログラムである。復帰プログラムＡはアドレスＡから始まる復帰プログラム格納領域に格納される。
【０００９】
マイコンはＲＯＭのプログラムを実行しながら、故障発生ブロックに到達するとＲＡＭのアドレスＡにジャンプする。そして、復帰プログラムの実行後、ＲＯＭの故障発生ブロックの後のアドレスにジャンプする。
【００１０】
しかし、復帰プログラムＡは、ジャンプ先のアドレスが絶対アドレスで記述されているので、他の領域に格納されることができない。したがって、仮に、アドレスＡの復帰プログラム格納領域が別の復帰プログラムで使用されており、アドレスＢから始まる復帰プログラム格納領域が空いていても、復帰プログラムＡをアドレスＢから始まる復帰プログラム格納領域に格納することができない。
【００１１】
このことは、復帰プログラムを格納する領域（先頭アドレス）に専用の復帰プログラムが必要であることを意味する。したがって、復帰プログラムを転送可能なＲＡＭ内の領域に制約があるという問題があった。
【００１２】
本発明は、上記課題に鑑み、復帰プログラムが転送される領域の制約を低減可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明は、プログラムを記憶する第１のプログラム記憶手段と、前記第１のプログラム記憶手段に記憶されたプログラムを実行する演算手段と、前記第１のプログラム記憶手段に記憶されたプログラムの異常箇所を特定する異常箇所特定手段と、前記異常箇所の機能を、分岐処理を含まないコードで提供する代替プログラムを取得して、第２のプログラム記憶手段に記憶する代替プログラム取得手段と、前記演算手段がプログラムを実行する実行アドレスが前記異常箇所に到達すると、前記実行アドレスを前記第２のプログラム記憶手段に記憶された前記代替プログラムの先頭アドレスに変更する実行アドレス変更手段と、を有することを特徴とする。
【発明の効果】
【００１４】
復帰プログラムが転送される領域の制約を低減可能な情報処理装置を提供することができる。
【図面の簡単な説明】
【００１５】
【図１】情報処理装置が解決する課題について説明する図の一例である。
【図２】情報処理装置が解決する課題について説明する図の一例である。
【図３】復帰プログラムの作成方針を示す図の一例である。
【図４】分岐処理をなくす方法について説明する図の一例である。
【図５】レジスタ値とスタックの関係を示す図の一例である。
【図６】情報処理装置がＲＯＭの故障を判断し、ＲＯＭ又はＲＡＭのプログラムを実行する手順を示すフローチャート図の一例である。
【図７】車載システムの概略構成図の一例である。
【図８】ＥＣＵのハードウェア構成図の一例である。
【図９】ＲＯＭのブロックへの分割方法について説明する図の一例である。
【図１０】ホストＥＣＵ等の機能ブロック図の一例である。
【図１１】復帰プログラムのフォーマットの一例である。
【図１２】車載システムの動作手順を示すフローチャート図の一例である。
【図１３】車載システムが有する各ＥＣＵの一例を説明する図である。
【図１４】ＲＡＭに格納される復帰プログラムを模式的に示す図の一例である。
【図１５】格納ＥＣＵのプログラム実行制御部が復帰プログラムを実行する手順を示すフローチャート図の一例である。
【図１６】復帰プログラムをＲＡＭに転送する際の問題を説明する図の一例である。
【発明を実施するための形態】
【００１６】
以下、本発明を実施するための形態について図面を参照しながら説明する。しかしながら、本発明の技術的範囲が、本実施の形態に限定されるものではない。
【００１７】
〔課題について〕
まず、図１、２を用いて、本実施形態の情報処理装置が解決する課題等について詳細に説明する。ＲＯＭにはプログラムの３つのブロックが示されている。ＲＯＭに記憶されているプログラムをＲＯＭプログラム、ＲＡＭに格納されるプログラムを復帰プログラムと称する。ＲＡＭは復帰プログラムの格納以外にも使用されるため、復帰プログラム格納領域が予め定められている。
【００１８】
ＲＯＭプログラムは、機能毎に（サイズは不定）、又は、決まったサイズに分割されている。ブロックの内の１箇所でも故障が発生すると（訂正符号などで訂正できても、書き換えできないＲＯＭであれば）、１つのブロックが故障したものとして扱われる。なお、ブロックの故障の検出にはチェックＳＵＭなどが使用される。
【００１９】
Ｉ．課題１
故障箇所が複数、存在する場合、故障ブロックと故障ブロックに挟まれる、故障が発生していないブロックについても復帰プログラムが必要になる
図１では、故障ブロック１と故障ブロック２に故障が発生している。故障ブロック１と故障ブロック２の間に故障が発生していないブロックがある。分岐先のアドレスが絶対アドレスで記述されているため、故障ブロック１の復帰プログラムはＲＡＭの特定の格納領域にしか格納されることができない。故障ブロック２の復帰プログラムも同様である。このため、アドレスＡから始まる復帰プログラム格納領域が用意されている場合、故障ブロック１から復帰プログラム格納領域の先頭アドレスにジャンプできても、故障ブロック２から復帰プログラム格納領域の先頭アドレスにジャンプすることはできない。逆に、故障ブロック２から復帰プログラム格納領域の先頭アドレスにジャンプできても、ブロック１から復帰プログラム格納領域の先頭アドレスにジャンプすることはできない。このようにどちらか片方のブロックからしか復帰プログラム格納領域の先頭アドレスにジャンプできない。
【００２０】
このような制約があるため、ブロック１と２が故障した場合には、ブロック１からブロック２に至る全てのブロックの復帰プログラムをまとめてＲＡＭの格納領域に転送する必要がある。このため上記課題Iが生じてしまう。
【００２１】
II．課題２
複数の故障したブロックがある場合、組み合わせの数の復帰プログラムの準備が必要になる。
【００２２】
故障ブロック１のみが故障した場合は、故障ブロック１用の復帰プログラムが必要になる。故障ブロック２のみが故障した場合は、故障ブロック２用の復帰プログラムが必要になる。そして課題Ｉで説明したように故障ブロック１と２が故障した場合は、故障ブロック１〜２を含む全てのブロックの復帰プログラムが必要になる。
【００２３】
故障ブロック１〜２を含む全てのブロックのように、ブロック単位でなく、複数ブロックを全て含むブロックの復帰プログラムを用意しておけば、故障ブロック１，２の復帰プログラムは不要になる。しかし、故障箇所が小さくても大きな復帰プログラムが必要になることは好ましくない（復帰プログラムは最小限の機能しか有さないため）。また、どのブロックに故障が生じるかは不明なため、複数のブロックの組み合わせに対応した数の復帰プログラムを用意しておく必要がある。このため上記課題IIが生じてしまう。
【００２４】
また、課題I、課題IIのいずれも、復帰プログラムのために無駄にＲＡＭ容量が必要になるという不都合を生じさせる。
【００２５】
III．課題３
課題１，２のように故障が発生していないブロックの復帰プログラムの用意を不要にするため、ブロック毎に復帰プログラムを用意すると、１つのブロックの復帰プログラムをＲＡＭの転送先のアドレス毎に用意する必要がある。
【００２６】
図２では、故障ブロック１の故障の後に、故障ブロック２に故障が発生している。このため、ＲＡＭのアドレスＡから始まる復帰プログラム格納領域には、ブロック１の復帰プログラムが格納されている。故障ブロック２の復帰プログラムはアドレスＡから始まる領域に転送できない。このため、複数のブロックに故障が発生することを想定した場合、１つのブロックについてＲＡＭの格納領域毎に復帰プログラムを用意しておく必要がある。すなわち、故障ブロック２について、アドレスＡから始まる格納領域とアドレスＢから始まる格納領域のそれぞれに適した復帰プログラムが必要になる。このため、上記課題IIIが生じてしまう。
【実施例１】
【００２７】
本実施例では、上記課題I〜IIIを、格納される格納領域のアドレスに依存しない復帰プログラムをプログラマ等が用意することで解決する。具体的には、復帰プログラムから分岐処理をなくすことで、復帰プログラムの格納領域が固定されなくなり、格納領域のアドレスに依存しない復帰プログラムを作成できる。
【００２８】
図３は、本実施例の復帰プログラムの作成方針を示す図の一例である。まず、「１．格納される領域のアドレスに依存しないため」
1-1．if文、switch文等の分岐処理がないコードにより復帰プログラムを記述する
という方針がある。これは、分岐先があると分岐先は絶対アドレスで指定されるため、転送されるＲＡＭ内の格納領域が制限されるためである。
【００２９】
図４は、分岐処理をなくす方法について説明する図の一例である。図４（ａ）はif文、switch文を含む従来処理を模式的に示している。この処理は、車の速度等の走行状態に応じて最大限の燃費性能を発揮できるように、制御パターンを切り替える処理である。図の制御パターンは燃料消費量の計算であるが、どのような処理でもよい。
【００３０】
従来は、if文やswitch文により、パターンＡ（０〜１０km/h）、パターンＢ（１０〜３０km/h）、パターンＣ（３０〜５０km/h）、パターンＤ（５０〜８０km/h）、パターンＥ（８０〜km/h）、のいずれかに適切な燃料噴射量の計算に切り替えられていた。
【００３１】
本実施例では、図４（ｂ）に示すように、走行状況が変わっても同じパターンＸを制御パターンとする。これにより、最大限の燃費性能を発揮できない可能性があっても、全車速領域で有効な燃料噴射量を行う。このようにパターンＸを用意することで復帰プログラムでは分岐処理がなくなるため、復帰プログラムの転送先の領域が固定されなくなる。
【００３２】
また、「２．復帰プログラムによりレジスタ値を破壊しないため」
2-1．復帰プログラム内で利用するレジスタを処理先頭でスタックに退避する
2-2．復帰プログラムの終了時にレジスタの内容を元に戻すため、スタックからレジスタ値を復帰させる
という方針がある。
【００３３】
図５（ａ）は、レジスタ値とスタック７１の関係を示す図の一例である。ＣＰＵがＲＯＭプログラムをアドレス順に実行していき、故障したブロックに到達すると、ＣＰＵが命令を読み出すアドレスがＲＡＭの復帰プログラムにジャンプする。この時、スタック７１にはＲＯＭデータ１〜３が、レジスタ７２（以下、区別するためレジスタ１，２という）にＲＯＭデータ４，５が記憶されている。ＣＰＵが実行するプログラムが、復帰プログラムからＲＯＭプログラムに戻る際は、スタック７１とレジスタ７２をこの状態に復帰させる必要がある。このため、図５（ａ）の左図のように、復帰プログラムは処理先頭で、復帰プログラム内で使用するレジスタ（この場合はレジスタ１，２とする）のデータをスタック７１に退避する。
【００３４】
そして、復帰プログラムの実行が完了すると、図５（ａ）の右図のように、復帰プログラムはスタック７１のＲＯＭデータ４，５をレジスタ１，２に復帰させる。これにより、スタック７１とレジスタ７２は図５（ａ）の左図の状態に戻る。したがって、復帰プログラムによりレジスタ値を破壊することを防止できる。
【００３５】
また、「２．復帰プログラムによりレジスタ値を破壊しないため」
2-3．引数、返り値なしの構造にする
という方針がある。
【００３６】
図５（ｂ）は、レジスタに格納される値について説明する図の一例である。関数に渡される引数や返り値は、レジスタ７２やスタックに格納される。しかし、図５（ａ）にて説明したように、復帰プログラムは処理完了時にスタック７１のＲＯＭデータ４，５をレジスタ１，２に復帰させ、スタックとレジスタを元の状態に戻す必要がある。このため、レジスタ７２やスタックに引数や返り値を記憶させておくことができず、引数や返り値はＲＯＭプログラムが参照できないデータとなる。
【００３７】
以上のような方針に基づき、プログラマ等が復帰プログラムを開発することで、絶対アドレスで指定される分岐先がない復帰プログラムを作成できる。また、復帰プログラムが実行される前後でレジスタ７２の値を破壊することも防止できる。
【００３８】
絶対アドレスで指定される分岐先がない復帰プログラムであれば、プログラマ等により用意されたブロック毎の復帰プログラムを、所定のプログラムがＲＡＭにおける復帰プログラム格納領域の任意の（使用されていない）転送先に転送できる。このため、１つのブロックに対し、復帰プログラム格納領域のアドレス毎に復帰プログラムを作成する必要をなくすることができる。
【００３９】
情報処理装置はこのように作成された復帰プログラムを以下のような手順で実行する。
図６は、情報処理装置がＲＯＭの故障を判断し、ＲＯＭ又はＲＡＭのプログラムを実行する手順を示すフローチャート図の一例である。
【００４０】
情報処理装置は、所定のタイミングでチェックサムを行うことで、ＲＯＭのブロック毎に故障の有無を判断する（Ｓ１０）。このタイミングは電源オンやリセット時である。
【００４１】
故障ブロックがない場合（Ｓ２０のＮｏ）、情報処理装置はＲＯＭプログラムを実行する（Ｓ３０）。
【００４２】
故障ブロックがある場合（Ｓ２０のＹｅｓ）、情報処理装置は故障したブロックを特定する（Ｓ４０）。
【００４３】
情報処理装置は、他の機器から復帰プログラムを取得する（Ｓ５０）。他の機器とは、例えばネットワークで記憶された他の情報処理装置である。車両の場合、ＥＣＵが他のＥＣＵから復帰プログラムを取得できる。
【００４４】
情報処理装置は、復帰プログラムをＲＡＭの復帰プログラム格納領域に格納する（Ｓ６０）。
【００４５】
情報処理装置は、故障ブロックを実行するタイミングになると、ＲＯＭではなくＲＡＭに格納した復帰プログラムを実行する（Ｓ７０）。実行後は、故障ブロックの次のブロックからＲＯＭプログラムの実行を再開する。
【００４６】
このような手順により、故障ブロックが存在しても復帰プログラムで故障したブロックの処理を代替できる。
【実施例２】
【００４７】
本実施例では、実施例１で作成した復帰プログラムを、故障の発生箇所に応じて動的に加工する車載システムについて説明する。加工とは、ブロックが故障した場合、復帰プログラムを格納するアドレスや、ＲＡＭからＲＯＭへの復帰先を設定することである。
【００４８】
図７は、車載システムの概略構成図の一例を示す。車載システム２００は、復帰プログラムの加工を行うホストＥＣＵ１２、復帰プログラムを格納している格納ＥＣＵ１３（区別するため、格納ＥＣＵ_Ａ，Ｂという場合がある）、及び、ＲＯＭのブロックが故障した故障ＥＣＵ１１を有している。故障ＥＣＵ１１はブロックＡとブロックＢに故障が発生したものとする。格納ＥＣＵ_ＡはブロックＡの復帰プログラムを格納しており、格納ＥＣＵ_ＢはブロックＢの復帰プログラムを格納している。
【００４９】
なお、格納ＥＣＵ１３が故障ＥＣＵ１１となる場合があり、ホストＥＣＵ１２が格納ＥＣＵ１３を兼ねる場合があり、格納ＥＣＵ１３が１つの場合もある。したがって、以下で説明する機能が車載システム２００に含まれていれば、どのＥＣＵに各機能が配置されていてもよい。１つのＥＣＵが、故障ＥＣＵ、格納ＥＣＵ１３及びホストＥＣＵとなることもできる。
【００５０】
また、格納ＥＣＵ１３、又は、格納ＥＣＵ１３及びホストＥＣＵ１２は車両内でなく、車両が無線通信可能なネットワーク上のサーバに配置されていてもよい。
【００５１】
車載システム２００の動作の全体的な流れを説明する。
i)  故障ＥＣＵ１１から故障箇所（故障ブロック）をホストＥＣＵ１２に通知する
ii)  ホストＥＣＵ１２は故障箇所に応じた復帰プログラムを、復帰プログラムを格納している格納ＥＣＵ１３から取得する
iii)  ホストＥＣＵ１２は故障箇所に応じて復帰プログラムを加工する
iv)  ホストＥＣＵ１２は故障ＥＣＵ１１に復帰プログラムを転送する
図８は、故障ＥＣＵ１１、ホストＥＣＵ１２、格納ＥＣＵ１３のハードウェア構成図の一例を示す。主要な構造は故障ＥＣＵ１１、ホストＥＣＵ１２、格納ＥＣＵ１３に共通とする。ＥＣＵ１１〜１３は、主要な構成として入力回路２１、マイコン２２、及び、出力回路２３を有している。マイコン２２は、バスを介して接続されたＲＡＭ２５、ＲＯＭ２６、不揮発メモリ２７、ＣＰＵ２８、及び、通信コントローラ２９を有している。ＣＰＵ２８は、ＲＯＭ２６に記憶されたＯＳ(Operating System)やプログラム３０を実行してＥＣＵに特有の制御を行う。プログラム３０がＲＯＭプログラムである。ＲＡＭ２５は、ＣＰＵ２８がＲＯＭプログラム又は復帰プログラムを実行する際の作業領域となり、例えばスタック７１、変数などが記憶される。また、本実施例では復帰プログラムが格納される復帰プログラム格納領域を提供する。
【００５２】
不揮発メモリ２７は、電源をＯＦＦにしてもデータが消去されない例えばフラッシュメモリである。不揮発メモリ２７には本実施形態に特徴的な機能を提供するプログラム２０が記憶されている。プログラム２０はＲＯＭに記憶してもよい。通信コントローラ２９は、ＣＡＮ（Controller Area Network）、ＬＩＮ（Local Interconnect Network）、ＦｌｅｘＲａｙ、イーサネット（登録商標）などの通信プロトコルに基づき、車載ネットワークを介して他のＥＣＵとデータを送受信する。
【００５３】
入力回路２１には、車輪速センサ、ヨーレートセンサ、ジャイロセンサなどのＥＣＵの機能に応じた種々のセンサが接続されている。入力回路２１は、これらセンサの検出信号を必要であればＡ／Ｄ変換して、センサの識別情報と共にマイコン２２に入力する。マイコン２２はセンサの検出信号に演算を施し、出力回路２３に出力する。出力回路２３はアクチュエータやモータ駆動回路などに接続されており、マイコン２２はアクチュエータ等を制御することができる。
【００５４】
〔ブロックの分割例〕
図９は、ＲＯＭ２６のブロックへの分割方法について説明する図の一例である。ブロックは、所定のサイズ毎に機械的に分割することもできる。しかし、図示するように機能毎にブロックを分割することで、復帰プログラムを機能単位で作成できるので、復帰プログラムを作成しやすくなる。
【００５５】
また、制御タイミング（制御サイクル、周期）毎に復帰プログラムを作成することで、周期に対し適切な処理時間の復帰プログラムを作成できる。例えば、ＥＣＵが４ミリ秒周期で各機能を繰り返し実行する場合、各機能は合計して４ミリ秒以内に実行されるため、復帰プログラムの処理時間も４ミリ秒以内（他の機能との合計の処理時間として）に実行されるように作成する必要がある。
【００５６】
また、周期が長くなれば、１回の周期で実行できる機能の数も増大するので、機能毎に復帰プログラムを作成することがより好ましくなる。例えば、８ミリ秒周期では５個の機能が、エンジン回転周期（＞８ミリ秒）では６個の機能が、１回の周期で実行されている。このため、プログラマ等は、５個又は６個の復帰プログラムを作成することができ、情報処理装置は機能単位で復帰プログラムをＲＡＭに格納できる。
【００５７】
〔機能例〕
図１０は、ホストＥＣＵ等の機能ブロック図の一例である。故障ＥＣＵ１１は故障検出部３１、プログラム配置部３２、プログラム実行制御部３３、及び、番号・ＩＤテーブル４２を有している。故障検出部３１は、定期的、処理負荷が閾値以下、マイコン２２の起動時、又は、リセット時などのタイミングでＲＯＭ２６に記憶されているＲＯＭの故障を検出する。ＲＯＭの故障とはＲＯＭ２６の内容が書き換わることである。このような故障は、チェックＳＵＭにより検出可能であるが、予め記憶しているハッシュ値と比較するなど故障の検出方法は問わない。
【００５８】
故障検出部３１は、予め機能毎にいくつかのブロックに区分されているＲＯＭ２６のうち、故障が生じたブロック番号を特定する。ブロック番号は、例えば先頭ブロックからの連番である。プログラマ等はブロック毎に復帰プログラムを用意している。
【００５９】
プログラム配置部３２は、ホストＥＣＵ１２から取得した復帰プログラムをＲＡＭ２５に格納する。ＲＡＭ２５における復帰プログラム格納領域のどのアドレスに格納するかは復帰プログラムと共にホストＥＣＵ１２から送信される。復帰プログラムが格納される復帰プログラム格納領域の先頭アドレスを以下、「飛び先アドレス」と称する。
【００６０】
プログラム実行制御部３３は、ブロックが故障した場合、ＲＯＭ２６のブロックのプログラムを実行するのか、ＲＡＭ２５の復帰プログラムを実行するかを判断する。復帰プログラムを実行する場合、故障したブロックに対応する復帰プログラムが記憶されたＲＡＭ２５の飛び先アドレスをＰＣ（プログラムカウンタ）に設定する。詳細は実施例３にて説明する。
【００６１】
番号・ＩＤ対応づけテーブル４２は、ブロック番号と復帰プログラムＩＤを対応づけるテーブルである。番号・ＩＤ対応づけテーブル４２は、プログラム実行制御部３３が復帰プログラム格納領域のどの復帰プログラムを選択するか（どの飛び先アドレスにジャンプするか）を判断するために使用される。
【００６２】
格納ＥＣＵ１３は復帰プログラム提供部３８と復帰プログラムＤＢ３７を有している。復帰プログラム提供部３８は、ホストＥＣＵ１２から復帰プログラムＩＤにて指定された復帰プログラムの送信を要求される。復帰プログラムＤＢ３７は復帰プログラムＩＤに対応づけて復帰プログラムを記憶している。復帰プログラム提供部３８は、復帰プログラムＤＢ３７に記憶されている復帰プログラムをホストＥＣＵ１２に送信する。
【００６３】
ホストＥＣＵ１２は復帰プログラム取得部３４、プログラム加工部３５、プログラム送信部３６及び対応づけテーブル４１を有している。復帰プログラム取得部３４は故障検出部３１からブロック番号を取得すると、対応づけテーブル４１を参照して復帰プログラムＩＤを決定する。
【００６４】
対応づけテーブル４１は、各ＥＣＵ毎に、ブロック番号に対応づけて復帰プログラムＩＤ及び復帰先アドレスを紐づける。したがって、ブロック番号を送信した故障ＥＣＵ１１から一意に復帰プログラムＩＤと復帰先アドレスを特定できる。復帰先アドレスは、ＲＡＭの復帰プログラムからＲＯＭに戻るためのアドレスなので、ブロックの先頭アドレスである。
【００６５】
プログラム加工部３５は、復帰プログラム格納領域における復帰プログラムが格納されるアドレスと故障が発生したブロックに応じて、復帰プログラムを加工する。具体的には、復帰プログラムＩＤを付与して、飛び先アドレスと復帰先アドレスを決定して、復帰プログラム本体と共に１つのパッケージとして復帰プログラムを作成する。本実施例の復帰プログラムは格納領域のアドレスが固定されていないためである。
【００６６】
図１１は、復帰プログラムのフォーマット及び復帰プログラムの加工を説明する図の一例である。復帰プログラムのフォーマットは、復帰プログラムＩＤ、飛び先アドレス、及び、復帰プログラム本体の各区分を有している。１つのブロックの故障に対し、フォーマット１つ分の復帰プログラムが作成される。ただし、２つのブロックの故障が同じ検出処理時に検出された場合、フォーマット２つ分以上の復帰プログラムがタイミングで作成されてもよい。以下、各区分を順番に説明する。
【００６７】
・復帰プログラムに含まれる復帰プログラムＩＤは、故障ＥＣＵ１１が故障箇所との一致確認用に使用される。
【００６８】
・飛び先アドレスは、故障ＥＣＵ１１のブロックの故障箇所数と復帰プログラムのサイズによって異なる値となる。復帰プログラム格納領域の先頭アドレスＡは、最初の復帰プログラムが格納されるアドレスである。２つ目以降の復帰プログラムについては、復帰プログラムはそれぞれのサイズに応じた容量を占めるので、先頭アドレスＡを起点に、復帰プログラム格納領域に格納されている復帰プログラムのサイズだけ離れたアドレスが、先頭アドレスである。
【００６９】
例えば、故障ＥＣＵ１１の故障ブロックが１つの場合、ＲＡＭ２５の復帰プログラム格納領域の先頭アドレスが飛び先アドレスである。したがって、プログラム加工部３５は、予め保持している各ＥＣＵの格納領域の先頭アドレスを、飛び先アドレスに設定する。
【００７０】
故障ＥＣＵ１１の故障ブロックが２つめ以降の場合、復帰プログラムはプログラム本体のサイズだけ後のアドレスを先頭アドレスとする領域に格納される。
飛び先アドレス＝１つ前の復帰プログラムの格納先の先頭アドレス＋１つ前の復帰プログラムの復帰プログラム本体のサイズ  …（１）
例えばブロック番号１が故障し２個目のブロックが故障した場合は以下になる。
飛び先アドレス（先頭アドレスＢ）＝先頭アドレスＡ＋復帰プログラム１-１のサイズ
このように飛び先アドレスを決定することで、すでに格納した復帰プログラムの領域と重複せず隙間もないように、飛び先アドレスを決定できる。
【００７１】
・復帰プログラム本体は、復帰プログラム毎に異なるコード部（図の斜線部）と、復帰先アドレスを有している。復帰先アドレスは、ＣＰＵ２８がＲＡＭ２５の復帰プログラムを実行後、ＲＯＭ２６に戻る際のアドレスである。プログラム加工部３５は、復帰プログラム本体の最後に、復帰先アドレスをジャンプ先とするjmp命令を挿入する。各ブロックの復帰先アドレスは、対応づけテーブル４１に登録されている。
【００７２】
図１０のプログラム送信部３６は、プログラム加工部３５が加工した復帰プログラムを故障ＥＣＵ１１に送信する。
【００７３】
〔動作手順〕
図１２は、車載システム２００の動作手順を示すフローチャート図の一例である。
S1：まず、故障ＥＣＵ１１の故障検出部３１は、例えばチェックサムでブロックの故障の有無を判定する。
S2：故障が検出された場合、故障検出部３１は故障したブロックのブロック番号をホストＥＣＵ１２に通知する。
S3：ホストＥＣＵ１２の復帰プログラム取得部３４は格納ＥＣＵ１３に復帰プログラムＩＤを送信して、復帰プログラムを要求する。
S4：格納ＥＣＵ１３の復帰プログラム提供部３８は復帰プログラムＤＢ３７に記憶された復帰プログラムを読み出してホストＥＣＵ１２に送信する。復帰プログラム取得部３４は復帰プログラムを取得する。
S5：ホストＥＣＵ１２のプログラム加工部３５は、故障箇所が何回目かを判定する。
S6：初回の場合、プログラム加工部３５は、復帰プログラム格納領域の先頭アドレスを飛び先アドレスに設定する。
S10：故障箇所が２回目以降の場合、プログラム加工部３５は、上式（１）に基づき算出した飛び先アドレスを復帰プログラムに設定する。なお、全ブロックが故障した後は、プログラム加工部３５は復帰プログラムを加工しない。
S7：また、ブロック番号に応じて復帰プログラムＩＤを復帰プログラムに付与する。
S8：格納ＥＣＵ１３から取得した復帰プログラムを、復帰プログラム本体として、復帰プログラムに設定する。
S9：ブロック番号に応じて、復帰先アドレスをジャンプ先とするコードを復帰プログラム本体の最後に挿入する。
S11：ホストＥＣＵ１２のプログラム送信部３６は故障ＥＣＵ１１に送信する。
【００７４】
以上、説明したように、本実施例では、復帰プログラムに飛び先アドレスと復帰先アドレスを設定することで、復帰プログラムを固定されていないＲＡＭ２５の格納領域に格納することができる。このため、ブロックに復帰プログラムを１つ用意しておくだけで、ＲＡＭ２５の復帰プログラム格納領域のサイズを増大することなく複数のブロックの故障に対応できる。
【００７５】
〔車載システムの各ＥＣＵの一例〕
図１３は、車載システム２００が有する各ＥＣＵの一例を説明する図である。車載システム２００は、ＥＣＵが提供する機能毎に、マルチメディア系のネットワーク、シャシ系のネットワーク、パワトレ系のネットワークなどを有している。各ネットワークはゲートウェイＥＣＵ１２０を介して通信可能に接続されている。ゲートウェアＥＣＵ１２０は、ネットワーク間で通信プロトコルが異なる場合にデータのフォーマットを変換したり、予め定められたデータを選択的に他方のネットワークに中継する。
【００７６】
ナビＥＣＵ１４０はナビゲーションシステムを用いてディスプレイや音声で経路を案内したり、テレビ、ラジオなどの映像・音声の出力を行う。また、携帯電話網や無線ＬＡＮの基地局と通信する通信装置を有していれば、不図示のサーバと通信できる。ブレーキＥＣＵ１３０はＡＢＳ（Antilock Braking System）制御やＥＳＣ（Electronic Stability Control）、ヒルスタートアシストなどを行う。パワトレＥＣＵ１３１は、車速やアクセル開度に応じてトランスミッションのギア比などを制御する。エンジンＥＣＵ１１０は、燃料噴射量、点火タイミング、アイドリング、などを制御する。モータＥＣＵ１１１はハイブリッド車や電気自動車において駆動用の電気モータの回転速度などを制御する。
【００７７】
このような車載システム２００ではナビＥＣＵ１４０を格納ＥＣＵ１３とすることで、復帰プログラムをサーバからダウンロードできる。また、サーバと通信不能でも、ナビＥＣＵ１４０は比較的大きな不揮発メモリを有しているので、多くの復帰プログラムを記憶できる。また、シャシ系のＥＣＵが復帰プログラムを記憶していてもよいし、パワトレ系のＥＣＵが復帰プログラムを記憶していてもよい。
【００７８】
また、車載システムの各ＥＣＵはゲートウェイＥＣＵを介して通信するため、ゲートウェアＥＣＵ１２０がホストＥＣＵ１２となることで、復帰プログラムの記憶場所、及び、故障ＥＣＵに復帰プログラムを転送することの柔軟性が向上する。また、ゲートウェイＥＣＵ１２０が復帰プログラムの配信時に復帰プログラムを加工するので、復帰プログラムを送受信する際の通信量を低減できる。
【実施例３】
【００７９】
本実施例では、復帰プログラムをＲＡＭ２５に格納し、さらに実行する際の故障ＥＣＵ１１について説明する。
【００８０】
図１４はＲＡＭ２５に格納される復帰プログラムを模式的に示す図の一例である。実施例２で説明したように、プログラム配置部３２はＲＡＭ２５に復帰プログラムを格納する（転送する）。図示するように、復帰プログラムのうちプログラム本体のみがＲＡＭ２５に格納される。先頭アドレスＡ用の復帰プログラムの復帰プログラム本体は、飛び先アドレス（先頭アドレスＡ）が指示するＲＡＭ２５の格納領域の先頭に格納され、アドレスＢ用の復帰プログラムの復帰プログラム本体は、飛び先アドレスが指示するすでに格納されている復帰プログラムの最後のアドレス（先頭アドレスＢ）に続いて格納される。
【００８１】
復帰プログラムに含まれる復帰プログラムＩＤと飛び先アドレスは、ＲＡＭの任意の領域（復帰プログラム格納領域外）に記憶されている。
【００８２】
図１５は、格納ＥＣＵ１３のプログラム実行制御部３３が復帰プログラムを実行する手順を示すフローチャート図の一例である。図１５の手順は、ＣＰＵ２８が１つのブロックを実行する毎に行われる。
【００８３】
あるブロックの処理が開始されると、プログラム実行制御部３３はこれから実行するブロックに故障が検出されているか否かを判定する（Ｓ１１０）。
【００８４】
故障が検出されていない場合（Ｓ１１０のＮｏ）、プログラム実行制御部３３は何もせず、ＣＰＵ２８はＲＯＭ２６のブロックの既存処理を実行する（Ｓ１２０）。
【００８５】
故障が検出されている場合（Ｓ１１０のＹｅｓ）、プログラム実行制御部３３はこれから実行するブロックに対応づけられた復帰プログラムＩＤを確認する（Ｓ１３０）。すなわち、番号・ＩＤテーブル４２を参照して、ブロック番号に対応づけられた復帰プログラムＩＤを読み出す。
【００８６】
故障ＥＣＵ１１はホストＥＣＵ１２から送信された復帰プログラムに含まれる復帰プログラムＩＤと飛び先アドレスをＲＡＭ２５などに記憶している。プログラム実行制御部３３は、復帰プログラムに含まれる復帰プログラムＩＤと、ステップＳ１３０で確認した復帰プログラムＩＤが一致するか否かを判定する（Ｓ１４０）。
【００８７】
一致しない場合は（Ｓ１４０のＮｏ）、ＲＡＭ２５などに記憶している復帰プログラムに含まれる別の復帰プログラムＩＤを読み出して、一致するか否かを判定する。
【００８８】
一致した場合（Ｓ１４０のＹｅｓ）、プログラム実行制御部３３は、一致した復帰プログラムＩＤと共にＲＡＭ２５などに記憶している飛び先アドレスを読み出し、飛び先アドレス位置へジャンプする（Ｓ１５０）。具体的にはプログラムカウンタに飛び先アドレスを設定する。
【００８９】
これにより、ＣＰＵ２８はＲＡＭ２５の復帰プログラム本体を先頭から最後まで実行する。復帰プログラム本体の最後には、復帰先アドレスをジャンプ先とするjmp命令があるので、ＣＰＵ２８が実行するアドレスは、ＲＯＭにおける次のブロックの先頭に戻ることができる。
【００９０】
このように、故障ＥＣＵは、飛び先アドレスに基づき複数の復帰プログラムをＲＡＭに配置できる。また、復帰プログラムの実行時には、複数の復帰プログラムから故障ブロックに対応した復帰プログラムを特定し、復帰プログラムの先頭アドレス（飛び先アドレス）にジャンプできる。
【符号の説明】
【００９１】
１１      故障ＥＣＵ
１２      ホストＥＣＵ
１３      格納ＥＣＵ
２２      マイコン
２５      ＲＡＭ
２６      ＲＯＭ
２８      ＣＰＵ
２０，３０  プログラム
３７      復帰プログラムＤＢ
２００    車載システム
【図１】
2014191656.tif 000003
【図２】
2014191656.tif 000004
【図３】
2014191656.tif 000005
【図４】
2014191656.tif 000006
【図５】
2014191656.tif 000007
【図６】
2014191656.tif 000008
【図７】
2014191656.tif 000009
【図８】
2014191656.tif 000010
【図９】
2014191656.tif 000011
【図１０】
2014191656.tif 000012
【図１１】
2014191656.tif 000013
【図１２】
2014191656.tif 000014
【図１３】
2014191656.tif 000015
【図１４】
2014191656.tif 000016
【図１５】
2014191656.tif 000017
【図１６】
2014191656.tif 000018