Пакет: slcoverage
Выберите пользовательский код C or C++ для фильтра покрытия
Используйте объекты slcoverage.CodeSelector класс, чтобы задать пользовательские критерии выбора кода C or C++ для правила фильтра.
slcoverage.CodeSelector классом является handle класс.
sel = slcoverage.CodeSelector(type,fileName) создает CodeSelector объект заданного type на основе заданного fileName и устанавливает Type и FileName свойства.
sel = slcoverage.CodeSelector(type,fileName,functionName) создает CodeSelector основанный на объектах на заданном C или C++ functionName в файле и наборах FunctionName свойство.
sel = slcoverage.CodeSelector(type,fileName,functionName,expr,exprIndex) создает CodeSelector объект для заданного индекса выражения и выражения и наборов Expr и ExprIndex свойства.
sel = slcoverage.CodeSelector(type,fileName,functionName,expr,exprIndex,outcomeIndex) создает CodeSelector основанный на объектах на заданном результате покрытия и наборах OutcomeIndex свойство.
sel = slcoverage.CodeSelector(type,fileName,functionName,expr,exprIndex,outcomeIndex,parentExprIndex) создает CodeSelector основанный на объектах на заданном результате покрытия, который принадлежит выражению, принадлежавшему parentExprIndex и устанавливает DecOrCondIndex свойство к parentExprIndex.
Type — Тип пользовательского кода C or C++, чтобы выбратьslcoverage.CodeSelectorType значениеТип пользовательского кода C or C++, чтобы выбрать в виде перечисления slcoverage.CodeSelectorType класс:
slcoverage.CodeSelectorType.File — Пользовательское имя файла кода C or C++.
slcoverage.CodeSelectorType.Function — Пользовательское имя функции кода C or C++.
slcoverage.CodeSelectorType.Decision — Пользовательское решение кода C or C++.
slcoverage.CodeSelectorType.Condition — Пользовательское условие кода C or C++.
slcoverage.CodeSelectorType.DecisionOutcome — Пользовательский результат решения кода C or C++.
slcoverage.CodeSelectorType.ConditionOutcome — Пользовательский результат условия кода C or C++.
slcoverage.CodeSelectorType.MCDCOutcome — Пользовательский код C or C++ результат MCDC.
slcoverage.CodeSelectorType.RelationalBoundaryOutcome — Пользовательский код C or C++ реляционный граничный результат.
Пример: slcoverage.CodeSelectorType.Function
SetAccess | protected |
Типы данных: slcoverage.CodeSelectorType
FileName — C или файл C++, чтобы выбратьC или файл C++, чтобы выбрать в виде символьного массива или массива строк.
Пример: 'myfile.c'
SetAccess | protected |
Типы данных: char | string
FunctionName — C или C++ функционируют, чтобы выбратьC или C++ функционируют, чтобы выбрать в виде символьного массива или массива строк.
Пример: 'counterbusFcn'
SetAccess | protected |
Типы данных: char | string
Expr — Решение или выражение условия, чтобы выбратьРешение или выражение условия, чтобы выбрать в виде символьного массива или массива строк.
Пример: 'x | y'
SetAccess | protected |
Типы данных: char | string
ExprIndex — Индекс выраженияИндекс выражения в виде целого числа. Если вы фильтруете результат, это свойство является индексом выражения, которое владеет тем результатом. Если вы фильтруете выражение, это свойство является индексом того выражения в теле функции.
Пример 2
SetAccess | protected |
Типы данных: single | double | int
OutcomeIndex — Индекс результата, чтобы выбратьИндекс результата, чтобы выбрать в виде целого числа:
Для Булевого выражения введите 1 для F результат или 2 для T результат.
Для переключателя/оператора выбора введите 1 для первого случая, 2 для второго случая, и так далее.
Для реляционного контура
Целочисленный тип:
введите 1 для типа -1.
введите 2 для типа +1.
введите 3 для типа 0.
Тип плавающий:
введите 1 для [-tol 0] или [-tol 0).
введите 2 для (0 tol] или [0 tol] результат 2
Для получения дополнительной информации о реляционном граничном покрытии, смотрите Реляционное Граничное Покрытие.
Пример 2
SetAccess | protected |
Типы данных: single | double | int
DecOrCondIndex — Родительский индекс выраженияРодительский индекс выражения в виде целого числа. Используйте этот вход, когда вы отфильтруете выражение, принадлежавшее родительскому решению или условию. Это свойство является индексом родительского решения или условия относительно функции.
Пример 2
SetAccess | protected |
Типы данных: single | double | int
ConstructorCode — Код раньше создавал этот селекторный объектКод, используемый, чтобы создать этот селекторный объект, возвратился как вектор символов.
SetAccess | protected |
Description — Описание селектораОписание селектора, возвращенного как вектор символов. Simulink® Coverage™ создает описание на основе селектора.
SetAccess | protected |
Id — Идентификатор элемента моделиЭто свойство пусто для slcoverage.CodeSelector класс.
SetAccess | protected |
Типы данных: char | string | handle | integer
allSelectors | Селекторы для элемента модели или кода |
В этом примере показано, как выбрать пользовательский код C or C++, для которого вы хотите добавить правило фильтра.
Загрузите модель.
modelName = 'slcovCCallerExample'; Simulink.importExternalCTypes('my_func.h','EnumClass','dynamic'); load_system(modelName)
Сконфигурируйте настройки покрытия с помощью Simulink.SimulationInput объект.
covSet = Simulink.SimulationInput(modelName); covSet = covSet.setModelParameter('CovEnable','on'); covSet = covSet.setModelParameter('CovMetricStructuralLevel','MCDC'); covSet = covSet.setModelParameter('CovSFcnEnable','on'); covSet = covSet.setModelParameter('CovSaveSingleToWorkspaceVar','on'); covSet = covSet.setModelParameter('CovSaveName','covData'); covSet = covSet.setModelParameter('SimAnalyzeCustomCode','on');
Симулируйте модель с помощью covSet возразите как вход.
simOut = sim(covSet); covData = simOut.covData;
Создайте селекторный объект отфильтровать пользовательскую функцию C timesK.
sel = slcoverage.CodeSelector(slcoverage.CodeSelectorType.Function, 'my_func.c', 'timesK');
Создайте объект фильтра и создайте правило на основе селектора, затем добавьте правило в фильтр.
filt = slcoverage.Filter; rule = slcoverage.FilterRule(sel,'Tested elsewhere',... slcoverage.FilterMode.Exclude); addRule(filt,rule); setFilterName(filt,'Code Filter')
Сохраните фильтр как codefilter и добавьте его в cvdata объект для my_func.c. Поскольку данные о покрытии хранятся в cv.cvdatagroup объект, используйте get метод, чтобы установить свойство.
save(filt,'codefilter'); covData.get('my_func.c').filter = 'codefilter';
Сгенерируйте отчет покрытия.
cvhtml('codeCovReport',covData)
Рассмотрите отчет. Под Файлом (файлами) Пользовательского кода нажмите my_func.c и найдите, что фильтр постановляет, что вы добавили под Объектами, Фильтрованными от Анализа покрытия.

