S-Function のカバレッジ
この例では、カバレッジとの互換性をもつように、レガシ コード ツールで生成される S-Function を構成する方法を示します。モデル カバレッジ ツールは、次のような 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/Bdoc25b_2988451_557347/tp30e09482/slcoverage-ex71096464 -c /tmp/Bdoc25b_2988451_557347/tp5a15bf34_9de9_42d9_a0bc_22f41969cd09/counterbus.c -outdir /tmp/Bdoc25b_2988451_557347/tpb0b0b928_5a03_4d3a_a955_3c17663d84e3 Building with 'gcc'. MEX completed successfully. mex -I/tmp/Bdoc25b_2988451_557347/tp30e09482/slcoverage-ex71096464 /tmp/Bdoc25b_2988451_557347/tp5a15bf34_9de9_42d9_a0bc_22f41969cd09/tp2e4ab83d_40d3_4bb0_b9f4_a59c40a296d4.c /tmp/Bdoc25b_2988451_557347/tpb0b0b928_5a03_4d3a_a955_3c17663d84e3/counterbus.o -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc25b.2988451/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output slcoverage_sfun_counterbus Building with 'gcc'. MEX completed successfully. mex -I/tmp/Bdoc25b_2988451_557347/tp30e09482/slcoverage-ex71096464 -c /tmp/Bdoc25b_2988451_557347/tp30e09482/slcoverage-ex71096464/counterbus.c -outdir /tmp/Bdoc25b_2988451_557347/tpb0b0b928_5a03_4d3a_a955_3c17663d84e3 Building with 'gcc'. MEX completed successfully. mex -I/tmp/Bdoc25b_2988451_557347/tp30e09482/slcoverage-ex71096464 /tmp/Bdoc25b_2988451_557347/tp5a15bf34_9de9_42d9_a0bc_22f41969cd09/slcoverage_sfun_counterbus.c /tmp/Bdoc25b_2988451_557347/tp5a15bf34_9de9_42d9_a0bc_22f41969cd09/tp2f94c41e_dc12_4d8d_835b_1300ac415a83.c /tmp/Bdoc25b_2988451_557347/tp5a15bf34_9de9_42d9_a0bc_22f41969cd09/tpcc915840_b374_431c_9291_d107c9c235a7.c /tmp/Bdoc25b_2988451_557347/tpb0b0b928_5a03_4d3a_a955_3c17663d84e3/counterbus.o -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc25b.2988451/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 などのモデル カバレッジ コマンドとの完全な互換性があります。