(57)【特許請求の範囲】
【請求項１】
エアバッグを廃棄する際、車両の衝突検知の有無に拘わらずエアバッグを強制的に展開させる処理をエアバッグ制御装置のＣＰＵに実行させるための機械語プログラムのソースプログラムを用意するステップと、
前記ソースプログラムに含まれる一部の命令コードを前記エアバッグ制御装置のＣＰＵを動作させるために使用される正規の他の命令コードに置換、又は該ソースプログラムに含まれる一部の参照メモリアドレスを参照先が存在する有効な他の参照メモリアドレスに置換することによって、エアバッグを展開させることが不能なソースプログラムに変換するステップと、
エアバッグを展開させることが不能なソースプログラムを実行不能化機械語プログラムにコンパイルするステップと、
該実行不能化機械語プログラムを、エアバッグを強制的に展開させることが可能な前記機械語プログラムに変換するための復元データを作成するステップと
を有することを特徴とするプログラム実行不能化方法。
【請求項２】
前記復元データは、
前記実行不能化機械語プログラムと、前記機械語プログラムとの差分を示したデータを含む
ことを特徴とする請求項１に記載のプログラム実行不能化方法。
【請求項３】
前記復元データは、
前記実行不能化機械語プログラムと、前記機械語プログラムとの排他的論理和を含む
ことを特徴とする請求項１に記載のプログラム実行不能化方法。
【請求項４】
請求項１乃至請求項３のいずれか一つに記載のプログラム実行不能化方法を用いて作成された前記実行不能化機械語プログラム及び復元データを記憶部に格納させるステップを有する
ことを特徴とするプログラム格納方法。
【請求項５】
前記エアバッグ制御装置のＣＰＵに前記復元データを用いて、前記実行不能化機械語プログラムを、前記機械語プログラムに変換する処理を実行させるための復元機械語プログラムを記憶部に格納させるステップを有する
ことを特徴とする請求項４に記載のプログラム格納方法。
【請求項６】
請求項１乃至請求項３のいずれか一つに記載のプログラム実行不能化方法を用いて作成された前記実行不能化機械語プログラム及び復元データを格納した記憶部と、
該記憶部が格納している前記実行不能化機械語プログラム及び復元データに基づいて、前記実行不能化機械語プログラムを、前記機械語プログラムに変換し、該機械語プログラムを実行する制御部と、
前記機械語プログラムを実行した前記制御部の制御に従ってエアバッグを展開させる回路と
を備えることを特徴とするエアバッグ制御装置。
【請求項７】
エアバッグを廃棄する際、車両の衝突検知の有無に拘わらず該エアバッグを強制的に展開させる処理を実行するための機械語プログラムに含まれる一部の命令コードを、ＣＰＵを動作させるために使用される正規の他の命令コードに置換、又は該機械語プログラムに含まれる一部の参照メモリアドレスを参照先が存在する有効な他の参照メモリアドレスに置換することによって得られた実行不能化機械語プログラム、及び該実行不能化機械語プログラムを、前記機械語プログラムに変換するための復元データを格納した記憶部と、
該記憶部が格納している前記実行不能化機械語プログラム及び復元データに基づいて、前記実行不能化機械語プログラムを、前記機械語プログラムに変換し、該機械語プログラムを実行する制御部と、
前記機械語プログラムを実行した前記制御部の制御に従ってエアバッグを展開させる回路と
を備えることを特徴とするエアバッグ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エアバッグを廃棄する際、コンピュータに該エアバッグを強制的に展開させる処理を実行するための機械語プログラムを実行が不能な状態に変換するプログラム実行不能化方法、該機械語プログラムを実行が不能な状態に変換して記憶部に格納するプログラム格納方法、及び実行が不能な状態になった機械語プログラムを記憶したエアバッグ制御装置に関する。
【背景技術】
【０００２】
エアバッグが搭載された車両を廃棄する場合、エアバッグの誤爆を防止すべく、予めエアバッグを強制的に展開させておき、エアバッグを強制展開させた後に、インフレータなどと共に車両を廃棄することが行われている。自動車用エアバッグの廃棄処理に係るＩＳＯ−２６０２１規格においては、いかなる状況下においても非廃棄処理時にエアバッグが誤爆しないよう、廃棄処理用の実行コードを非実行コードとしてエアバッグ制御装置の記憶部に格納することが要求されている。該非実行コードはエアバッグ制御装置のＲＯＭ（Read Only Memory）に格納され、特定の条件下、即ち廃棄ツールとの間で一連の手続きが確認された場合にのみ、ＲＡＭ（Random Access Memory）上に実行コードとして復元され実行されなければならない。【０００３】
特定の条件下でのみ実行が可能になる非実行コードを作成する方法としては、ＣＰＵ（Central Processing Unit）の不正命令もしくは未定義命令を利用する方法が考えられる。具体的には、機械語の実行コードを生成した後で各命令を部分的に分離格納することにより、該実行コードを正規の処理手順での実行が不能な状態にする。つまり、実行コードの各命令を、ＣＰＵの不正命令又は未定義命令に変換する処理を行う。【０００４】
図１６Ａ及び図１６Ｂは、従来の非実行コード化、及び非実行コードの復元方法を概念的に示した説明図である。図１６Ａは、実行コードを部分的に分離格納することにより、非実行コード化する処理を概念的に示した説明図である。ハッチングが付された４個の升目で構成された矩形バーは、実行コードを表している。１個の升目は１バイト長に対応しており、図１６Ａに示した実行コードは４バイト長である。図１６Ａに示した例では、実行コードの先頭（図中左側）１バイトを分離することによって、該実行コードは非実行コード化されている。白抜きの升目は、実行コードから分離されたデータ部分を示している。該データ部分は、実行コードを、未定義又は不正命令にすることができる任意のデータである。例えば、前記データ部分は、「０００００００」の１バイト長データである。また、分離された先頭の１バイトのデータは、非実行コードを復元するためのマスクデータとして、非実行コードと共にＲＯＭに格納される。
図１６Ｂは、分離された非実行コードを復元する処理を概念的に示した説明図である。ＲＯＭに格納された非実行コードは、実行コードの後段３バイト長のデータを有し、マスクデータは、実行コードの先頭１バイト長のデータを有しているため、非実行コード及びマスクデータを用いて、実行コードを復元することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−３０１３９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、実行データの一部を分離格納する方法は、コンパイラ等により機械語の実行コードを生成した後に行われる。従って、この方法では実行コードの関数長および格納アドレスを特定し処理する必要があり、また命令が可変長フォーマットである場合は、実行コードの命令解析までも行わなければいけないため、非実行コード化の工程が非常に複雑であるという問題があった。
また、分離後の非実行コードは、ＣＰＵの未定義又は不正命令であり、ＣＰＵ製造業者によって動作が保証されていない場合、ＣＰＵの異常動作などにより非実行コードが実行コード化される前に実行されたときのＣＰＵの挙動すら検証・把握することができないなど、安全面での憂慮も払拭できないという問題があった。【０００７】
本発明は斯かる事情に鑑みてなされたものであり、その目的は、エアバッグを強制的に展開させる処理をコンピュータに実行させるための機械語プログラムのソースプログラムに含まれる一部の命令コードを他の命令コードに置換、又は該ソースプログラムに含まれる一部の参照メモリアドレスを他の参照メモリアドレスに置換し、コンパイルすることで非実行コード化することによって、エアバッグを強制的に展開させることが可能な機械語プログラムの生成後に実行不能化機械語プログラムの生成処理を行う必要が無く、実行コード化前に実行不能化機械語プログラムが実行されたとしても全ての動作を把握及び保障することができるプログラム実行不能化方法、プログラム格納方法、及び実行不能化機械語プログラムを記憶したエアバッグ制御装置を提供することにある。
【課題を解決するための手段】
【０００８】
本発明に係るプログラム実行不能化方法は、エアバッグを廃棄する際、車両の衝突検知の有無に拘わらずエアバッグを強制的に展開させる処理をエアバッグ制御装置のＣＰＵに実行させるための機械語プログラムのソースプログラムを用意するステップと、前記ソースプログラムに含まれる一部の命令コードを前記エアバッグ制御装置のＣＰＵを動作させるために使用される正規の他の命令コードに置換、又は該ソースプログラムに含まれる一部の参照メモリアドレスを参照先が存在する有効な他の参照メモリアドレスに置換することによって、エアバッグを展開させることが不能なソースプログラムに変換するステップと、エアバッグを展開させることが不能なソースプログラムを実行不能化機械語プログラムにコンパイルするステップと、該実行不能化機械語プログラムを、エアバッグを強制的に展開させることが可能な前記機械語プログラムに変換するための復元データを作成するステップとを有することを特徴とする。
【０００９】
本発明にあっては、エアバッグ制御装置のＣＰＵに、エアバッグを強制的に展開させる処理を実行させるための機械語プログラムのソースプログラムに含まれる一部の命令コードを他の命令コードに置換、又は該ソースプログラムに含まれる一部の参照メモリアドレスを他の参照メモリアドレスに置換することによって、該機械語プログラムをエアバッグを展開させることが不能なソースプログラムに変換する。置換に用いる他の命令コードは、コンピュータのＣＰＵを動作させるために使用される正規のコードであり、コンピュータの動作は保証される。例えば、論理和演算の命令コードを、排他的論理和の命令コードに置換する。また、参照アドレスは、参照先が存在する有効なものである。なお参照アドレスは、データの読み書きを行う際に必要な一切のアドレスを含む広義のアドレスであり、参照アドレスには、ＲＡＭ、ＣＰＵのキャッシュメモリ、レジスタ、データ入出力用のメモリ、その他の記憶装置のアドレス等が含まれる。
そして、置換後のソースプログラムをコンパイルして実行不能化機械語プログラムを作成する。また、実行不能化機械語プログラムを、エアバッグを強制的に展開させることが可能な前記機械語プログラムに変換するための復元データを作成する。なお、復元データを作成するステップと、実行不能化機械語プログラムを作成するステップとの実行順序は問わない。
従って、コンパイルされた機械語プログラムから実行不能化機械語プログラムを生成する処理は不要である。また、ＣＰＵの挙動を検証及び把握することが可能である。
【００１０】
本発明に係るプログラム実行不能化方法は、前記復元データは、前記実行不能化機械語プログラムと、前記機械語プログラムとの差分を示したデータを含むことを特徴とする。【００１１】
本発明にあっては、復元データは、実行不能化機械語プログラムと、実行可能な機械語プログラムとの差分を示したデータを含む。従って、復元データを用いて、実行不能化機械語プログラムから実行可能な機械語プログラムを復元することが可能である。なお、復元データの生成は、人が行っても良いし、コンピュータに生成させても良い。【００１２】
本発明に係るプログラム実行不能化方法は、前記復元データは、前記実行不能化機械語プログラムと、前記機械語プログラムとの排他的論理和を含むことを特徴とする。【００１３】
本発明にあっては、復元データは、実行不能化機械語プログラムと、機械語プログラムとの排他的論理和である。従って、復元データの生成は容易である。また、実行不能化機械語プログラムの復元も容易である。更に、実行不能化機械語プログラムと、実行可能な機械語プログラムとの差分を排他的論理和によって表現した場合、機械語プログラムの実行不能化及び復元を同じ思考プロセス又は演算、即ち排他的論理和によって実現することができる。このため、実行不能化時の演算方法と、復元時の演算方法とを区別する必要が無い。特に、人が復元データを生成する場合、実行不能化時の演算方法が何で、復元時の演算方法が何で等と考える必要が無くなる。
なお、排他的論理和による復元データの生成は、人が行っても良いし、コンピュータに生成させても良い。【００１４】
本発明に係るプログラム格納方法は、上述のプログラム実行不能化方法を用いて作成された前記実行不能化機械語プログラム及び復元データを記憶部に格納させるステップを有することを特徴とする。【００１５】
本発明にあっては、上述のエアバッグ廃棄用プログラム実行不能化方法を用いて、実行不能化機械語プログラム及び復元データが作成され、作成された実行不能化機械語プログラム及び復元データが記憶部に格納される。従って、エアバッグを強制的に展開させる機械語プログラムは、実行不能な状態で記憶部に格納される。なお、記憶部は一つ又は複数のいずれであっても良い。また、実行不能化機械語プログラム及び復元データを異なる記憶部に格納させても良い。【００１６】
本発明に係るプログラム格納方法は、前記エアバッグ制御装置のＣＰＵに前記復元データを用いて、前記実行不能化機械語プログラムを、前記機械語プログラムに変換する処理を実行させるための復元機械語プログラムを記憶部に格納させるステップを有することを特徴とする。
【００１７】
本発明にあっては、復元データ及び実行不能化機械語プログラムを用いて、エアバッグを展開させることが可能な機械語プログラムに変換するための復元機械語プログラムを記憶部に格納させる。従って、復元機械語プログラムをＣＰＵに実行させることによって、復元データ及び実行不能化機械語プログラムを用いて、エアバッグを展開させることが可能な機械語プログラムに変換することが可能になる。
【００１８】
本発明に係るエアバッグ制御装置は、上述のプログラム実行不能化方法を用いて作成された前記実行不能化機械語プログラム及び復元データを格納した記憶部と、該記憶部が格納している前記実行不能化機械語プログラム及び復元データに基づいて、前記実行不能化機械語プログラムを、前記機械語プログラムに変換し、該機械語プログラムを実行する制御部と、前記機械語プログラムを実行した前記制御部の制御に従ってエアバッグを展開させる回路とを備えることを特徴とする。
【００１９】
本発明にあっては、エアバッグ制御装置の制御部の誤作動によって、実行不能化機械語プログラムが実行されたとしても、エアバッグは展開しない。制御部は、復元データを用いて実行不能化機械語プログラムを、エアバッグを強制的に展開させることができる機械語プログラムに変換し、実行することができる。該機械語プログラムが実行された制御部の制御に従って、エアバッグは展開する。
【００２０】
本発明に係るエアバッグ制御装置は、エアバッグを廃棄する際、車両の衝突検知の有無に拘わらず該エアバッグを強制的に展開させる処理を実行するための機械語プログラムに含まれる一部の命令コードを、ＣＰＵを動作させるために使用される正規の他の命令コードに置換、又は該機械語プログラムに含まれる一部の参照メモリアドレスを参照先が存在する有効な他の参照メモリアドレスに置換することによって得られた実行不能化機械語プログラム、及び該実行不能化機械語プログラムを、前記機械語プログラムに変換するための復元データを格納した記憶部と、該記憶部が格納している前記実行不能化機械語プログラム及び復元データに基づいて、前記実行不能化機械語プログラムを、前記機械語プログラムに変換し、該機械語プログラムを実行する制御部と、前記機械語プログラムを実行した前記制御部の制御に従ってエアバッグを展開させる回路とを備えることを特徴とする。
【００２１】
本発明にあっては、エアバッグ制御装置の記憶部は、エアバッグ制御装置のＣＰＵに、エアバッグを強制的に展開させる処理を実行させるための機械語プログラムに含まれる一部の命令コードを他の命令コードに置換、又は該機械語プログラムに含まれる一部の参照メモリアドレスを他の参照メモリアドレスに置換された実行不能化機械語プログラムを記憶している。置換に用いられた他の命令コードは、コンピュータのＣＰＵを動作させるために使用される正規のコードであり、コンピュータの動作は保証される。また、参照アドレスは、参照先が存在する有効なものである。更に、記憶部は、そして、実行不能化機械語プログラムを、エアバッグを強制的に展開させることが可能な前記機械語プログラムに変換するための復元データを記憶する。
従って、エアバッグ制御装置の制御部の誤作動によって、実行不能化機械語プログラムが実行されたとしても、エアバッグは展開しない。制御部は、復元データを用いて実行不能化機械語プログラムを、エアバッグを強制的に展開させることができる機械語プログラムに変換し、実行することができる。該機械語プログラムが実行された制御部の制御に従って、エアバッグは展開する。
【発明の効果】
【００２２】
本発明にあっては、エアバッグを強制的に展開させることが可能な機械語プログラムの生成後に実行不能化機械語プログラムの生成処理を行う必要が無く、実行コード化前に実行不能化機械語プログラムが実行されたとしても全ての動作を把握及び保障することができる。従って、従来の実行不能化方法に比べて、安全性が高い実行不能化機械語プログラムを容易に作成し、コンピュータの記憶部に格納することができる。
【図面の簡単な説明】
【００２３】
【図１】本発明の実施の形態に係るエアバッグ制御装置及び廃棄装置の一構成例を模式的に示したブロック図である。
【図２】本発明の実施の形態に係るプログラム実行不能化方法及びプログラム格納方法を示したフローチャートである。
【図３】実行ソースコードに記述された処理手順の一部を示すフローチャートである。
【図４Ａ】実行ソースコードを非実行ソースコードに変換する方法を示した説明図である。
【図４Ｂ】実行ソースコードを非実行ソースコードに変換する方法を示した説明図である。
【図５】非実行データの処理手順の一部を示すフローチャートである。
【図６Ａ】実行ソースコード及び非実行ソースコードを機械語で記述した実行コード及び非実行コードを示した説明図である。
【図６Ｂ】実行ソースコード及び非実行ソースコードを機械語で記述した実行コード及び非実行コードを示した説明図である。
【図７】マスクデータを示した説明図である。
【図８Ａ】排他的論理和演算の真理値表及びベン図である。
【図８Ｂ】排他的論理和演算の真理値表及びベン図である。
【図９】廃棄に係るエアバッグ制御装置及び廃棄装置の処理手順を示すフローチャートである。
【図１０】マスクデータを用いて実行コードを復元する一般的方法を概念的に示した説明図である。
【図１１Ａ】マスクデータを用いて実行コードを復元する具体的方法を概念的に示した説明図である。
【図１１Ｂ】マスクデータを用いて実行コードを復元する具体的方法を概念的に示した説明図である。
【図１２】復元された実行データがＲＡＭに展開されたエアバッグ制御装置及び廃棄装置の一構成例を模式的に示したブロック図である。
【図１３】変形例１に係るプログラム実行不能化方法及びプログラム格納方法を示したフローチャートである。
【図１４Ａ】変形例１における実行ソースコード及び非実行ソースコードを機械語で記述した実行コード及び非実行コードを示した説明図である。
【図１４Ｂ】変形例１における実行ソースコード及び非実行ソースコードを機械語で記述した実行コード及び非実行コードを示した説明図である。
【図１５】変形例１におけるマスクデータを示した説明図である。
【図１６Ａ】従来の非実行コード化、及び非実行コードの復元方法を概念的に示した説明図である。
【図１６Ｂ】従来の非実行コード化、及び非実行コードの復元方法を概念的に示した説明図である。
【発明を実施するための形態】
【００２４】
以下、本発明をその実施の形態を示す図面に基づいて詳述する。
図１は、本発明の実施の形態に係るエアバッグ制御装置１及び廃棄装置２の一構成例を模式的に示したブロック図である。
【００２５】
エアバッグ制御装置１は、図示しない収容体に収容され、車両の適宜箇所、例えばダッシュボード付近に配置される。エアバッグ制御装置１は、該エアバッグ制御装置１を構成する各構成部の動作を制御するＣＰＵ１１を備える。ＣＰＵ１１には、バスを介してＲＯＭ１２及びＲＡＭ１３が接続されている。また、ＣＰＵ１１には、バスに接続された図示しないＩ／Ｏポートを介して加速度センサ１４、点火回路１５及び通信回路１６が接続されている。
【００２６】
ＣＰＵ１１は、図示しない制御回路、演算論理回路、命令デコーダ、アドレスレジスタ、データレジスタ、命令レジスタ、プログラムカウンタ、スタックレジスタ、汎用レジスタ等の各種レジスタ、命令デコーダ等で構成されている。各種回路、レジスタの構成及び動作については周知技術であるため、その詳細は省略する。なお、図１では、作図及び説明の便宜上、一の汎用レジスタであるｒ１６レジスタのみが図示されている。また、ＣＰＵ１１には、車両に搭載された電源３がレギュレータを介して接続されており、イグニッションスイッチがオン状態になった場合、所定電圧、例えば５Ｖの電圧がＣＰＵ１１に印加されるように構成されている。
【００２７】
ＲＯＭ（記憶部）１２は、本実施の形態に係る非実行コード（実行不能化機械語プログラム）及び復元コード（復元機械語プログラム）を記憶する不揮発性の記憶部である。非実行コードは、ＣＰＵ１１がそのままＲＡＭ１３に展開及び実行されても、エアバッグを強制的に展開させる処理は実行されずに終了するものである。復元コードは、非実行コードを、エアバッグを強制的に展開させることが可能な実行コード（機械語プログラム）に復元するためのプログラムである。実行コードは、エアバッグを廃棄する際に、ＣＰＵ１１がエアバッグを強制的に展開させる処理を実行するためのプログラムである。非実行コード及び復元コードの詳細は後述する。また、ＲＯＭ１２は、車両の衝突を検知した場合にエアバッグを展開させるためのプログラムを記憶している。
なお、ＲＯＭ１２には、マスクＲＯＭ及びＰＲＯＭ（Programmable Read Only Memory）が含まれる。また、ＲＯＭ１２は、記憶部の一例であり、ＥＰＲＯＭ（Erasable and Programmable Read Only Memory）、ＥＥＰＲＯＭ（Electrically - Erasable and Programmable Read only Memory）、フラッシュメモリ、その他の不揮発メモリに非実行コード及び復元コードを格納させても良い。
【００２８】
ＲＡＭ１３は、ＣＰＵ１１が実行コード、その他の各種プログラムを実行する際に発生するデータを一時的に記憶する揮発性のメモリである。
【００２９】
加速度センサ１４は、車両の衝突を検知するための回路であり、車両に働く加速度に応じた信号をＣＰＵ１１へ出力する。
【００３０】
点火回路１５には、スクイブ１５ａが接続されており、ＣＰＵ１１から出力された信号に応じて、スクイブ１５ａに電圧を印加し、エアバッグを展開させる回路である。
スクイブ１５ａは、ステアリングホール又はダッシュボードなどに配置されたインフレータ内に収容され、その周囲には火薬が配されている。スクイブ１５ａは、図示しない昇圧回路を介して電源３に接続されており、導通することによって発熱するフィラメントなどの発熱体を有する。
点火回路１５は、スクイブ１５ａへの通電を遮断するためのスイッチを備える。該スイッチは例えば、ＭＯＳＦＥＴであり、ゲート端子は、ＣＰＵ１１のＩ／Ｏポートに接続され、ドレイン端子はスクイブ１５ａに接続され、ソース端子は接地されている。
【００３１】
通信回路１６は、ケーブルを介して廃棄装置２と接続するためのコネクタを備える。通信回路１６は、ＣＰＵ１１の制御に従って、廃棄装置２との間で、エアバッグを強制的に展開させるための各種データを送受信するための回路である。
【００３２】
廃棄装置２は、制御部２１と、通信回路２２と、操作部２３とを備える。
制御部２１は、廃棄装置２の各構成部の動作を制御するＣＰＵを備えたマイクロコンピュータであり、該ＣＰＵには、図示しないＲＯＭ、ＲＡＭ、Ｉ／Ｏポートが接続されている。
通信回路２２は、ケーブルを介してエアバッグ制御装置１と接続するためのコネクタを備える。通信回路２２は、制御部２１の制御に従って、エアバッグ制御装置１との間で、エアバッグを強制的に展開させるための各種データを送受信するための回路である。
操作部２３は、エアバッグを廃棄する際に、エアバッグを強制的に展開させるための操作を受け付けるためのボタン、スイッチ、タッチセンサなどであり、操作部２３の操作状態は、制御部２１によって検出できるように構成されている。
【００３３】
図２は、本発明の実施の形態に係るプログラム実行不能化方法及びプログラム格納方法を示したフローチャートである。プログラム実行不能化方法及びプログラム格納方法の使用者は、まず、低級言語で記述されており、エアバッグを強制的に展開させる処理を実行させるための実行ソースコード（ソースプログラム）を用意する（ステップＳ１１）。低級言語は、例えばアセンブリ言語である。なお、低級言語は、ソースプログラムを記述する言語の一例であり、機械語を除くすべてのコンピュータ言語が含まれる。
【００３４】
図３は、実行ソースコードに記述された処理手順の一部を示すフローチャートである。実行ソースコードをコンパイルして得られる実行コードによって、ＣＰＵ１１は以下の処理を実行する。まず、ＣＰＵ１１は、廃棄装置２から送信されたデータに基づく数値を変数Ａに代入する（ステップＳ３１）。そして、ＣＰＵ１１は、変数Ａの値が所定値、例えば「０ｘＡＡ」であるか否かを判定する（ステップＳ３２）。エアバッグ制御装置１は、エアバッグを強制的に展開させるための一連の手続きを廃棄装置２との間で行った場合、変数Ａに「０ｘＡＡ」が格納されるように構成されている。なお、「０ｘＡＡ」は、１６進数で表記された数値「ＡＡ」を表しており、１０進数で表記すると「１７０」である。
【００３５】
変数Ａが「０ｘＡＡ」であると判定した場合（ステップＳ３２：ＹＥＳ）、ＣＰＵ１１は、エアバッグを展開させるための展開信号を点火回路１５へ出力することによって、エアバッグを廃棄展開させ、処理を終える（ステップＳ３３）。変数Ａが「０ｘＡＡ」でないと判定した場合（ステップＳ３２：ＮＯ）、ＣＰＵ１１は処理を終える。
【００３６】
図２に示すように、ステップＳ１１の工程を終えた使用者は、次いで、実行ソースコードに含まれる一部の命令コードを他の命令コードに置換することによって、非実行ソースコードに変換する（ステップＳ１２）。
【００３７】
図４Ａ及び図Ｂは、実行ソースコードを非実行ソースコードに変換する方法を示した説明図である。図４Ａは、アセンブリ言語で記述された実行ソースコードの一部を示している。なお、図４Ａ及び図４Ｂに示したアセンブリ言語は、「ＮＥＣ  Ｖ８５０ＥＳ  シリーズマイコン」用の言語である。図４Ａに示された実行ソースコードは、図３に示したステップＳ３２の処理に対応している。具体的には、１行目のプログラムで、ＣＰＵ１１は、１バイト長変数Ａの内容をｒ１６レジスタに読み出し、２行目のプログラムで、ＣＰＵ１１は、ｒ１６レジスタに読み出された１バイト長のデータを、４バイト長データにｓｉｇｎｅｄ拡張する。ｓｉｇｎｅｄ拡張は、数値を、正負の数字を正しく扱えるように符号拡張をＣＰＵ１１に実行させるための命令である。そして、第３行目のプログラムで、ＣＰＵ１１は、ｒ１６レジスタのデータと、該ｒ１６レジスタ自身のデータとの論理和演算を実行し、第４行目のプログラムで、ｒ１６レジスタに「０ｘ５６」を加算する。なお、「０ｘ５６」は、１６進数で表記された数値「５６」を表しており、１０進数で表記すると「８６」である。
以上の処理によれば、変数Ａの内容が「０ｘＡＡ」である場合、ｒ１６レジスタの内容が「０ｘ００」になり、変数Ａの内容が「０ｘＡＡ」以外である場合、ｒ１６レジスタの内容が「０ｘ００」以外になる。そして、以下の処理は、ｒ１６レジスタの内容が「０ｘ００」である場合、エアバッグを強制的に展開させる処理が実行され、ｒ１６レジスタの内容が「０ｘ００」以外である場合、強制終了されるようにプログラムされている。
【００３８】
従って、上述の実施ソースコードを非実行ソースコードに変換するためには、どのような条件であってもｒ１６レジスタに「０ｘ００」が格納されないようにすれば良い。例えば、４行目の「ａｄｄｉ」命令の実行直前において、ｒ１６レジスタの内容が「０ｘ００」であれば良い。この場合、４行目のプログラムで、ｒ１６レジスタの内容が「０ｘ５６」になる。これは、実行コードにおける変数Ａに「０ｘＡＡ」以外の値が格納された場合と同じであり、エアバッグの展開が行われないまま、プログラムは強制終了される。
【００３９】
図４Ｂは、非実行ソースコードの一例である。図４Ｂでは、上述のように、４行目の「ａｄｄｉ」命令の実行直前において、ｒ１６レジスタの内容が「０ｘ００」になるように、実行ソースコードに含まれる命令コードの一部を変換する。具体的には、２行目の「ｓｘｂ」命令を、「ｚｘｂ」命令に置換し、３行目の「ｏｒ」命令を、「ｘｏｒ」命令に置換する。特に、置換後の３行目のプログラムで、ＣＰＵ１１は、ｒ１６レジスタのデータと、該ｒ１６レジスタ自身のデータとの排他的論理和演算を実行する。２進数で表現されたデータ「１」と、「１」との排他的論理和は「０」であり、「０」と、「０」との排他的論理和も「０」である（図８Ａ及び図８Ｂ参照）。従って、同一データの排他的論理和演算の結果、ｒ１６レジスタの内容は「０ｘ００」になる（図８Ａ及び図８Ｂ参照）。
なお、２行目の「ｚｘｂ」命令は、数値を、正負の数字を全て正のデータとして扱えるように符号拡張をＣＰＵ１１に実行させるための命令である。
【００４０】
図５は、非実行データの処理手順の一部を示すフローチャートである。非実行コードが実行された場合、ＣＰＵ１１は以下の処理を実行する。まず、ＣＰＵ１１は、廃棄装置２から送信されたデータに基づく数値を変数Ａに代入する（ステップＳ１３１）。そして、ＣＰＵ１１は、変数Ａの値が所定値、例えば「０ｘＡＡ」であるか否かを判定する（ステップＳ１３２）。ただし、非実行コードにおいては、変数Ａの値に拘わらず、常に変数Ａは所定値ではないと判定される。このため、ＣＰＵ１１は、常に変数Ａは所定値ではないと判定し（ステップＳ１３２：ＮＯ）、処理が強制的に終了することになる。
【００４１】
図２に示すように、ステップＳ１２の工程を終えた使用者は、次いで、置換された命令コードを置換前の命令コードに復元、つまり、非実行コードを実行コードに復元するためのマスクデータ（復元データ）を作成する（ステップＳ１３）。
【００４２】
図６Ａ及び図６Ｂは、実行ソースコード及び非実行ソースコードを機械語で記述した実行コード及び非実行コードを示した説明図である。図６Ａは、実行ソースコードを機械語で記述した実行コードであり、図６Ｂは、非実行ソースコードを機械語で記述した非実行コードである。命令コードの置換によってデータの内容が変更された部分には下線が引かれている。なお、ｒ，Ｒはレジスタを指定するデータ、ｄはメモリの参照アドレス、ｉは加算する数値を示したデータである。
【００４３】
図７は、マスクデータを示した説明図、図８Ａ及び図８Ｂは、排他的論理和演算の真理値表及びベン図である。非実行データを実行データに復元するためのマスクデータは、実行データと、非実行データとの排他的論理和演算によって得られる。排他的論理和演算は、図８Ａ、Ｂに示すように、第１入力と、第２入力の値が同じである場合、出力が「０」、第１入力と、第２入力の値が異なる場合、出力が「１」になるため、マスクデータによって、実行データと、非実行データとのデータの差分を表現することができる。具体的には、図６Ａ及び図６Ｂ中、２行目及び３行目に記述された命令コードを復元するためのマスクデータは、いずれも「００００００００００１０００００」である。また、命令コードが置換されていない部分についてもマスクデータを作成しておくと良い。復元時の演算が容易になるためである。命令コードの復元が不要な部分のマスクデータは「００００…」である。なお、言うまでも無く、全ての命令コードに対応するマスクデータを作成することは必須では無く、命令コードを置換した部分のマスクデータのみを作成するようにしても良い。また、マスクデータは、アセンブリ言語・機械語変換テーブルを用いて使用者が手作業で作成しても良いが、コンピュータに実行コード及び非実行コードの排他的論理和演算を実行させることによって、マスクデータを作成しても良い。
【００４４】
なお、マスクデータの作成方法として、排他的論理和を例示したが、これに限定されるものでは無く、少なくとも実行コードと、非実行コードとの差分を示したデータを作成できれば、他の方法を採用しても良い。例えば、実行コードから、非実行コードを減算して得た値をマスクデータとしても良い。この場合、非実行コードと、マスクデータとを加算することによって、実行コードを復元することができる。また、実行コードに、非実行コードを加算して得た値をマスクデータとしても良い。この場合、マスクデータから非実行コードを減算することによって、実行コードを復元することができる。更に、実行コードと、非実行コードとの間で、乗算、除算、その他の可逆な演算によって、マスクデータを算出するように構成しても良い。
【００４５】
図２に示すように、ステップＳ１３の工程を終えた使用者は、次いで、非実行コード及びマスクデータ、並びに復元用プログラムをコンパイルする（ステップＳ１４）。復元用プログラムは、非実行コードと、マスクデータとの排他的論理和演算を実行することによって、非実行コードを実行コードに復元し、復元された実行コードをＲＡＭ１３に展開するプログラムである。なお、コンパイルは、コンピュータを用いて行われるが、言うまでも無く、アセンブリ言語・機械語変換テーブルを用いて使用者が、手作業で行っても良い。
【００４６】
次いで、使用者は、コンパイルされた非実行コードと、マスクデータを含む復元コードとをＲＯＭ１２に格納させる（ステップＳ１５）。なお、マスクデータは、必ずしも復元コードと一体である必要は無く、マスクデータを用いて非実行コードを実行コードに復元できるのであれば、各別にＲＯＭ１２に格納させるようにしても良い。また、必ずしも一つのＲＯＭ１２に非実行コード、マスクデータを含む復元コードを格納させる必要は無い。例えば、非実行コードをエアバッグ制御装置１のＲＯＭ１２に格納させ、マスクデータを含む復元コードをエアバッグ制御装置１の図示しないＥＥＰＲＯＭに格納させるように構成しても良い。また、マスクデータのみをエアバッグ制御装置１の図示しないＥＥＰＲＯＭに格納させるように構成しても良い。
【００４７】
図９は、廃棄に係るエアバッグ制御装置１及び廃棄装置２の処理手順を示すフローチャートである。以下、エアバッグ制御装置１に廃棄装置２が接続され、通信回路１６、２２を介してデータを送受信することが前提として、処理内容を説明する。
【００４８】
廃棄装置２の制御部２１は、操作部２３の操作状態を監視することによって、エアバッグの廃棄処理の開始が指示されたか否かを判定する（ステップＳ５１）。廃棄処理の開始が指示されていないと判定した場合（ステップＳ５１：ＮＯ）、制御部２１は、処理を再びステップＳ５１へ戻す。廃棄処理の開始が指示されたと判定した場合（ステップＳ５１：ＹＥＳ）、制御部２１は、非実行コードの復元を要求するための復元実行データを、通信回路２２にてエアバッグ制御装置１へ送信する（ステップＳ５２）。
【００４９】
エアバッグ制御装置１のＣＰＵ１１は、廃棄装置２から送信された復元実行データを通信回路１６にて受信する（ステップＳ５３）。復元実行データを受信した場合、ＣＰＵ１１は、ＲＯＭ１２が記憶している復元コード（復元機械語プログラム）を実行することによって、ＲＯＭ１２が記憶している非実行コードと、マスクデータとから実行コードを復元し、復元された実行コードをＲＡＭ１３に展開する（ステップＳ５４）。
【００５０】
図１０は、マスクデータを用いて実行コードを復元する一般的方法を概念的に示した説明図、図１１Ａ及び図１１Ｂは、マスクデータを用いて実行コードを復元する具体的方法を概念的に示した説明図、図１２は、復元された実行データがＲＡＭ１３に展開されたエアバッグ制御装置１及び廃棄装置２の一構成例を模式的に示したブロック図である。図１０に示すように、非実行コードの復元は、非実行コードと、マスクデータとの排他的論理和演算を先頭から所定バイトずつ、例えば排他的論理和演算を実行するために使用されるレジスタが１６ビットである場合、１６ビットずつ順次実行することによって行われる。つまり、非実行コードの復元は、図６Ｂに示された非実行データと、図７に示したマスクデータとの排他的論理和演算を先頭から所定バイトずつ順次実行することによって行われる。具体的には、マスクデータの数値「１」に対応する部分の非実行データの内容が「１」から「０」へ、又は「０」から「１」へ変換される。その結果、図１１Ａに示すように「ｚｘｂ」命令は、「ｓｘｂ」命令に復元され、図１１Ｂに示すように「ｘｏｒ」命令は、「ｏｒ」命令に復元される。以上の処理によって、図６Ｂに示した非実行コードは、図６Ａに示した実行コードに復元され、復元された実行コードは、図１２に示すようにＲＡＭ１３に展開される。
そして、ＣＰＵ１１は、復元の終了を通知する復元終了通知データを、通信回路１６にて廃棄装置２へ送信する（ステップＳ５５）。
【００５１】
廃棄装置２の制御部２１は、エアバッグ制御装置１から送信された復元終了通知データを通信回路２２にて受信する（ステップＳ５６）。そして、制御部２１は、操作部２３の操作状態を監視することによって、エアバッグの廃棄処理の実行が指示されたか否かを判定する（ステップＳ５７）。エアバッグの廃棄処理の実行が指示されていないと判定した場合（ステップＳ５７：ＮＯ）、制御部２１は、処理を再びステップＳ５７へ戻す。エアバッグの廃棄処理の実行が指示されたと判定した場合（ステップＳ５７：ＹＥＳ）、制御部２１は、廃棄処理の実行を指示する廃棄実行データを、通信回路２２にてエアバッグ制御装置１へ送信する（ステップＳ５８）。
【００５２】
エアバッグ制御装置１のＣＰＵ１１は、廃棄装置２から送信された廃棄実行データを、通信回路１６を介して受信する（ステップＳ５９）。廃棄実行データを受信した場合、ＣＰＵ１１は、復元された実行コードを実行し（ステップＳ６０）、処理を終える。エアバッグを強制的に展開させるための一連の手続きが廃棄装置２との間で正しく行われ、実行コードが正しく復元されていれば、変数Ａには数値「０ｘＡＡ」が含まれているため、ステップＳ６０で図３に示した処理が実行された場合、スクイブ１５ａが点火し、エアバッグが強制的に展開する。
【００５３】
本実施の形態に係るプログラム実行不能化方法、プログラム格納方法及びエアバッグ制御装置によれば、機械語で記述された実行コードの生成後に非実行コードの生成処理を行う必要が無い。また、ＣＰＵ１１の誤作動によって、復元前に非実行コードが実行されたとしても全ての動作を把握及び保障することができる。従って、従来の実行不能化方法に比べて、安全性が高い非実行コードを作成し、ＲＯＭ１２に格納することができる。
【００５４】
また、マスクデータは、実行コードと、非実行コードとの排他的論理和によって作成される。非実行コードを復元する場合も、非実行コードと、マスクデータとの排他的論理和によって、非実行コードを実行コードに復元することができる。従って、マスクデータの作成、及び実行コードへの復元を容易に行うことができる。つまり、実行データと、非実行データとの差分を排他的論理和によって表現した場合、実行データの実行不能化及び復元を同じ思考プロセス又は演算、即ち排他的論理和によって実現することができる。このため、実行不能化時の演算方法と、復元時の演算方法とを区別する必要が無く、特に、人が復元データを生成する場合、実行不能化時の演算方法が何で、復元時の演算方法が何で等と考える必要が無くなる。
【００５５】
（変形例１）
変形例１に係るエアバッグ制御装置１、プログラム実行不能化方法及びプログラム格納方法は、非実行化の方法のみが異なるため、以下では主に上記相異点について説明する。変形例１に係るプログラム格納方法は、実行ソースプログラムに含まれる一部の参照アドレスを、他の参照アドレスに置換することによって、実行不能にするものである。
【００５６】
図１３は、変形例１に係るプログラム実行不能化方法及びプログラム格納方法を示したフローチャートである。変形例１では、プログラム格納方法の使用者は、上述の実施の形態と同様、まず、低級言語で記述されており、エアバッグを強制的に展開させる処理を実行させるための実行ソースコードを用意する（ステップＳ１１１）。そして、使用者は、実行ソースコードに含まれる一部の参照アドレスを他の参照アドレスに置換するすることによって、非実行ソースコードに変換する（ステップＳ１１２）。以下、ステップＳ１１３〜ステップＳ１１５において、ステップＳ１３〜ステップＳ１５と同様の処理を実行する。
【００５７】
図１４Ａ及び図１４Ｂは、変形例１における実行ソースコード及び非実行ソースコードを機械語で記述した実行コード及び非実行コードを示した説明図である。図１４Ａ及び図１４Ｂに示すように、変数Ａの参照アドレスは「００００００００００００１０００」である。ステップＳ１１２で、使用者は、変数Ａの参照アドレスを「０００００００００００１００００」に置換している。置換後の参照アドレスには、常に数値「０ｘ００」が格納されているなど、実行コードにおける変数Ａに「０ｘＡＡ」以外の値が格納された場合と同じ結果になるように、参照アドレスを変更する。この場合、エアバッグの展開が行われないまま、プログラムは強制終了される。
なお、アドレスに格納される数値は、ＣＰＵ１１が誤動作した場合、予想し得ない数値に置き換わるおそれがあるため、命令コードも合わせて他の命令コードに置換しておく方が良い。以下では、説明の便宜上、参照メモリアドレスのみを置換した例を説明する。
【００５８】
図１５は、変形例１におけるマスクデータを示した説明図である。マスクデータは、変数Ａの参照アドレス「００００００００００００１０００」と、置換後の参照アドレス「０００００００００００１００００」との排他的論理和演算を行うことによって、置換後の参照アドレスを、置換前の参照アドレスに復元するマスクデータを作成することができる。なお、上述の実施の形態と同様、図１５では、置換されていない他の命令コードに対するマスクデータも作成されている。
【００５９】
変形例１に係るプログラム実行不能化方法、プログラム格納方法及びエアバッグ制御装置によれば、実施の形態と同様の効果を奏する。特に、変形例１に係る方法と、実施の形態に係る方法とを組み合わせることによって、耐障害性を向上させ、誤動作をより効果的に防止することができる。
【００６０】
今回開示された実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上記した意味ではなく、請求の範囲によって示され、請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００６１】
１  エアバッグ制御装置
２  廃棄装置
３  電源
１１  ＣＰＵ
１２  ＲＯＭ
１３  ＲＡＭ
１４  加速度センサ
１５  点火回路
１５ａ  スクイブ
１６  通信回路
２１  制御部
２２  通信回路
２３  操作部
【図１】
0005468086.tif 000002
【図２】
0005468086.tif 000003
【図３】
0005468086.tif 000004
【図４Ａ】
0005468086.tif 000005
【図４Ｂ】
0005468086.tif 000006
【図５】
0005468086.tif 000007
【図６Ａ】
0005468086.tif 000008
【図６Ｂ】
0005468086.tif 000009
【図７】
0005468086.tif 000010
【図８Ａ】
0005468086.tif 000011
【図８Ｂ】
0005468086.tif 000012
【図９】
0005468086.tif 000013
【図１０】
0005468086.tif 000014
【図１１Ａ】
0005468086.tif 000015
【図１１Ｂ】
0005468086.tif 000016
【図１２】
0005468086.tif 000017
【図１３】
0005468086.tif 000018
【図１４Ａ】
0005468086.tif 000019
【図１４Ｂ】
0005468086.tif 000020
【図１５】
0005468086.tif 000021
【図１６Ａ】
0005468086.tif 000022
【図１６Ｂ】
0005468086.tif 000023