S-Function のカバレッジ
この例では、カバレッジとの互換性をもつように、レガシ コード ツールで生成される S-Function を構成する方法を示します。この例では、サポートされているコンパイラがインストールされている必要があります。サポートされているコンパイラのリストについては、Supported and Compatible Compilers に記載されている Embedded Coder® でサポートされているコンパイラを参照してください。
モデル カバレッジ ツールは、次のような S-Function をサポートします。
def.Options.supportCoverageをtrueに設定して、レガシ コード ツールで生成される。[S-Function Builder] ダイアログ ボックスの [ビルド情報] タブで [カバレッジのサポートを有効にする] を選択することで、S-Function Builder によって生成される。または
関数
slcovmexでコンパイルされる。
モデル例を開く
モデル例 slcoverage_lct_bus には、レガシ コード ツールで生成された S-Function が含まれています。この S-Function は、判定カバレッジ、条件カバレッジおよび MCDC カバレッジの対象となる構成をもっています。
モデル カバレッジとの互換性をもつように S-Function を構成
ファイル counterbus.h および counterbus.c のレガシ ソース コードは、slcoverage_lct_bus/slCounter 内と同じアルゴリズムを実装します。レガシ コード ツールのデータ構造体は次のように定義されます。
load_system('slcoverage_lct_bus'); open_system('slcoverage_lct_bus/TestCounter'); load slcoverage_lct_data.mat def = legacy_code('initialize'); def.SFunctionName = 'slcoverage_sfun_counterbus'; def.OutputFcnSpec = ... ['void counterbusFcn(COUNTERBUS u1[1], ' ... 'int32 u2, COUNTERBUS y1[1], int32 y2[1])']; def.HeaderFiles = {'counterbus.h'}; def.SourceFiles = {'counterbus.c'};

この S-Function にモデル カバレッジとの互換性をもたせるには、次のオプションを有効にします。
def.Options.supportCoverage = true;
関数legacy_codeを使用して S-Function を生成し、コンパイルします。
legacy_code('generate_for_sim', def);
### Start Compiling slcoverage_sfun_counterbus mex -I/tmp/Bdoc26a_3146167_2094772/tpe15e6ef3/slcoverage-ex71096464 -c /tmp/Bdoc26a_3146167_2094772/tp5eedc0c2_624a_41be_96f8_fcb562ff79d1/counterbus.c -outdir /tmp/Bdoc26a_3146167_2094772/tp3641f7ac_3c98_4a5a_b99c_58229aaf8f95 Building with 'gcc'. MEX completed successfully. mex -I/tmp/Bdoc26a_3146167_2094772/tpe15e6ef3/slcoverage-ex71096464 /tmp/Bdoc26a_3146167_2094772/tp5eedc0c2_624a_41be_96f8_fcb562ff79d1/tpbb23ddb5_615a_44b3_9b3c_0614fad33eec.c /tmp/Bdoc26a_3146167_2094772/tp3641f7ac_3c98_4a5a_b99c_58229aaf8f95/counterbus.o -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output slcoverage_sfun_counterbus Building with 'gcc'. MEX completed successfully. mex -I/tmp/Bdoc26a_3146167_2094772/tpe15e6ef3/slcoverage-ex71096464 -c /tmp/Bdoc26a_3146167_2094772/tpe15e6ef3/slcoverage-ex71096464/counterbus.c -outdir /tmp/Bdoc26a_3146167_2094772/tp3641f7ac_3c98_4a5a_b99c_58229aaf8f95 Building with 'gcc'. MEX completed successfully. mex -I/tmp/Bdoc26a_3146167_2094772/tpe15e6ef3/slcoverage-ex71096464 /tmp/Bdoc26a_3146167_2094772/tp5eedc0c2_624a_41be_96f8_fcb562ff79d1/slcoverage_sfun_counterbus.c /tmp/Bdoc26a_3146167_2094772/tp5eedc0c2_624a_41be_96f8_fcb562ff79d1/tpdb39f79b_1491_448e_91da_eed7d1ff099b.c /tmp/Bdoc26a_3146167_2094772/tp5eedc0c2_624a_41be_96f8_fcb562ff79d1/tpc42fd052_0835_43c6_acbe_f2629e7cf85c.c /tmp/Bdoc26a_3146167_2094772/tp3641f7ac_3c98_4a5a_b99c_58229aaf8f95/counterbus.o -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output slcoverage_sfun_counterbus Building with 'gcc'. MEX completed successfully. ### Finish Compiling slcoverage_sfun_counterbus ### Exit
S-Function カバレッジの有効化
S-Function のカバレッジ収集を有効にするには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインで [C/C++ S-Function] を選択します。または、コマンド ラインでオプションを設定します。
set_param('slcoverage_lct_bus',... 'CovMetricStructuralLevel', 'MCDC',... 'RecordCoverage', 'on',... 'CovSFcnEnable', 'on',... 'CovSaveSingleToWorkspaceVar','on'... );
シミュレーションの実行とカバレッジ レポートの生成
モデルのシミュレーションを行い、カバレッジ データを記録します。シミュレーションの最後に、cvhtml を使用してカバレッジ結果の HTML レポートを生成し、そのレポートを HTML ビューアーで開きます。
sim('slcoverage_lct_bus', 'StopTime', '20'); cvhtml('coverageResults', covdata);
カバレッジ データ オブジェクトからの情報の抽出
cvdata オブジェクトを使用すると、他のサポートされているモデル要素と同様に、S-Function のカバレッジ情報を抽出できます。たとえば、decisioninfo コマンドは、ブロック パスまたはブロック ハンドルからカバレッジ情報を抽出します。出力は、単一のモデル オブジェクトの達成された結果と合計結果を含むベクトルです。
cov = decisioninfo(covdata, ... 'slcoverage_lct_bus/TestCounter/slcoverage_sfun_counterbus')
cov =
3 4
次に、このカバレッジ情報を使用して、カバーされているモデル オブジェクトの割合を計算します。
percentCov = 100 * (cov(1)/cov(2))
percentCov =
75
S-Function カバレッジには、decisioninfo、conditioninfo および mcdcinfo などのモデル カバレッジ コマンドとの完全な互換性があります。