主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

コード生成用の入力の型の指定

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游戏{一},
    生成されるCソースファイルmyMultiply.cに含まれるC関数は次のようになります。

    double myMultiply(double a, double b) {return a * b;}
  • 一个bを実数での两倍55列の行列として指定します。これらの入力のコードを生成するには,次のコマンドを実行します。

    a = 0 (5,5);codegen配置:自由myMultiplyarg游戏{一},
    生成されるCソースファイル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游戏{一},
    生成されるC関数のシグネチャは次のようになります。

    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_datab_data,およびy_dataは,元のMATLAB関数の入力引数xbおよび出力引数yに対応します。これで,a_datab_data,およびy_dataのサイズを実行時に指定する3つの追加の引数a_sizeb_size,およびy_sizeをC関数が受け入れるようになります。

参考

|

関連するトピック