主要内容

覆盖S-Functions

这个例子展示了如何配置用遗留代码工具生成的S-Function,使之与覆盖率兼容。模型覆盖工具支持以下s -函数:金宝app

  • 使用遗留代码工具生成,使用def.Options.金宝appsupportCoverage设置为真正的

  • 生成与SFunctionBuilder,与启用覆盖支持金宝app选择在建立信息选项卡,或

  • 编译的slcovmex函数。

打开示例模型

模型的例子sldemo_lct_bus包含一个用遗留代码工具生成的s函数。s函数具有接收决策、条件和MCDC覆盖的构造。

打开sldemo_lct_bus

配置S-Function与模型覆盖率兼容

文件中的遗留源代码counterbus.h,counterbus.c中实现相同的算法sldemo_lct_bus / slCounter.遗留代码工具的数据结构定义如下:

load_system (“sldemo_lct_bus”);open_system (“sldemo_lct_bus / TestCounter”);def = legacy_code (“初始化”);def.SFunctionName =“sldemo_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.金宝appsupportCoverage = true;

属性生成并编译s函数legacy_code功能:

legacy_code (“generate_for_sim”def);
###开始编译sldemo_sfun_counterbus mex -I/tmp/Bdoc21a_1606923_254975/tp12935558/ex71096464 -c /tmp/Bdoc21a_1606923_254975/tp0de1d6f6_d6dd_4b9e_b518_75cd228df323/counterbus.c -outdir /tmp/Bdoc21a_1606923_254975/tp03626b13_2e5e_456b_bea8_00aac26e8d86 Building with 'gcc'。墨西哥人成功完成。/tmp/Bdoc21a_1606923_254975/tp12935558/ ex710966464 /tmp/Bdoc21a_1606923_254975/ tp0de1d6f6d6dd_4b9e_b518_75cd228df323 /tp8c0dfd65_c1ab_440a_ae24_1362c36137b9.c /tmp/Bdoc21a_1606923_254975/tp03626b13_2e5e_456b_bea8_00aac26e8d86/counterbus。o -L/mathworks/devel/bat/Bdoc21a/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldemo_sfun_counterbus Building with ` gcc `。墨西哥人成功完成。/tmp/Bdoc21a_1606923_254975/tp12935558/ex71096464 -c /tmp/Bdoc21a_1606923_254975/tp12935558/ex71096464/counterbus.c -outdir /tmp/Bdoc21a_1606923_254975/tp03626b13_2e5e_456b_bea8_00aac26e8d86 Building with 'gcc'。墨西哥人成功完成。/tmp/Bdoc21a_1606923_254975/tp12935558/ex71096464 /tmp/Bdoc21a_1606923_254975/ tp0de1d6f6dd_4b9e_b518_75cd228df323 /sldemo_sfun_counterbus.c /tmp/Bdoc21a_1606923_254975/ tp0de1d6f6dd_4b9e_b518_75cd228df323 / tp0de1d6f6dd_4b9e_b518_75cd228df323 /tpe15ddd76_3adf_4647_926c_396f2cb91e6f.c /tmp/Bdoc21a_1606923_254975/ tp0de1d6f6dd_4b9e_b518_75cd228df323 /tpe15ddd76_3adf_4647_926c_396f2cb91e6f/ tmp / Bdoc21a_1606923_254975 / tp0de1d6f6_d6dd_4b9e_b518_75cd228df323 tp66a20eaa_91c8_4e87_94eb_a62b42b20075.c / tmp / Bdoc21a_1606923_254975 / tp03626b13_2e5e_456b_bea8_00aac26e8d86 / counterbus。o -L/mathworks/devel/bat/Bdoc21a/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldemo_sfun_counterbus Building with ` gcc `。墨西哥人成功完成。编译sldemo_sfun_counterbus

使功能覆盖率

要启用S-Functions的覆盖率收集,请选择C / c++ S-Functions配置参数的覆盖窗格对话框。或者,通过命令行设置该选项:

set_param (“sldemo_lct_bus”...“CovMetricStructuralLevel”“MCDC”...“RecordCoverage”“上”...“CovSFcnEnable”“上”...);

运行模拟并生成覆盖率报告

一旦您启用了覆盖率数据收集,覆盖率信息将在您模拟模型时自动记录下来。在模拟结束时,您可以生成覆盖信息的HTML报告,该报告显示在内置的MATLAB®web浏览器中。

sim卡(“sldemo_lct_bus”“StopTime”“20”);cvhtml (“coverageResults”, covdata);

从覆盖数据对象中提取信息

cvdata对象可以用来提取s - function的覆盖信息,就像任何其他受支持的模型元素一样。金宝app例如,decisioninfo命令从块路径或块句柄中提取覆盖信息。输出是一个向量,包含单个模型对象的满意和全部结果。

x = decisioninfo (covdata,“sldemo_lct_bus / TestCounter / sldemo_sfun_counterbus”
Cov = 4

然后使用这个覆盖信息来计算覆盖的模型对象的百分比:

percentCov = 100 * (cov(1)/cov(2))
percentCov = 75

函数覆盖与模型覆盖命令完全兼容,例如decisioninfoconditioninfo,mcdcinfo