В этом примере показано, как использовать slcoverage.CodeSelector возразите, чтобы отфильтровать результат кода в пользовательском C или программе C++, вызванной блоком C Caller.
Откройте модель и включите анализ покрытия
Откройте модель.
modelName = 'slcovCCallerExample'; Simulink.importExternalCTypes('my_func.h','EnumClass','dynamic'); load_system(modelName)
Сконфигурируйте настройки покрытия с помощью Simulink.SimulationInput объект.
covSet = Simulink.SimulationInput(modelName); covSet = covSet.setModelParameter('CovEnable','on'); covSet = covSet.setModelParameter('CovMetricStructuralLevel','ConditionDecision'); covSet = covSet.setModelParameter('CovSFcnEnable','on'); covSet = covSet.setModelParameter('CovSaveSingleToWorkspaceVar','on'); covSet = covSet.setModelParameter('CovSaveName','covData');
Симулируйте модель с помощью covSet как вход.
simOut = sim(covSet); covData = simOut.covData;
Симуляция возвращает данные о покрытии как cv.cvdatagroup возразите, когда и модель и пользовательский код будут анализироваться для покрытия. Чтобы извлечь данные о покрытии кода, используйте get метод cvdatagroup класс.
codeCovData = get(covData,'my_func.c');
Выровняйте по ширине Недостающий результат
В этом примере вы выравниваете по ширине F результат inputGElower условие в (u1->limits.upper_saturation_limit >= limit) && inputGElower решение, которое расположено в counterbusFcn функция в my_func.c исходный файл.

Создайте селекторный объект с помощью slcoverage.CodeSelector. Первым входом является CodeSelectorType перечисление. Чтобы выровнять по ширине результат условия, используйте ConditionOutcome перечисление. Второй вход является исходным файлом кода, my_func.c. Третий вход является именем функции, которое содержит результат, counterbusFcn. Четвертый вход является выражением, которое содержит результат, (u1->limits.upper_saturation_limit >= limit) && inputGElower. Пятый вход является индексом выражения, которое владеет результатом. В этом случае, inputGElower второе условие в его родительском условии, таким образом, этим входом является 2. Шестой вход является индексом результата условия, который является 1 для F результат Булевого выражения. Седьмой вход является индексом родительского решения или условия, которое является 1 для (u1->limits.upper_saturation_limit >= limit) && inputGElower потому что это - первое решение в функции.
enum = slcoverage.CodeSelectorType.ConditionOutcome; sel = slcoverage.CodeSelector(enum,'my_func.c','counterbusFcn','(u1->limits.upper_saturation_limit >= limit) && inputGElower',2,1,1);
Создайте Filter возразите и FilterRule возразите и примените правило к фильтру.
filt = slcoverage.Filter;
rule = slcoverage.FilterRule(sel,'condition does not apply');
addRule(filt,rule);
Сохраните фильтр в файл фильтра и затем примените фильтр к cvdata объект.
save(filt,'codeOutcomeFilter'); codeCovData.filter = 'codeOutcomeFilter';
Рассмотрите отчет покрытия
Проверьте, что результат отфильтрован путем генерации отчета покрытия с помощью cvhtml.
cvhtml('filteredCodeCovReport',codeCovData)

cv.cvdatagroup | slcoverage.Filter | slcoverage.FilterRule | slcoverage.MetricSelector | slcoverage.SFcnSelector | cvdata
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.