Можно протестировать пользовательский код C or C++, импортировав его в Simulink® использование мастера импорта кода в командах Test Manager или API в MATLAB® командная строка. Можно выполнить модульное тестирование, чтобы протестировать подмножество вашего Кода С или интегрирования проверки, чтобы протестировать полный код C or C++. Когда вы импортируете свой код, импортер кода:
Преобразует функции кода С в блоки Simulink C Caller и сохраняет эти блоки в библиотеке Simulink
Создает внутреннюю обвязку для каждого блока Simulink C Caller
Генерирует тестовый файл
Для модульных тестов импортер кода дополнительно создает песочницу, чтобы изолировать импортированные функции.
Чтобы импортировать и протестировать пользовательский код C or C++ с помощью мастера импорта кода, откройте Диспетчер тестов и выберите New > Test for C/C++ Code. Шаги мастера показаны в Модульное тестирование поведения при импорте пользовательских Кодов с помощью примера мастера. После импорта кода с помощью мастера на панели Test Browser Диспетчера тестов отображается сгенерированный тестовый файл, тестовые наборы и контрольные примеры, а также автоматически заполняются поля библиотечной модели и тестовых обвязок и параметры покрытия для каждого тестового примера. Можно настроить контрольные примеры в Диспетчере тестов, добавив входы, оценки, ссылки на требования или другие опции.
В примере Модульного тестирования поведения при импорте пользовательского кода с использованием команд API показаны классы и методы для импорта кода. Импортер кода устанавливает значения свойств для сгенерированной библиотеки, тестового файла, тестовых наборов, тестов и покрытия. Можно настроить тесты с помощью команд API, чтобы добавить входы, оценки, ссылки на требования или другие опции.
Прежде чем запускать тесты, либо смените текущую папку на папку, содержащую сгенерированные программные продукты, либо добавьте сгенерированный словарь данных к пути. Затем запустите тесты и просмотрите охват и другие результаты тестирования.
Импортер кода создает следующие программные продукты:
Библиотека Simulink с C Caller блокирует каждую импортированную функцию пользовательского кода.
Внутренняя тестовая обвязка для каждого блока C Caller. Для каждого сгенерированной обвязки решатель FixedStepDiscrete
, и покрытие включено.
Тестовый файл MLDATX. Тестовый файл включает тестовый набор и тест для каждого блока C Caller. Импортер кода также устанавливает следующие типы покрытия:
Decision Coverage
Покрытие условия
Покрытие MCDC
Покрытие интерполяционных таблиц
Охват диапазона сигнала
Покрытие для блоков Simulink Design Verifier
Реляционный краевой охват
Охват диапазона сигнала
Словарь данных Simulink
Кроме того, только для модульных тестов, импортер кода создает:
Песочница для изоляции тестируемых функций
Заглушки, если какие-либо исходные файлы имеют неопределенные символы
Эти ограничения и обходные пути применяются к использованию пользовательского импортера кода C or C++.
Для интеграционных тестов, если ваш код включает функции C++, добавьте вокруг них оболочки, чтобы сделать их C-совместимыми, прежде чем импортировать функции в Simulink.
Вы не можете импортировать код, который содержит следующие типы C:
Структуры с объединениями или представителями указателя
Структуры с битовыми полями
Функции с двойными указателями (> = * *) как входы
Если ваш код имеет много глобальных переменных, используйте Stateflow® график вместо блока Initialize Function, чтобы задать переменным их начальные значения в вашей модели 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