В этом примере показано, как сконфигурировать S-функцию, сгенерированную с Legacy Code Tool, чтобы быть совместимым с покрытием. Инструмент model coverage поддерживает S-функции, которые являются:
Сгенерированный с Legacy Code Tool, с def.Options.supportCoverage
установите на true
,
Сгенерированный с SFunctionBuilder, с Включают поддержку выбранного On покрытия вкладки Build Info диалогового окна SFunctionBuilder, или
Скомпилированный с функцией slcovmex.
Модель в качестве примера sldemo_lct_bus содержит S-функцию, сгенерированную с Legacy Code Tool. S-функция имеет построения, которые получают решение, условие и покрытие MCDC.
Устаревший исходный код в файлах counterbus.h и counterbus.c реализуют тот же алгоритм как в sldemo_lct_bus/slCounter. Структура данных Legacy Code Tool определяется следующим образом:
load_system('sldemo_lct_bus'); open_system('sldemo_lct_bus/TestCounter'); def = legacy_code('initialize'); 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'}; def.IncPaths = {'sldemo_lct_src'}; def.SrcPaths = {'sldemo_lct_src'};
Чтобы сделать это S-Function совместимый с покрытием модели, включите следующую опцию:
def.Options.supportCoverage = true;
Сгенерируйте и скомпилируйте S-функцию с помощью функции legacy_code:
legacy_code('generate_for_sim', def);
### Start Compiling sldemo_sfun_counterbus mex -I/mathworks/devel/bat/BR2019bd/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src -I/tmp/BR2019bd_1170825_64229/publish_examples0/tpea4e0d77 -c /tmp/BR2019bd_1170825_64229/publish_examples0/tp0231e2ac_8d9c_4d51_90c1_4a1c04be96b1/counterbus.c -outdir /tmp/BR2019bd_1170825_64229/publish_examples0/tp881a2486_46f7_4f0b_9cb9_ff737a467c24 Building with 'gcc'. MEX completed successfully. mex -I/mathworks/devel/bat/BR2019bd/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src -I/tmp/BR2019bd_1170825_64229/publish_examples0/tpea4e0d77 /tmp/BR2019bd_1170825_64229/publish_examples0/tp0231e2ac_8d9c_4d51_90c1_4a1c04be96b1/tp0df12a6b_bdb3_4348_b930_dbfad25c47e4.c /tmp/BR2019bd_1170825_64229/publish_examples0/tp881a2486_46f7_4f0b_9cb9_ff737a467c24/counterbus.o -L/mathworks/devel/bat/BR2019bd/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldemo_sfun_counterbus Building with 'gcc'. MEX completed successfully. mex -I/mathworks/devel/bat/BR2019bd/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src -I/tmp/BR2019bd_1170825_64229/publish_examples0/tpea4e0d77 -c /mathworks/devel/bat/BR2019bd/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src/counterbus.c -outdir /tmp/BR2019bd_1170825_64229/publish_examples0/tp881a2486_46f7_4f0b_9cb9_ff737a467c24 Building with 'gcc'. MEX completed successfully. mex -I/mathworks/devel/bat/BR2019bd/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src -I/tmp/BR2019bd_1170825_64229/publish_examples0/tpea4e0d77 /tmp/BR2019bd_1170825_64229/publish_examples0/tp0231e2ac_8d9c_4d51_90c1_4a1c04be96b1/sldemo_sfun_counterbus.c /tmp/BR2019bd_1170825_64229/publish_examples0/tp0231e2ac_8d9c_4d51_90c1_4a1c04be96b1/tp8200bb31_610c_4443_9139_6978aa5eec6a.c /tmp/BR2019bd_1170825_64229/publish_examples0/tp0231e2ac_8d9c_4d51_90c1_4a1c04be96b1/tp40a85b6b_b9eb_4e36_8546_13e7b5b56670.c /tmp/BR2019bd_1170825_64229/publish_examples0/tp881a2486_46f7_4f0b_9cb9_ff737a467c24/counterbus.o -L/mathworks/devel/bat/BR2019bd/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldemo_sfun_counterbus Building with 'gcc'. MEX completed successfully. ### Finish Compiling sldemo_sfun_counterbus ### Exit
Чтобы включить набор покрытия для S-функций, выберите C/C ++ S-Functions в панели Покрытия диалогового окна Configurations Parameters. В качестве альтернативы установите опцию через командную строку:
set_param('sldemo_lct_bus',... 'CovMetricSettings', 'dcme',... 'RecordCoverage', 'on',... 'CovHtmlReporting', 'on',... 'CovSFcnEnable', 'on'... );
Если вы включаете сбор данных покрытия, информация о покрытии автоматически зарегистрирована, когда вы симулируете модель. В конце симуляции инструмент model coverage производит отчет HTML информации о покрытии, которая отображена во встроенном в MATLAB® веб-браузере.
sim('sldemo_lct_bus', 'StopTime', '20');
cvdata
объект может использоваться, чтобы извлечь информацию о покрытии для S-функций, точно так же, как любой другой поддерживаемый элемент модели. Например, decisioninfo
команда извлекает информацию о покрытии из блока path или указателя блока. Выход является вектором, содержащим которым удовлетворяют и общие результаты для одного объекта модели.
cov = decisioninfo(covdata, 'sldemo_lct_bus/TestCounter/sldemo_sfun_counterbus')
cov = 3 4
Вы затем используете эту информацию о покрытии, чтобы вычислить процент покрытых объектов модели:
percentCov = 100 * (cov(1)/cov(2))
percentCov = 75
Покрытие S-функции полностью совместимо с командами покрытия модели, таково как decisioninfo
, conditioninfo
, и mcdcinfo
.
Чтобы завершить демонстрацию, закройте все модели.
close_system('sldemo_lct_bus',0)