Можно протестировать пользовательский код 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 и функции с формальными аргументами, которые используют эти типы, не могут быть импортированы. Глобальные переменные, которые используют эти типы, не отсоединены как порты на блоке C Caller:
Структуры с объединениями или членами указателя
Функции с входными параметрами, которые имеют больше чем один уровень косвенности указателя (например, >=**
)
Функции, которые возвращают указатель
Если ваш код имеет много глобальных переменных, используйте Stateflow® стройте диаграмму вместо Инициализировать Функционального блока, чтобы установить переменные на их начальные значения в вашей модели Simulink.
Если заголовочный файл или C или файл C++ содержат ассемблерный код, который задан в теле функции, средство импорта кода не импортирует эту функцию. Это ограничение применяется, только если ассемблерный код не совместим с хостом - компьютером. Импортировать функцию,
Для интеграционных тестов замените ассемблерный код при помощи #ifdef
директива.
Для модульных тестов функция перемещена автоматически в auto_stub.c
файл с пустым телом. Чтобы импортировать функцию в Simulink, вручную заблокируйте функцию в man_stub.c
.
Для целевого кода, если доступы кода абсолютные адреса памяти, комментируют тот код, чтобы препятствовать тому, чтобы симуляция перестала работать.
Если тот же заголовочный файл включен многократно, и каждому включению предшествует различная директива препроцессору (такой как, #define X 1
, #define X 2
), код не может импортировать правильно.
Если ассемблерный код задан в заголовочном файле, задайте совместимый макрос при помощи #ifdef
директива. Например, если ваш код:
#define XYZ(K,L) {\ asm("MOVLW " ___mkstr(K) ); \ asm("MOVLW " ___mkstr(L) ); \ }
#ifndef IS_SL_IMPORT #define XYZ(K,L) {\ asm("MOVLW " ___mkstr(K) ); \ asm("MOVLW " ___mkstr(L) ); \ } #else // a valid implementation #endif
IS_SL_IMPORT
к списку задает, когда вы импортируете код.Эти ограничения и обходные решения применяются только к модульным тестам.
Только код С поддерживается для импорта.
Если исходный или заголовочный файл содержит функциональное определение, которое включено многократно в импортируемом исходном файле, обновите код, таким образом, функциональное определение появляется только однажды.
Все включенные файлы, с помощью #include
, должно быть автономным, то есть, они компилируют самостоятельно. А именно, заголовок должен иметь защиту заголовка и включать все другие заголовки, в которых требуется.
sltest.CodeImporter
| sltest.CodeImporter.SandboxSettings
| createSandbox