主要内容

matlab函数ブロックをモデル用行优先コードの生成生成

プログラミング言语は,すべてのに対して単一の配列レイアウトを想定ししますますますmatlab®fortranは,で列优先のをしますが,,,,c ++ははは优先ののをを使用使用使用金宝app®CODER™C/C ++コードコードコードコードコードををををを生成ます。。。。。

行优先コード生成详细については,行列および配列コード生成を参照しください。

MATLAB功能simulink simulinkモデルモ金宝appデルモデルモデルモデルカスタムを定义定义ようようににしします行行优先ののデータデータまたはまたは列列列MATLAB功能ブロックをについて行のコードをでき。。。MATLAB功能ブロックの详细は,金宝appsimulinkででmatlab函数ブロックブロック使用したたたた关数关数关数の実装を参照しください。

既定で,ジェネレーター列优先のコードc/c/c ++コードコードの,,,,,,[配列の]モデルパラメーター使用ことで配列のをモデルで指定できます。。ををを[行]に设定,で行优先の生成有效になりますモデル内のMATLAB功能ブロックでの生成を有效にに,ブロック内のレベルで关数Coder.Rowmajorを使用し。

行优先の生成

一部アルゴリズム,行优先のレイアウト方がアクセスのが向上向上向上しますますます。。行优先优先の配列配列レイアウトレイアウトをするするモデルのコードコードMATLAB功能ブロックがにれる场合,效率コードが得られ。。

  1. モデル例EX_ROW_MAJOR_MLFBについて考えます。

    このモデルに,[5 4]constantブロックブロックブロックれます。を指定するため,,,,[定数]を以下设定します。

    重塑(1:20,5,4)
    INPORTブロックも,[5 4]行列をし。行列指定するため,[端子の][5 4]に设定し。

  2. [コンフィギュレーション]ダイアログダイアログで,[配列の][行]に设定し。

  3. 行列加算の关数AddMatrixを记述ます特に指定ていない限り,MATLAB功能ブロックは,コンフィギュレーションパラメーター[配列の]から配列レイアウト设定継承します。

    オプションで,Coder.Rowmajorを使用し,MATLAB功能ブロックのレイアウト行优先のレイアウト的に设定でき。。

    功能s = addmatrix(a,b)s = zeros(size(a));为了行= 1:大小(a,1)为了col = 1:size(a,2)s(行,col)= a(行,col) + b(行,col);结尾结尾

  4. モデルのを生成し。。[Cコード]タブで[ビルド]をクリックし。

コードジェネレーター,ののコードを生成ます。。

for(b_row = 0; b_row <5; b_row ++){for(b_col = 0; b_col <4; b_col ++){rtb_s_tmp =(b_row << 2)+b_col;rtb_s [rtb_s_tmp] = EX_ROW_MAJOR_MLFB_P.CONSTANT_VALUE [RTB_S_S_TMP] + EX_ROW_MAJOR_MAJOR_MLFB_U.INPORT1 [RTB_SS_S_TMP];}}}
生成さたコードには为了ループ22つあります1つ目1为了ループはにアクセスし,,つ目つ目つ目の为了ループはにアクセスし。。MATLAB功能ブロックとのレイアウト同一の転置やが必要ないためため,生成されれたコードはは效率效率效率。

优先形式混在コード生成

行优先データ扱うと,列のデータを扱うMATLAB功能ブロックが,形式混在のコード生成できます。列优先のレイアウトレイアウトレイアウトをを使用使用使用使用するののコードコードをををを生成生成生成生成生成生成するするするするときときとき,,そのそのそのそのモデルモデルモデルににに行行优先优先のレイアウト必要応じブロック入力データを行优先変换,,データをを列列优先优先优先データデータに再再変换します。。列优先优先ののデータをMATLAB功能ブロックが场合优先形式混在のを生成できます。

配列レイアウト変换パフォーマンスに影响をことがあります。

  1. モデル例EX_ROW_MAJOR_MLFBを考え。例の详细について,,行优先の生成を参照しください。

    [コンフィギュレーション]ダイアログダイアログで,[配列の][行]に设定し。

  2. 关数Coder.Columnmajorを使用し,MATLAB功能ブロックの关数AddMatrixを列のデータ更新します。

    功能s = addmatrix(a,b)coder.columnmajor;s =零(size(a));为了行= 1:大小(a,1)为了col = 1:size(a,2)s(行,col)= a(行,col) + b(行,col);结尾结尾
    MATLAB功能ブロックをて优先混在のをでき。このこの场合,モデルは行优先优先のの配列レイアウトににMATLAB功能ブロックは优先配列レイアウト构成します。

  3. モデルのを生成し。。[Cコード]タブで[ビルド]をクリックし。

コードジェネレーター,ののコードを生成ます。。

for(b_row = 0; b_row <4; b_row ++){for(b_col = 0; b_col <5; b_col ++){b_tmp =(b_col << 2)+b_row;b_tmp_0 = b_col + 5 * b_row;B [B_TMP_0] = EX_ROW_MAJOR_MLFB_19B_U.INPORT1 [B_TMP];A [B_TMP_0] = EX_ROW_MAJOR_MLFB_19B_P.CONSTANT_VALUE [B_TMP];}} for(b_row = 0; b_row <5; b_row ++){/ * outport:'/outport' */for(b_col = 0; b_col <4; b_col <4; b_col ++){b_tmp = 5 * b_col+b_col+b_row; b_col+b_row;ex_row_major_mlfb_19b_y.outport [b_col +(b_row << 2)] = a [b_tmp] + b [b_tmp];}
MATLAB功能ブロックへ入力,优先の环境存在します。MATLAB功能ブロックはのであるためコードは,に送る前に,入力にに変换处理处理しししMATLAB功能ブロックの处理し后,コードはををを外港に渡す前行のデータ再変换します。

关连するトピック