再呼び出し可能なコード
再呼び出し可能なコードは複数のプログラムで同時に使用できる再利用可能なプログラミング ルーチンです。マルチスレッディングを使用して同時発生イベントを処理するオペレーティング システムやその他のシステム ソフトウェアは再呼び出し可能なコードを使用します。同時実行環境では、複数のスレッドやプロセスで静的データの読み込みと書き込みを同時に試行できます。したがって、永続データまたは静的データを使用するコードを共有するのは困難です。再呼び出し可能なコードには静的データは含まれません。呼び出し側のプログラムが状態変数を維持し、状態変数を関数に渡します。このため、再呼び出し可能ルーチンのコピーは、任意の数のスレッドやプロセスで共有できます。
次のような場合、再呼び出し可能なコードを生成します。
マルチスレッド環境でコードを展開する。
異なるプロセスやスレッドに属している永続データをもつアルゴリズムを使用する。
大きすぎてスタックに収まらない関数変数を使用するコードをコンパイルする。
再呼び出し可能なコードを指定しない場合、MATLAB® Coder™ は、次に対して静的に割り当てられたメモリを使用するコードを生成します。
大きすぎてスタックに収まらない関数変数
グローバル変数
永続変数
生成されたコードがこれらの変数に静的メモリ割り当てを使用する場合、再呼び出し可能なコードを必要とする環境に、生成されたコードは展開できません。静的メモリの割り当てサイズを調整できない場合は、生成されたコードに静的メモリ サイズのオーバーフローが発生する可能性があります。
再呼び出し可能なコードを生成すると、MATLAB Coder は次の変数に入力データ構造体を作成します。
大きすぎてスタックに収まらない関数変数
永続変数
グローバル変数
その結果、これらの入力構造体にメモリを動的に割り当てることができます。動的メモリ割り当ての使用は、再呼び出し可能な環境でコードを展開できることを意味します。
生成されたコードを展開するには、次を実行する main
関数を作成する必要があります。
ヘッダー ファイル
primary_function_name
.h. を含める。グローバル メモリ割り当ての構造体
primary_function_name
StackData
にメモリを割り当てる。アルゴリズムが永続データまたはグローバル データを使用する場合に、グローバル構造体
primary_function_name
PersistentData
にメモリを割り当てる。次の関数を呼び出す。
primary_function_name
_initialize
.primary_function_name
.primary_function_name
_terminate
.
MATLAB 関数を C/C++ ライブラリ関数または C/C++ 実行可能ファイルに変換する場合、MATLAB Coder は、2 つのハウスキーピング関数を生成します。生成された C/C++ 関数を呼び出すコード内でこれらのハウスキーピング関数を呼び出します。詳細については、生成コードの展開を参照してください。