Можно протестировать пользовательский код C or C++ путем импорта его в Simulink® с помощью мастера Средства импорта Кода в менеджере по Тесту или командах API в командной строке MATLAB®. Можно выполнить модульное тестирование, чтобы протестировать подмножество кода С или интеграционного тестирования, чтобы протестировать полный код C or C++. Когда вы импортируете свой код, средство импорта кода:
Преобразует функции кода С в Simulink C, Вызывающая сторона блокирует и сохраняет те блоки в Библиотеке Simulink
Создает внутреннюю обвязку для каждого блока Simulink C Caller
Генерирует тестовый файл
Для модульных тестов средство импорта кода дополнительно создает песочницу, чтобы изолировать импортированные функции.
Чтобы импортировать и протестировать пользовательский код C or C++ с помощью мастера Средства импорта Кода, откройте менеджера по Тесту и выберите New> Test for C/C++ Code. Шаги мастера показывают в Модульном тестировании Поведения на Импортированном Пользовательском коде при помощи примера Мастера. После того, как вы импортируете код с помощью мастера, панель Test Browser менеджера по Тесту показывает сгенерированный тестовый файл, тестовые наборы и тесты, и автоматически заполняет модель библиотеки и поля тестовой обвязки и настройки покрытия для каждого теста. Можно настроить тесты в менеджере по Тесту путем добавления входных параметров, оценок, ссылок на требования или других опций.
Модульное тестирование Поведения на Импортированном Пользовательском коде Используя пример Команд API показывает классы и методы для импорта кода. Средство импорта кода устанавливает значения свойств для сгенерированной библиотеки, тестового файла, тестовых наборов, тестов и покрытия. Можно настроить тесты при помощи команд API, чтобы добавить входные параметры, оценки, ссылки на требования или другие опции.
Прежде чем вы запустите тесты, или измените текущую папку в папку, которая содержит сгенерированные артефакты или добавляет сгенерированный словарь данных в путь. Затем запустите тесты и просмотрите покрытие и другие результаты испытаний.
Средство импорта кода создает эти артефакты:
Библиотека Simulink с Вызывающей стороной C блокируется для каждой импортированной функции пользовательского кода.
Внутренняя тестовая обвязка для каждого блока C Caller. Для каждой сгенерированной обвязки решателем является FixedStepDiscrete
, и покрытие включено.
Тестовый файл MLDATX. Тестовый файл включает тестовый набор и тест для каждого блока C Caller. Средство импорта кода также устанавливает эти типы покрытия:
Decision Coverage
Покрытие условия
Покрытие MCDC
Покрытие интерполяционных таблиц
Покрытие диапазона сигнала
Покрытие для блоков Simulink Design Verifier
Реляционное граничное покрытие
Покрытие диапазона сигнала
Словарь данных Simulink
Кроме того, для модульных тестов только, средство импорта кода создает:
Песочница, чтобы изолировать протестированные функции
Тупики, если какие-либо исходные файлы имеют неопределенные символы
Эти ограничения и обходные решения применяются к использованию пользовательского Средства импорта Кода C or C++.
Для интеграционных тестов, если ваш код включает функции C++, добавляют обертки вокруг них, чтобы сделать их C-compatible прежде, чем импортировать функции в Simulink.
Вы не можете импортировать код, который содержит эти типы C:
Структуры с объединениями или членами указателя
Структуры с битовыми полями
Функции с двойными указателями (> = **) как входные параметры
Если ваш код имеет много глобальных переменных, используйте график Stateflow® вместо Инициализировать Функционального блока, чтобы установить переменные на их начальные значения в вашей модели Simulink.
Если заголовочный файл или C или файл C++ содержат специальные прагмы компилятора или ассемблерный код, который задан в теле функции, средство импорта кода не импортирует эту функцию. Чтобы импортировать прагмы или ассемблерный код, включайте тупиковую реализацию для функции.
Для целевого кода, если доступы кода абсолютные адреса памяти, комментируют тот код, чтобы препятствовать тому, чтобы симуляция перестала работать.
Для функции с указателем выход задайте размер выхода на странице технических требований порта в мастере или использующий функциональные объекты в API.
Если тот же заголовочный файл включен многократно, и каждому включению предшествует различная директива препроцессору (такой как, #define X 1
, #define X 2
), код не может импортировать правильно.
Если файл C или C++ включает несколько заголовочных файлов, включайте все заголовочные файлы, находятся во включать пути.
Если ассемблерный код задан в заголовочном файле как часть макроса, выделяйте тот код с помощью #ifdef
директива.
Эти ограничения и обходные решения применяются только к модульным тестам.
Только код С поддерживается для импорта.
Если исходный или заголовочный файл содержит функциональное определение, которое включено многократно в импортируемом исходном файле, обновите код, таким образом, функциональное определение появляется только однажды.
Если импортируемый исходный файл включает другие исходные файлы, и вы не можете обновить код, чтобы изменить его, не выбирайте Generate aggregated header как режим песочницы в мастере или устанавливайте Mode
свойство sltest.CodeImporter.SandboxSettings
к GenerateAggregatedHeader
.
Если исходный или заголовочный файл, который содержит определение глобальной переменной, включен многократно в импортируемом исходном файле, выберите установку песочницы Remove variable definition in header file в мастере, или в API, установите RemoveVariableDefinitionHeader
свойство sltest.CodeImporter.SandboxSettings
возразите против true
.
createSandbox
| sltest.CodeImporter
| sltest.CodeImporter.SandboxSettings