В этом примере показано, как настроить S-функцию, сгенерированную с помощью Legacy Code Tool, для совместимости с покрытием. Этот инструмент model coverage поддерживает S-функции, которые:
Сгенерирован с помощью Legacy Code Tool, с def.Options.supportCoverage
установлено на true
,
Сгенерирован с помощью SFunctionBuilder, с поддержкой Enable для покрытия, выбранной на вкладке Build Info диалогового окна SFunctionBuilder, или
Скомпилирован с slcovmex
функция.
Пример модели, sldemo_lct_bus содержит S-функцию, сгенерированную с помощью Legacy Code Tool. S-Function имеет конструкции, которые получают решение, условие и покрытие 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'};
Чтобы сделать эту S-функцию совместимой с покрытием модели, включите следующую опцию:
def.Options.supportCoverage = true;
Сгенерируйте и скомпилируйте S-функцию с помощью legacy_code
функция:
legacy_code('generate_for_sim', def);
### Start Compiling sldemo_sfun_counterbus mex -I/tmp/BR2021ad_1584584_202060/publish_examples1/tpa9509758/ex71096464 -c /tmp/BR2021ad_1584584_202060/publish_examples1/tp438bf0f9_a744_4c20_a329_0aa6dadb7a90/counterbus.c -outdir /tmp/BR2021ad_1584584_202060/publish_examples1/tp0f052955_9f8e_42d9_86e4_5667cf6e9785 Building with 'gcc'. MEX completed successfully. mex -I/tmp/BR2021ad_1584584_202060/publish_examples1/tpa9509758/ex71096464 /tmp/BR2021ad_1584584_202060/publish_examples1/tp438bf0f9_a744_4c20_a329_0aa6dadb7a90/tp786a8d90_ef55_4d26_afc1_30ac77bbc943.c /tmp/BR2021ad_1584584_202060/publish_examples1/tp0f052955_9f8e_42d9_86e4_5667cf6e9785/counterbus.o -L/mathworks/devel/bat/BR2021ad/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldemo_sfun_counterbus Building with 'gcc'. MEX completed successfully. mex -I/tmp/BR2021ad_1584584_202060/publish_examples1/tpa9509758/ex71096464 -c /tmp/BR2021ad_1584584_202060/publish_examples1/tpa9509758/ex71096464/counterbus.c -outdir /tmp/BR2021ad_1584584_202060/publish_examples1/tp0f052955_9f8e_42d9_86e4_5667cf6e9785 Building with 'gcc'. MEX completed successfully. mex -I/tmp/BR2021ad_1584584_202060/publish_examples1/tpa9509758/ex71096464 /tmp/BR2021ad_1584584_202060/publish_examples1/tp438bf0f9_a744_4c20_a329_0aa6dadb7a90/sldemo_sfun_counterbus.c /tmp/BR2021ad_1584584_202060/publish_examples1/tp438bf0f9_a744_4c20_a329_0aa6dadb7a90/tpbc5c223c_ef2b_492d_920f_4b0308376c2a.c /tmp/BR2021ad_1584584_202060/publish_examples1/tp438bf0f9_a744_4c20_a329_0aa6dadb7a90/tpb8601e3c_deec_4336_9def_b12a978f7849.c /tmp/BR2021ad_1584584_202060/publish_examples1/tp0f052955_9f8e_42d9_86e4_5667cf6e9785/counterbus.o -L/mathworks/devel/bat/BR2021ad/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 в панели Coverage диалогового окна Configurations Parameters. Также установите опцию через командную строку:
set_param('sldemo_lct_bus',... 'CovMetricStructuralLevel', 'MCDC',... 'RecordCoverage', 'on',... 'CovSFcnEnable', 'on'... );
Если вы включите набор данных о покрытии, информация о покрытии автоматически регистрируется при моделировании модели. В конце симуляции можно сгенерировать HTML с информацией о покрытии, который отображается во встроенном веб-браузере MATLAB ®.
sim('sldemo_lct_bus', 'StopTime', '20'); cvhtml('coverageResults', covdata);
The cvdata
объект может использоваться, чтобы извлечь информацию о покрытии для S-функций, так же как и любой другой поддерживаемый элемент модели. Для образца, decisioninfo
команда извлекает информацию о покрытии из пути блока или указателя на блок. Выход является вектором, содержащим удовлетворенные и общие результаты для одного объекта модели.
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
.