(57)【要約】駆動シーケンスを制御するための機能を適合させる方法と装置であって，その場合に機能は制御するための少なくとも１つのプログラムの少なくとも１つのグローバル変数を使用し，かつこのグローバル変数に，少なくとも１つのメモリ手段内に存在するアドレス情報が対応づけられており，その場合にグローバル変数のこのアドレス情報が，少なくとも１つのロード命令によってメモリ手段からロードされる，前記方法と装置は，ロード命令のグローバル変数のアドレス情報が置き換えられることを特徴としている。【選択図】図４
2007511817.tif 000002
【特許請求の範囲】
【請求項１】
駆動シーケンスを制御するための機能を適合させる方法であって，前記機能は制御するための少なくとも１つのプログラムの少なくとも１つのグローバル変数を使用し，前記グローバル変数に，少なくとも１つのメモリ手段内に存在するアドレス情報が対応づけられており，前記グローバル変数の前記アドレス情報が少なくとも１つのロード命令によってメモリ手段からロードされる，前記方法において，
前記ロード命令の前記グローバル変数の前記アドレス情報が置き換えられることを特徴とする，駆動シーケンスを制御するための機能を適合させる方法。
【請求項２】
前記グローバル変数の前記アドレス情報が，ポインタ変数のアドレス情報によって置き換えられることを特徴とする請求項１に記載の方法。
【請求項３】
前記ポインタ変数のアドレス情報が，予約されたメモリ領域内に存在していることを特徴とする請求項２に記載の方法。
【請求項４】
ストア命令がジャンプ命令によって置き換えられることによって，前記グローバル変数に対するストア命令が操作されることを特徴とする請求項１に記載の方法。
【請求項５】
前記アドレス情報から，機能の開始アドレスが求められることを特徴とする請求項１に記載の方法。
【請求項６】
前記駆動シーケンスを制御するための機能が，前記アドレス情報の置換えにより，付加機能に置き換えられることを特徴とする請求項１または５に記載の方法。
【請求項７】
前記駆動シーケンスを制御するための機能が，ジャンプ命令によるストア命令の置換えにより，付加機能に置き換えられることを特徴とする請求項４に記載の方法。
【請求項８】
駆動シーケンスを制御するための機能を適合させる方法を実施するための装置であって，前記機能は制御するための少なくとも１つのプログラムの少なくとも１つのグローバル変数を使用し，前記グローバル変数にアドレス情報が対応づけられており，メモリ手段が設けられており，その中に前記アドレス情報が存在し，その場合にさらにコントロール手段が設けられており，前記コントロール手段によって前記グローバル変数の前記アドレス情報が，少なくとも１つのロード命令によって前記メモリ手段からロードされる，前記装置において，
前記コントロール手段は，前記ロード命令の前記グローバル変数の前記アドレス情報が置き換えられるように，形成されていることを特徴とする，装置。
【請求項９】
前記コントロール手段は，付加的に請求項２から７のいずれか１項に記載の方法が実施されるように，形成されていることを特徴とする請求項８に記載の，駆動シーケンスを制御するための機能を適合させる方法を実施するための装置。
【請求項１０】
請求項８に記載の方法を実施するための装置を有する，駆動シーケンスを制御するための制御装置。
【請求項１１】
プログラムがコンピュータ上で実施された場合に，請求項１から７のいずれか１項に記載の方法を実施するための，機械読み取り可能な担体上に記憶されている，プログラムコードを有するコンピュータプログラム製品。
【請求項１２】
プログラムがコンピュータ内で実施された場合に，請求項１から７のいずれか１項に記載のすべてのステップを実施するための，プログラムコードを有するコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，独立請求項の上位概念に記載された，特に車両における，駆動シーケンスを制御するための機能を適合させる方法および装置に基づいている。同様に，本発明は，上位概念に記載の特徴を有する，それに応じた制御装置並びにそれに応じたコンピュータプログラム製品としての，機能開発のためのそれに応じたコンピュータおよびそれと関連するコンピュータプログラムに基づいている。
【背景技術】
【０００２】
特に，エンジン，ブレーキ，トランスミッションなどの制御のための車両制御装置における，制御装置ソフトウェアの機能開発において，新しい制御装置機能を開発してテストするための，バイパスアプリケーションが，ラピッドプロトタイピング方法である。しかし，このような機能開発は，たとえば自動化領域と工作機械領域などにおけるような，他のすべての制御装置アプリケーションにおいても，可能である。
【０００３】
そのための開発方法として，たとえばＤＥ１０１０６５０４Ａ１に示されているような，外部の制御装置バイパスと，たとえばＤＥ１０２２８６１０Ａ１に開示されているような，内部の制御装置バイパスの２つのアプリケーションが使用される。
【０００４】
ＤＥ１０１０６５０４Ａ１は，特に自動車の，開ループ制御または閉ループ制御装置の開ループ制御および／または閉ループ制御機能をエミュレートするための方法とエミュレーション装置に関する。エミュレートするために，機能が外部の機能計算機へ移され，その場合にエミュレーションの開始前にエミュレーション計算機のソフトウェアインターフェイスおよび開ループ制御／閉ループ制御装置のソフトウェアインターフェイスを介して，データ接続が形成される。開ループ制御／閉ループ制御装置の新しい開ループ制御／閉ループ制御機能の開発とプログラミングを著しく促進するために，エミュレーションの開始前に様々な開ループ制御／閉ループ制御機能をエミュレートするためのソフトウェアインターフェイスが，ソフトウェアの変更なしで構成されることが提案される。
【０００５】
ＤＥ１０２２８６１０Ａ１は，少なくとも１つのバイパス機能を用いて制御プログラムを検査するための方法と装置を示しており，同方法において，制御プログラムは少なくとも１つのバイパス機能と共に電気的な計算ユニット上で実施される。その場合にバイパス機能の結合は，予め定められたインターフェイスへの動的なリンクによって行われる。
【０００６】
これら２つの挙げられた方法および装置とは関係なく，適用可能性のためには，制御装置ソフトウェア内の介入が必要である。この介入は，バイパスフリーカットまたはソフトウェアフリーカット（SoftwareFreischnitt）という概念で示される。バイパスフリーカットまたはソフトウェアフリーカットは，ソフトウェア機能内で，制御装置変数がソフトウェアプログラムによってではなく，迂回路を介して，たとえばバイパスソフトウェア機能を介して記述される箇所を，正確に記述する。ソフトウェアフリーカットは，極めて個別的であって，ノーマルな場合においては制御装置ソフトウェアプログラムの構成部分とはならない。というのはそのためにメモリリソースが消費されるからである。
【０００７】
機能開発者がソフトウェアフリーカットを有する制御装置プログラムを必要とする場合には，これは開発部門の委任に基づいて初めてプログラムスタンドへ組み込まれる。そのためにソフトウェア開発は手動で該当する機能のソースコードを変更して，コンパイルおよびリンクを介して，明確にプロトタイプアプリのために使用される，新しい制御装置プログラムを形成する。
【０００８】
従来技術に記載されているような方法または装置の欠点は，ラピッドプロトタイピングプログラムスタンドを提供できるまでの長いランスルー時間にある。その場合に主要なファクターは，それと結びついた，ソフトウェア介入を明細化して変換するための，高い技術的および管理的な手間である。
【０００９】
現在の技術状態によれば，比較し得る方法は，ストア命令（制御装置変数への書込みアクセス）のみをサブ機能へのジャンプ命令によって置き換える，という考えに基づいている。しかし，ミックスされた命令セット（１６−／３２ビットＣＰＵ命令）を有するマイクロコントローラにおいては，ストア命令は１６ビット幅である可能性がある。アドレッシングはアドレスレジスタを介して間接的に行われるからである。この１６ビット幅の命令は，サブ機能の呼出しのためには利用できない。サブ機能の直接的なアドレス指定された呼出しは，３２ビット幅のジャンプ命令を必要とするからである。従ってその場合には，従来技術における方法は，制限付きでしか使用できず，純粋な３２ビット命令セットを有するマイクロプロセッサにおいてのみ適用できる。すなわち，ストア命令のビット幅が固定されている場合には，機能開発に関するフレキシビリティは，ここでは著しく制限される。これは，所定のストア命令が他の理由からそもそも操作してはならない場合にも当てはまるので，その場合にはサブ機能へのジャンプ命令によるこの種の占有は，不可能である。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
従って本発明の課題は，ソフトウェアフリーカットをソースコード変更なしで既存のソフトウェアプログラム内へ挿入し，従来技術における上述した問題を克服することである。
【発明の利点】
【００１１】
本発明は，好ましくは車両における，駆動シーケンスを制御するための機能を適合させる方法と装置を示しており，その場合に機能は，制御するための少なくとも１つのプログラムの少なくとも１つのグローバル変数を使用し，かつこのグローバル変数に，メモリ手段内に存在するアドレス情報が対応づけられており，その場合にグローバル変数のこのアドレス情報が，少なくとも１つのロード命令によってメモリ手段からロードされ，好ましくはロード命令のグローバル変数のこのアドレス情報が置き換えられる。
【００１２】
その場合に好ましくは，アドレス情報から機能の開始アドレスが求められ，その場合に機能が付加機能によって拡張可能または置き換え可能であるので，駆動シーケンスを制御するための機能が，アドレス情報の置換えにより付加情報に置き換えられ，かつ／または拡張される。
【００１３】
従って本発明は，好ましくは，ソースコード変更なしのソフトウェアフリーカットの「動的懸下」（"Dynamic Hooks"）である。ここで説明する方法および対応する装置は，ロード命令のアドレス情報を変更し，機能呼出しを変更し，新しいプログラムコードを付加する。これらの変更は，たとえば所望のＨＥＸコード修正に基づいて，既存のソフトウェアプログラムスタンドで実施される。
【００１４】
好ましくはさらに，グローバル変数のアドレス情報が，ポインタ変数のアドレス情報によって置き換えられ，その場合にポインタ変数のアドレス情報は，特に制御装置内のメモリ手段の，予約されたメモリ領域内に存在している。
【００１５】
ロード命令に関する修正に加えて，好ましくは，ストア命令がジャンプ命令によって置き換えられることにより，グローバル変数へのストア命令が操作される。その場合に好ましくは，駆動シーケンスを制御するための機能は，ジャンプ命令によるストア命令の置換えによって，付加機能により置き換えられ，かつ／または拡張される。
【００１６】
上述した装置および方法に従って，本発明によって，この種の装置を含む制御装置およびこの種の方法を実施するのに適したコンピュータプログラムが開示され，かつ本発明の対象となる。このコンピュータプログラムは，そのために，コンピュータ，特に本発明に基づくアプリケーション制御装置配置またはアプリケーションＰＣ上で実施される。その場合に本発明に基づくコンピュータプログラムは，機械読み取り可能な任意の担体上に格納することができる。この種のコンピュータ読み取り可能なデータ担体または機械読み取り可能な担体は，特にディスケット，ＣＤ−ＲＯＭ，ＤＶＤ，メモリスティックあるいはまたそれぞれ他のモバイルのメモリ媒体とすることができる。同様に，記憶させるために，ＲＯＭ，ＰＲＯＭ，ＥＰＲＯＭ，ＥＥＰＲＯＭまたはフラッシュメモリおよび揮発ＲＡＭメモリなどのようなメモリ媒体も，可能である。従ってメモリ媒体ないし機械読み取り可能な担体の選択は，本発明の対象としてのコンピュータプログラム製品に関して制限的ではないと，見るべきである。
【００１７】
本発明によって，種々のラピッドプロトタイピング方法，ソフトウェアテスト方法およびデータ校正方法をより迅速に使用でき，かつより柔軟に取扱い可能にすることができる。
【００１８】
従ってソフトウェア開発容量の締付けなしで，ソフトウェアフリーカットの実施が行われる。従って全体として，技術的な手間や管理的な手間が低減し，それに伴ってコストが削減できる。
【００１９】
同時に，たとえば１６／３２ビット幅のＣＰＵ命令のミックスされた命令セットを有するマイクロプロセッサタイプを支援することができる。
【００２０】
他の利点と好ましい形態が，明細書と請求項の特徴から明らかにされる。
【００２１】
以下，図面に示す対象を用いて，本発明を詳細に説明する。
【実施例の説明】
【００２２】
図１は，接続１０２を介してインターフェイス１０３および１０４と結合されている，制御装置１００およびアプリシステム１０１を有するアプリ配置を概略的に示している。接続１０２は，有線（配線）でも，無線（ワイヤレス）でも形成することができる。符号１０５は，特にミックスされた命令セットを有する，マイクロプロセッサを示している。符号１０６はメモリ手段を示しており，そのメモリ手段はアドレスレジスタ１０８，データレジスタ１０７および機能に関して適合させるべき少なくとも１つのプログラムのためのメモリ領域を有している。その場合に本発明を実現するためのコントロール手段は，アプリケーションシステム内に含めることができ，またはこのアプリケーションシステムによって表すことができ，あるいはまたマイクロプロセッサ自体を利用して形成することができる。同様に，本発明を実現するためのメモリ手段を，制御装置の外部において，特にアプリケーションシステム内に収容することもできる。図示の装置によって，本発明に基づく対象が実現可能である。
【００２３】
機能の適合は，外部のバイパスによっても行うことはできるが，好ましい形態においては，適合は内部で，適合がプログラムランに組み込まれて，それにによってソースコード変更なしでソフトウェア介入の動的な懸下（ダイナミックフック）が行われるようにして，行われる。
【００２４】
ここで説明する対象は，ロード命令のアドレス情報を変更し，ストア命令の内容を変更し，機能呼出しのアドレス情報を変更して，新しいプログラムコードを付け加える。これらの変更は，ここでは実施例において，所望の１６進コード修正に基づいて既存のソフトウェアプログラムスタンドで実施される。
【００２５】
本発明に基づく対象，後述する「動的ソフトウェアフリーカット」に関する種々の構成部分は，以下のごとくである。
・プログラム箇所を求める
・プログラム箇所の修正であって，ロード／ストア命令の修正と機能呼出しの修正を有する
・付加的なプログラムコードの形成
・ソフトウェアフリーカットコードの挿入
・メモリ領域のセグメント化
・プログラムコードを形成するための開発プロセス
【００２６】
以下に示す方法は，その命令セットがミックスされており，特に１６−／３２ビット幅ＣＰＵ命令を有する，マイクロコントローラの使用に基づいている。模範的な例として，ここではInfineonのマイクロコントローラＴｒｉＣｏｒｅＴＣ１７ｘｘ(ＲＩＳＣ／ＤＰＳ／ＣＰＵ）が用いられ，そのマイクロコントローラは，特に車両における，駆動シーケンスを制御するため，たとえばエンジン制御またはステアリング，トランスミッション，ブレーキなどを制御するための制御装置の構成部分である。
【００２７】
しかし，本方法は，ミックスされていない命令セットを有するマイクロプロセッサにおいても，特に純粋な３２ビットマイクロプロセッサ（ＲＩＳＣ-プロセッサ，たとえばパワーＰＣ／ＭＰＣ５ｘｘ）においても，適用することができる。
【００２８】
原則的に，本方法においては，コンパイラのコードジェネレータは機械命令をシーケンシャルに配置するものと仮定される。ということは，アドレス情報，たとえば間接的にアドレスされた制御装置変数を該当するアドレスレジスタへロードするための連続する命令配置である。それとは異なり，変数が直接アドレスされる場合には，アドレス情報は命令自体の中にある。この実情は，ほとんどのコンパイラにおいて与えられている。
【００２９】
プログラム箇所を求める（図２）
そのための出発点は，たとえば１６進コードデータファイルの形式で提供される，制御装置ソフトウェアプログラムである。他のデータファイルとして，データ記述データファイル（たとえばＡＳＡＰ）と，制御装置変数および制御装置機能に関する情報を提供する，リンカーデータファイル（たとえばＥＬＦバイナリ）が用いられる。
【００３０】
逆アッセンブラ（たとえばウィンドウズソフトウェアプログラム）によって，１６進コードデータファイルが逆アッセンブルされる。フリーカットすべき制御装置変数の該当するアドレスは，データ記述データファイルから，あるいは本方法のために形成された基準データバンクから得られる。
【００３１】
本発明に基づいて形成された逆アッセンブラプログラム，たとえばウィンドウズ（登録商標）ソフトウェアプログラムは，逆アッセンブルされたプログラムコード内で，探し求める制御装置変数のアドレス情報の助けをかりて，これらの変数への該当するアクセス命令を探し求め（ロード／ストア命令），それが変数内容に作用する。
【００３２】
ウィンドウズ（登録商標）ソフトウェアプログラムとしての，この逆アッセンブラプログラムは，各アッセンブラ命令に従ってレジスタ内容を調べる，シミュレーションプログラムである。ストア命令が位置特定されて，ロードされたアドレスレジスタの内容が探し求める制御装置変数のアドレス値に相当し，あるいはストア命令のメモリ目標が変数アドレスに相当する場合に，検出位置が存在し，その検出位置において制御装置変数の内容が変更される。
【００３３】
検出位置においてプログラムコードがどのように変更されるか，という方法は，制御装置変数のそれぞれのアドレッシング種類に依存する。
【００３４】
これが，図２に示されている。その中で，符号２０１は，制御装置プログラムコードを示している。２０２は，ソフトウェア機能を示している。矢印２０３は，上述した，ストア命令を求めるための方法を象徴している。符号２０４は，変数アクセスのストア命令を，特に直接アドレスする場合に，ストア命令のメモリ目標がＲＡＭアドレスであって，間接的にアドレスする場合にはアドレスレジスタの内容がＲＡＭアドレスに相当するように，示しており，それによってロード命令を求めることができる。符号２０５で示す矢印は，ロード命令を求めるための，上述した方法を象徴している。特にグローバルな変数の，変数アドレスをロードするためのロード命令は，符号２０６で示されている。
【００３５】
プログラム箇所の修正（図３から８）
その場合に，一方では，様々なアドレッシング種類に従って，ロード命令検出位置および／またはストア命令検出位置が位置特定されて，その後この検出位置のために，その中に検出位置がある，制御装置機能が求められ，それによってプログラムコード全体の中ですべての機能呼出しを新たに形成されたフック機能の機能呼出しによって行うことができるので，制御装置機能の元の機能呼出しは，それに応じたフック機能の内部で行うことができる。
【００３６】
ロード／ストア命令の修正
上述したマイクロコントローラにおいて，多数の異なるアドレッシング種類が様々な仕様で与えられている。この多様性を最小限に減少させることができる。
【００３７】
以下，４つの方法が示され，それらの方法はグローバル変数への書込みアクセスのほとんどの可能な組合わせをカバーしている。コード分析するための，たとえば前もって占有されたアドレスレジスタを介しての相対アドレッシングのような，他の方法も考えられる。
【００３８】
それについて，図３には，ロードおよび／またはストア命令を修正する様々な方法の一覧が与えられている。その中で，ストア命令ｓｔ．ｘは，次のことを意味している：ｓｔ．ｂ＝ｓｔｏｒｅ  ｂｙｔｅ，ｓｔ．ｈ＝ｓｔｏｒｅ  ｈａｌｆｗｏｒｄ，そしてｓｔ．ｗ＝ｓｔｏｒｅ  ｗｏｒｄ。図３に記載されている４つの方法を，以下で詳細に説明する。
【００３９】
方法１に基づくプログラム箇所の修正は，図４に詳細に示されている。方法１は，たとえば１６ビット命令と間接的なアドレッシングである。発見されたストア命令の位置に基づいて，逆アッセンブルされたプログラムコード内で，付属のロード命令が求められるまで，箇所が遡ってたどられる。この方法にとって，発見されたロード命令が重要である。この方法は，ミックスされた命令セットにおける問題において使用されるだけでなく，他の理由からジャンプ命令によるストア命令の置換えが不可能である場合にも，使用される。
【００４０】
方法１においては，求められたロード命令は，ポインタ変数のアドレス情報に置き換えられることによって後続のストア命令に関連付けられる。命令命令このポインタ変数は，開発環境，特にＤフック開発環境を介して発生する。ポインタ変数のアドレスは，メモリ手段の，変数のために予約された自由領域内にある。修正されたロード命令は，オリジナル命令と同じアドレスレジスタをアドレスする。変更されたロード命令の違いは，アドレスレジスタのアドレッシング種類とアドレス情報内にある。
【００４１】
すなわち，図４では方法１が原理表示で説明されている。その場合に符号４０１は元のプログラムコードを示し，符号４１１は修正されたプログラムコードを示している。４０２と４０６および４１７と４０７は，制御装置機能，ここではｆｕｎｃｔｉｏｎ＿ａ（）を形成する。その場合に４０２内，ないし４１７内には，命令ないし命令シーケンスが示されており，４０６ないし４０７内には本来の機能性が示されている。符号％ａｘｘは，アドレスレジスタへのアクセス（たとえば１６ビット幅においてはａ０からａ１５まで）を示し，％ｄｘｘはデータレジスタへのアクセス（たとえば１６ビット幅においてｄ０からｄ１５）を示している。さらに命令ｍｏｖｈ．ａとｌｄ．ａ（ロード命令）およびｓｔ．ｘ（ストア命令）が４０８，４０９，４１０，４１３，４１４および４１５内に見られる。ｍｏｖｈ．ａとｌｄ．ａは，この例においては３２ビット命令（４１２と４０３を参照）として示されている。ストア命令ｓｔ．ｘは，１６ビット命令（４０５を参照）として示されており，従ってこの例においては３２ビットジャンプ命令によって置き換えられない。すでに説明したように，これは，この種の置換えが不可能であり，あるいは望ましくない，他のすべての場合についても当てはまる。新しい本発明に基づく命令コードないしプログラムコード４０３は，４１２へインポートされ，ロード命令はポインタ変数ｉＢ＿ＰｔｒＭｓｇ＿ｘｘｘ（Ｐｔｒ＝Ｐｏｉｎｔｅｒ）に変更される。制御装置変数のアドレスは，４０４に示すポインタ変数のアドレスによって置き換えられる。付加的なプログラムコードないし付加機能を形成する方法は，後に４つの方法に従って詳細に説明する。
【００４２】
方法２に基づくプログラム箇所の修正は，図５に詳細に示されている。その場合に残りすべての方法例についてと同様に，方法１についてと同じ名称および略語が当てはまる。その場合に符号５０１は元のプログラムコードを示し，符号５１１は修正されたプログラムコードを示している。５０２と５０６および５１７と５０７は，制御装置機能，ここではｆｕｎｃｔｉｏｎ＿ａ（）を形成する。その場合に５０２ないし５１７内に命令ないし命令シーケンスが示されており，５０６ないし５０７内には本来の機能性が示されている。％ａｘｘは，アドレスレジスタへのアクセス（たとえば１６ビット幅においてはａ０からａ１５）を表し，％ｄｘｘはデータレジスタへのアクセス（１６ビット幅においてはｄ０からｄ１５）を表す。さらに，ここでも命令ｍｏｖｈ．ａとｌｄ．ａ（ロード命令）とｓｔ．ｘ（ストア命令）が見られる。ストア命令ｓｔ．ｘは，３２ビット命令（５０５を参照）として示されており，従ってこの例においては３２ビットジャンプ命令ｊｌａによって置き換えることができる。新しい本発明に基づく命令コードないしプログラムコード５０３（ｊｌａ：ジャンプ命令）が，５０５にインポートされる。
【００４３】
方法２は，間接的なアドレッシングと組み合わされた，３２ビットストア命令である。３２ビットストア命令は，ソフトウェアバルコニー機能（ｂａｌｃｏｎｙ＿Ｍ２）への絶対的なジャンプ命令ｊｌａ５１２によって置き換えられる（５２０ソフトウェアバルコニー機能の呼出しを参照）。ｊｌａジャンプ命令において，アドレスレジスタａ１１内にリターンジャンプアドレスが格納される（５２１内を参照）。
【００４４】
上述したソフトウェアバルコニー機能５２１内で，アドレスレジスタ％ａｘｘ（これを介して制御装置変数がアドレスされる）の内容が，ポインタ変数のアドレス値（ｉＢ＿ＰｔｒＭｓｇ＿ｘｘｘ）によって置き換えられる。アドレスレジスタ％ａｘｘとその前にロードされたデータレジスタ％ｄｘｘの内容は，ソフトウェアバルコニー機能５２１内では同一である。
【００４５】
ソフトウェアフリーカットのために３２ビット幅のストア命令が利用される場合には，そのために付加的なプログラムコードが必要とされる。このプログラムコードは，Ｄフック開発環境内で形成されて，バルコニー機能と称される。バルコニー機能は，付加的な初期化，コピーおよびフリーカットの機構を内容とし，フリーカット機能性を拡張するためのソフトウェア機能として用いられる。バルコニー機能は，フリーカット方法２，３および４のために使用される。
【００４６】
ジャンプ命令ｊｌａによって，使用されるデータレジスタ％ｄｘｘの内容は不変である。ソフトウェアバルコニー機能内で，ポインタを介してのアドレッシングとそれに伴ってポインタ変数へのストア命令の方向変換が行われる。ストア命令ｓｔ．ｘは，オリジナルコードにおけるようなデータを記述する。
【００４７】
次に，アドレスレジスタａ１１内に記憶されている，間接的なジャンプに関するリターンジャンプアドレスを介して，５２２に示す制御装置機能へリターンジャンプされる。
【００４８】
方法３に基づくプログラム箇所の修正が，図６に詳細に示されている。その場合にすべての残りの方法例の場合と，ここでは特に，方法２の場合と同じ名称および略称が有効である。その場合に６０１は，元のプログラムコード，６１１は修正されたプログラムコードを示している。６０２と６０６および６１７と６０７が，制御装置機能，ここではｆｕｎｃｔｉｏｎ＿ａ（）を形成する。その場合に６０２内，ないし６１７内に命令ないし命令シーケンスが示されており，６０６ないし６０７内に，本来の機能性が示されている。その場合に特殊なｓｔ．ｘ（ストア命令），すなわちｓｔ．ｔが見られる。ストア命令ｓｔ．ｔは，３２ビット命令（６０５を参照）として示されており，従ってこの例においては３２ビット機能呼出しｃａｌｌ（ｃａｌｌ  ｂａｌｃｏｎｙ＿Ｍ３）によって置換え可能である。新しい本発明に基づく命令コードないしプログラムコード６０３（ｃａｌｌ：機能呼出し）が，６０５へインポートされる。
【００４９】
方法３は，直接的なアドレッシング６１８（アドレス６１０を有するストア命令）と組み合わされた，３２ビットストア命令ｓｔ．ｔである。３２ビットストア命令は，ソフトウェアバルコニー機能（ｂａｌｃｏｎｙ＿Ｍ３，６２１）の３２ビット機能呼出し（ｃａｌｌ  ｂａｌｃｏｎｙ＿Ｍ３，６０３）によって置き換えられる（６０４を参照）。ソフトウェアバルコニー機能６２１は，フリーカットの照会とオリジナル状態におけるストア命令を内容としている。フリーカットがアクティブである場合には，ストア命令は実施されない。従って変数は，制御装置機能から切り離される。そのために６１２からバルコニー機能６２１の呼出し６２０が行われる。その後制御装置変数のアドレス（ａｄｒ．ｏｆ  ｅｃｕ  Ｖａｒｉａｂｌｅ）を介して制御装置機能へのリターンジャンプ６２２が行われる。
【００５０】
方法４に基づくプログラム箇所の修正が，図７に詳細に示されている。その場合に残りのすべての方法例の場合，ここでは特に方法２の場合と，同一の名称および略称が有効である。その場合に符号７０１は，元のプログラムコードを示し，符号７１１は修正されたプログラムコードを示している。７０２と７０６および７１７と７０７が，制御装置機能，ここではｆｕｎｃｔｉｏｎ＿ａ（）を形成する。その場合に７０２内，ないし７１７名に命令ないし命令シーケンスが示され，７０６ないし７０７内には，本来の機能性が示されている。％ａｘｘは，アドレスレジスタへのアクセスを示し，％ｄｘｘはデータレジスタへのアクセスを示している。さらに，前の方法に記載されていたような，命令ｍｏｖ，ｓｔ．ｘ（ストア命令）ｃａｌｌとｊｌａが，見られる。ストア命令ｓｔ．ｘは，３２ビット命令（７０５を参照）として示されており，従ってこの例において３２ビットジャンプ命令ｊｌａによって置き換えることができる。新しい本発明に基づく命令コードないしプログラムコード７０３（ｊｌａ：ジャンプ命令）が，７０５へインポートされる。
【００５１】
方法４は，直接的なアドレッシング（７１８）と結びついた３２ビット命令ｓｔ．ｘ（７１０）である。３２ビットストア命令は，３２ビットジャンプ命令ｊｌａ（Ｊｌａ  ｂａｌｃｏｎｙ＿Ｍ４＿ａ）によって置き換えられる。ジャンプ命令は，ソフトウェアバルコニー機能１（ｂａｌｃｏｎｙ＿Ｍ４＿ａ（），７２１）を指しており，それが７２０によって呼び出される。ソフトウェアバルコニー機能７２１において，その前にロードされたデータレジスタ％ｄｘｘの内容が，テンポラリーＤフック変数（ｉＢ＿ＴｅｍｐＭｓｇ＿ｘｘｘ）へ一時記憶される。７２１から，機能呼出しｃａｌｌによって，７２３で他のバルコニー機能（ｂａｌｃｏｎｙ＿Ｍ４＿ｂ（），７２４）が呼び出される。この第２のソフトウェアバルコニー機能２は，方法３におけるのと同様に，本来のフリーカットを内容としている。ソフトウェアバルコニー機能７２４は，フリーカットの照会を内容としている。フリーカットが非アクティブにされている場合には，テンポラリー変数ｉＢ＿ＴｅｍｐＭｓｇ＿ｘｘｘが，制御装置変数へ書き戻される（７２５を参照）。フリーカットがアクティブである場合には，書き戻しは行われない。従って制御装置変数は，制御装置機能から分離される。その場合に７２２を介して制御装置機能へのリターンジャンプが行われる。
【００５２】
機能呼出しの修正（図８）
位置特定されたロード／ストア検出位置のために，その中に検出位置のある，制御装置機能が求められる。これは，本方法によって開発されたウィンドウズソフトウェアプログラムによって行われ，それはロード／ストア命令の位置に基づいて，かつ基準情報の助けを借りて，制御装置機能の該当する開始アドレスと終了アドレスを求める。
【００５３】
次に，全プログラムコード内で，制御装置機能のすべての機能呼出しが，新しく形成されたフック機能の機能呼出しによって置き換えられる。
【００５４】
制御装置機能の元の機能呼出しは，該当するフック機能の内部で行われる。
【００５５】
図８においては，見やすくする理由から，この修正表示が比較できるようにするために，これまでの図２，４，５，６，７におけるのと同じ表示が選択されている。符号８０１は，元の制御装置プログラムコードを示し，符号８１１はそれぞれ修正されたプログラムコードを示してる。その場合に課題リストｔａｓｋ＿ｌｉｓｔと，それに応じた付加機能またはサブ機能ｓｕｂｆｕｎｃｔｉｏｎ＿ｘ（）が使用される。簡単にするために，もはや命令シーケンスと本来の機能性との間ははっきりと区別されていない（それについて図３から７を参照）。符号８０４は，機能アドレスと機能呼出しを求めるための，図２と同様のプロセスを示している。８０５に示すように，ｆｕｎｃｔｉｏｎ＿ａのアドレスが，ｈｏｏｋ＿ｆｕｎｃｔｉｏｎ＿ａのアドレスによって置き換えられる。同様に，８０６において，ｆｕｎｃｔｉｏｎ＿ａの機能呼出しが，ｈｏｏｋ＿ｆｕｎｃｔｉｏｎ＿ａの呼出しによって置き換えられる。そして８０７において，ｆｕｎｃｔｉｏｎ＿ａの間接的な機能呼出しが，ｈｏｏｋ＿ｆｕｎｃｔｉｏｎ＿ａの呼出しによって置き換えられる（ここでは３２ビット命令として）。その場合にｎＰは，それぞれ置換えによって新しく形成されたプログラムコードを示している。
【００５６】
付加的なプログラムコードを形成する方法（図９）
従って，その中にフリーカットがある，各制御装置機能のために，フック機能をあてがうことができ，あるいはこの種のフック機能があてがわれる。そのために，図９には，この種のフック機能ｈｏｏｋ＿ｆｕｎｃｔｉｏｎ＿ａ（）とｈｏｏｋ＿ｆｕｎｃｔｉｏｎ＿ｘ（）の概略的な表示が開示されている。その場合に符号９０１は，制御装置プログラムコードを示している。９０２は付加的なプログラムコードのためのメモリ領域を示している。９０３は，本来のフック機能を示し，その中に符号９０４で，場合によっては必要とされるポインタ変数の可能な初期化が示されている。９０５は，特にラピッドプロトタイピング方法のソフトウェアフリーカット，コンフィグレーションおよび結合のためのプログラムコードを開示している。そして符号９０６は元の制御装置機能ｆｕｎｃｔｉｏｎ＿ａ（）の呼出しを示している。これは，第２のフック機能ｈｏｏｋ＿ｆｕｎｃｔｉｏｎ＿ｘ（）についても同様であるが，見やすくする理由から，再度示されてはいない。
【００５７】
従ってフック機能は，アプリケーションデータを介してラピッドプロトタイピング方法へのアクセスを制御する，フリーカット機構を内容としている。さらに，フック機能内で，場合によってはポインタ変数の初期化と本来の制御装置機能の機能呼出しが実施される。
【００５８】
以下，フック機能の特徴を，フリーカット方法に従って示す：
【００５９】
フリーカット方法１と２について：
ストア命令を，ポインタによってアドレスされた制御装置変数へ有意に書き込むことができるようになる前に，ポインタ変数が変数アドレスによってアドレスされなければならない。ポインタの初期化は，フック機能内で行われる。フリーカットアクセスがアクティブでない場合には，ポインタは制御装置変数のアドレスによって初期化される。フリーカットアクセスがアクティブである場合には，ポインタはテンポラリーＤフック変数のアドレスによって初期化される。ここでは，たとえば制御装置変数が間接的にアドレスされる場合には，テンポラリー変数への書込みアクセスの方向変換が行われる。
【００６０】
フリーカット方法３と４について：
２つの方法は，制御装置変数の直接的なアドレッシングである。その場合に初期化されなければならない，ポインタは使用されない。フック機能内には，ソフトウェアフリーカットを制御するための機構と元の制御装置機能の機能呼出しがある。
【００６１】
ここで，すでに説明したような，ジャンプ命令により置き換える場合のバルコニー機能を再度簡単に説明する。使用は，前もって詳細に示されている。ソフトウェアフリーカットのために３２ビット幅のストア命令が利用される場合には，そのために付加的なプログラムコードが必要である。このプログラムコードは，Ｄフック開発環境内で形成されて，バルコニー機能と称される。バルコニー機能は，付加的な初期化，コピーおよびフリーカットの機構を内容とし，フリーカット機能性を拡張するためのソフトウェア機能として用いられる。バルコニー機能は，フリーカット方法２，３および４のために使用される。
【００６２】
ソフトウェアフリーカットを挿入する方法
ソフトウェアフリーカットの挿入は，たとえば１６進コードマージランによって実施される。このアクションにおいて，ダイナミックフリーカット方法のための開発環境の結果（１６進コード）が，元のソフトウェアプログラム（１６進コード）のフリー領域へコピーされる。この方法は，１６進コード情報が２つの別々のソフトウェア開発ランから互いに結合される，内的な制御装置バイパスと同様に構成されている。
【００６３】
メモリ領域のセグメンテーション（図１０）
フリーカット方法のために，制御装置ソフトウェアプログラムのメモリレイアウトＳ１内にメモリ手段の専用のメモリ領域が必要である。図１０に示すように，本方法は，コード（Ｄフックコード）Ｓ４，データ（Ｄフックデータ）Ｓ３およびＲＡＭ（Ｄフックラム）Ｓ２のためのフリー領域を要求する。
コード領域内には，フリーカット機能（付加プログラムコード）が，データ領域内にはアプリケーションの大きさが格納され，そのアプリケーション大きさを介してフリーカット機構が制御される。本方法のために必要なポインタ変数と管理ＲＡＭ変数が，ＲＡＭ変数のためのフリー領域内に格納されている。
【００６４】
プログラムコードを形成するための開発プロセス（図１１）
ソフトウェアフリーカットコードの形成は，本方法のために形成された開発環境を介して自動的に行われ，図１１に再度示されている。その場合に点８内の変数選択は，予め定めることのできる判断基準に従って自動的に行うこと，ないしは実施することもできる。
１．１６進コードデータファイル（たとえばインテル−ＨｅｘまたはモトローラＳ１９フォーマットにおける，マシンコードを内容とする）
２．アプリケーションデータ記述データファイル（たとえば変数と特性量のアドレスと換算式）
３．ＥＬＦバイナリデータファイル（機能および変数のアドレスを有するリンカーアウトプットデータファイル）
４．マシンコードを読むことのできるアッセンブラ命令へコンバートするためのプログラム
５．逆アッセンブルされたプログラムコード（シミュレータ用のインプットとして用いられる）
６．プログラム情報を準備するためのコンバータ
７．基準データバンク（オープンリファレンスを解くために用いられる）
８．ユーザーが，フリーカットのための変数の選択を作成する
９．フリーカットすべき制御装置変数に関する情報
１０．プログラムコードシミュレータ（すべてのオペレーションコードをシーケンシャルに読んで，レジスタ内容を検査する）
１１．自動的に生成されたソースコード（ソフトウェアフリーカットのためのプログラムコード，付加情報および修正すべきプログラムコード箇所に関する情報）
１２．ソフトウェア開発環境（１６進コードおよびアプリケーションデータを形成するためのすべてのプロセスを制御）
１３．フリーカットを制御するためのアプリケーションデータ
１４．プログラムコード＋フリーカットコード＋パッチコード
１５．Ｈｅｘ／Ａ２１マージプロセス（ダイナミックフック成分が，オリジナルのプログラムコードと結合される）
１６．アプリケーションデータ記述データファイル（プロジェクトおよびフリーカットのアプリケーションデータを内容とする）
１７．ソフトウェアフリーカットを有するプログラムスタンド
【図面の簡単な説明】
【００６５】
【図１】機能を適合させるための，本発明に基づく配置または装置を示している。
【図２】プログラム内のフリーカット箇所またはソフトウェアフリーカットを求めるためのシーケンスを開示している。
【図３】ロードおよび／またはストア命令を修正するための種々の方法の概観と選択を示している。
【図４】ロード命令の第１の好ましい修正方法をプログラム表示で示している。
【図５】ストア命令の第２の修正方法をプログラム表示で開示している。
【図６】ストア命令の第３の修正方法をプログラム表示で開示している。
【図７】ストア命令の第４の修正方法をプログラム表示で開示している。
【図８】駆動シーケンスを制御するための機能の呼出しを適合させるための原理を示している。
【図９】付加機能を挿入するためのフック機能を示している。
【図１０】フック機能に関するメモリ手段内のメモリセグメントを概略的に示している。
【図１１】本発明に基づく完全な開発プロセスを詳細に示している。
【図１】
2007511817.tif 000003
【図２】
2007511817.tif 000004
【図３】
2007511817.tif 000005
【図４】
2007511817.tif 000006
【図５】
2007511817.tif 000007
【図６】
2007511817.tif 000008
【図７】
2007511817.tif 000009
【図８】
2007511817.tif 000010
【図９】
2007511817.tif 000011
【図１０】
2007511817.tif 000012
【図１１】
2007511817.tif 000013
【国際調査報告】
2007511817.tif 000014
2007511817.tif 000015
2007511817.tif 000016
2007511817.tif 000017