Импорт и тестирование пользовательского кода C/C++

Можно протестировать пользовательский код C or C++ путем импорта его в Simulink® с помощью мастера Средства импорта Кода в менеджере по Тесту или командах API в командной строке MATLAB®. Можно выполнить модульное тестирование, чтобы протестировать подмножество кода С или интеграционного тестирования, чтобы протестировать полный код C or C++. Когда вы импортируете свой код, средство импорта кода:

  • Преобразует функции кода С в Simulink C, Вызывающая сторона блокирует и сохраняет те блоки в Библиотеке Simulink

  • Создает внутреннюю обвязку для каждого блока Simulink C Caller

  • Генерирует тестовый файл

Для модульных тестов средство импорта кода дополнительно создает песочницу, чтобы изолировать импортированные функции.

Импортируйте код Используя мастер или API

Чтобы импортировать и протестировать пользовательский код 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.

Смотрите также

| |

Похожие темы