このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
C / c++とMATLAB®では変数の扱いが異なります。それらの違いのうちでコード生成ワークフローに影響するものは次のとおりです。
C / c++ソースコードには,すべての変数について型宣言が含まれています。それらの宣言を使用して,コンパイル時にC / c++コンパイラがすべての変数の型を決定します。MATLABコードには,明示的な型宣言はありません。実行時にMATLAB実行エンジンが変数の型を決定します。
C / c++では,配列のメモリをコンパイル時に静的に宣言する(固定サイズの配列)ことも,実行時に動的に割り当てる(可変サイズの配列)こともできます。MATLABでは,配列のメモリはいずれも動的に割り当てられ,すべての配列が可変サイズになります。
C / c++コードの生成で特定の型を使用するには,MATLABのエントリポイント関数に対するすべての入力変数のプロパティ(クラス,サイズ,実数/複素数)をC / c++コードまたは墨西哥人コードの生成時に指定しなければなりません。“エントリポイント関数”は,コードを生成する最上位のMATLAB関数です。コードジェネレーターは,それらの入力プロパティを使用して,生成コードに含まれるすべての変数のプロパティを決定します。入力の型の指定が異なっていると,同じMATLABコードから異なるバージョンの生成コードが生成されることがあります。
codegen
コマンドを使用してコードを生成する場合は,arg游戏
オプションを使用して入力の型を指定します。MATLAB编码器™アプリを使用してコードを生成する場合は,(入力の型を定義]ページで入力の型を指定します。
入力の型の指定による生成コードへの影響について,簡単なMATLAB関数で確認してみましょう。ここでは2つの量一个
とb
の積を求めてその値を返すmyMultiply
を使用します。
函数y = myMultiply(a,b) y = a*b;结束
入力引数一个
とb
の3つの異なる型指定による静的なCライブラリコードを生成します。それぞれの場合について,生成されるコードを検証します。
一个
とb
を実数で双のスカラーとして指定します。これらの入力のコードを生成するには,次のコマンドを実行します。
= 1;codegen配置:自由myMultiplyarg游戏{一},
myMultiply.c
に含まれるC関数は次のようになります。
double myMultiply(double a, double b) {return a * b;}
一个
とb
を実数での两倍5
行5
列の行列として指定します。これらの入力のコードを生成するには,次のコマンドを実行します。
a = 0 (5,5);codegen配置:自由myMultiplyarg游戏{一},
myMultiply.c
に含まれるC関数は次のようになります。
void myMultiply(const double a[25], const double b[25], double y[25]) {int i;int i1;双d;int i2;For (i = 0;我< 5;i++) {for (i1 = 0;i1 < 5;I1 ++) {d = 0;For (i2 = 0; i2 < 5; i2++) { d += a[i + 5 * i2] * b[i2 + 5 * i1]; } y[i + 5 * i1] = d; } } }
const aa [25]
とconst双b [25]
は,MATLABコードの入力一个
とb
に対応します。Cコードの1次元配列一个
とb
のサイズは25
です。これは,関数codegen
を呼び出したときに使用したサンプル入力配列の要素の合計数と同じです。C関数にはもう1つ引数があります。サイズが25
の1次元配列y
です。この配列は関数の出力を返すために使用されます。
配列の次元をMATLABコードと同じにしてコードを生成することもできます。N次元インデックスを使用するコードの生成を参照してください。
最後に,複数の異なるサイズの入力配列を受け入れるmyMultiply
のコードを生成します。可変サイズの入力を指定するには,関数coder.typeof
を使用します。coder.typeof (A, B, 1)
は,クラスと実数/複素数が一个
と同じで,上限がサイズベクトルB
の対応する要素で与えられる可変サイズの入力を指定します。
一个
とb
を実数で双の可変サイズ配列として指定します。最大サイズはどちらの次元も10
です。コードを生成するには,次のコマンドを実行します。
一个=编码器。typeof (1, 10 [10], 1);codegen配置:自由myMultiplyarg游戏{一},
void myMultiply(const double a_data[], const int a_size[2], const double b_data[], const int b_size[2], const y_data[], int y_size[2])
a_data
、b_data
,およびy_data
は,元のMATLAB関数の入力引数x
とb
および出力引数y
に対応します。これで,a_data
、b_data
,およびy_data
のサイズを実行時に指定する3つの追加の引数a_size
、b_size
,およびy_size
をC関数が受け入れるようになります。