このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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/Bdoc23b_2347338_65520/tpee7d0c0f/slcoverage-ex71096464 -c /tmp/Bdoc23b_2347338_65520/tp719cd2b0_8d6e_4f17_a65a_d16ce03b6dc1/counterbus.c -outdir /tmp/Bdoc23b_2347338_65520/tp8d86325d_70aa_4301_b930_0cfb88b1dc1d Building with 'gcc'. MEX completed successfully. mex -I/tmp/Bdoc23b_2347338_65520/tpee7d0c0f/slcoverage-ex71096464 /tmp/Bdoc23b_2347338_65520/tp719cd2b0_8d6e_4f17_a65a_d16ce03b6dc1/tpaa1ab554_d342_4120_a822_b7555f3a578b.c /tmp/Bdoc23b_2347338_65520/tp8d86325d_70aa_4301_b930_0cfb88b1dc1d/counterbus.o -L/mathworks/devel/bat/Bdoc23b/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output slcoverage_sfun_counterbus Building with 'gcc'. MEX completed successfully. mex -I/tmp/Bdoc23b_2347338_65520/tpee7d0c0f/slcoverage-ex71096464 -c /tmp/Bdoc23b_2347338_65520/tpee7d0c0f/slcoverage-ex71096464/counterbus.c -outdir /tmp/Bdoc23b_2347338_65520/tp8d86325d_70aa_4301_b930_0cfb88b1dc1d Building with 'gcc'. MEX completed successfully. mex -I/tmp/Bdoc23b_2347338_65520/tpee7d0c0f/slcoverage-ex71096464 /tmp/Bdoc23b_2347338_65520/tp719cd2b0_8d6e_4f17_a65a_d16ce03b6dc1/slcoverage_sfun_counterbus.c /tmp/Bdoc23b_2347338_65520/tp719cd2b0_8d6e_4f17_a65a_d16ce03b6dc1/tpbb47e5ad_2dd7_43b3_9525_8ce84bee8f22.c /tmp/Bdoc23b_2347338_65520/tp719cd2b0_8d6e_4f17_a65a_d16ce03b6dc1/tp81cc9852_3da6_460f_91e8_7bacd82c72a8.c /tmp/Bdoc23b_2347338_65520/tp8d86325d_70aa_4301_b930_0cfb88b1dc1d/counterbus.o -L/mathworks/devel/bat/Bdoc23b/build/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'... );
シミュレーションの実行とカバレッジ レポートの生成
カバレッジ データ収集を有効にすると、モデルをシミュレートしたときにカバレッジ情報が自動的に記録されます。シミュレーションの最後に、カバレッジ情報の HTML レポートを生成できます。このレポートは組み込みの MATLAB® Web ブラウザーに表示されます。
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
などのモデル カバレッジ コマンドとの完全な互換性があります。