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